ucsschool.http_api.import_api package

Contents

ucsschool.http_api.import_api package#

Subpackages#

Submodules#

ucsschool.http_api.import_api.admin module#

Django Admin

class ucsschool.http_api.import_api.admin.UserQueryFilterMixin[source]#

Bases: object

ordering = ('-id',)#
get_queryset(request)[source]#
class ucsschool.http_api.import_api.admin.ProxyModelFilterMixin[source]#

Bases: object

readonly_fields = ('text_loaded',)#
get_queryset(request)[source]#
text_loaded(instance)[source]#
class ucsschool.http_api.import_api.admin.UserImportJobAdmin(model, admin_site)[source]#

Bases: UserQueryFilterMixin, ModelAdmin

list_display = ('id', 'school', 'status', 'principal', 'dryrun', 'user_role')#
search_fields = ('id', 'school__name', 'source_uid', 'status', 'principal__username', 'user_role')#
list_filter = ('school__name', 'status', 'principal', 'dryrun', 'user_role')#
ordering = ('-id',)#
property media#
class ucsschool.http_api.import_api.admin.LogFileAdmin(model, admin_site)[source]#

Bases: ProxyModelFilterMixin, ModelAdmin

property media#
class ucsschool.http_api.import_api.admin.PasswordsFileAdmin(model, admin_site)[source]#

Bases: ProxyModelFilterMixin, ModelAdmin

property media#
class ucsschool.http_api.import_api.admin.SummaryFileAdmin(model, admin_site)[source]#

Bases: ProxyModelFilterMixin, ModelAdmin

property media#
class ucsschool.http_api.import_api.admin.TaskMetaAdmin(model, admin_site)[source]#

Bases: UserQueryFilterMixin, ModelAdmin

ordering = ('-id',)#
get_queryset(request)[source]#

Return a QuerySet of all model instances that can be edited by the admin site. This is used by changelist_view.

property media#

ucsschool.http_api.import_api.apps module#

App registry

class ucsschool.http_api.import_api.apps.HttpApiConfig(app_name, app_module)[source]#

Bases: AppConfig

name = 'ucsschool.http_api.import_api'#
verbose_name = 'UCS@school import API'#

ucsschool.http_api.import_api.constants module#

Constants

ucsschool.http_api.import_api.http_api_import_frontend module#

UCS@school import frontend class

class ucsschool.http_api.import_api.http_api_import_frontend.HttpApiImportFrontend(import_job, task, logger)[source]#

Bases: UserImportCommandLine

Fake cmdline import frontend class. Simulates argparse results and starts import.

http_api_specific_config = 'user_import_http-api.json'#
import_initiator = 'HTTP API'#
reader_class = 'ucsschool.importer.reader.http_api_csv_reader.HttpApiCsvReader'#
parse_cmdline()[source]#
setup_logging(stdout=False, filename=None, uid=None, gid=None, mode=None)[source]#
property configuration_files#

User import configuration files.

Returns:

list of filenames

Return type:

list(str)

static make_job_state(description, percentage=0, done=0, total=0, celery_task_state='STARTED', **kwargs)[source]#
setup_config()[source]#
update_job_state(description, percentage=0, done=0, total=0, celery_task_state='STARTED', **kwargs)[source]#

Update import job task state.

Parameters:
  • description (str) – the description

  • percentage (int) – progress

  • done (int) – if it was done

  • total (int) – number of objects

  • celery_task_state (celery.states) – one of the states from celery.states

  • kwargs (dict) – will be saved into job result.meta together with other arguments

Returns:

None

ucsschool.http_api.import_api.import_logging module#

Logging configuration for the HTTP API

ucsschool.http_api.import_api.models module#

Database / Resource models

class ucsschool.http_api.import_api.models.Role(name, displayName)[source]#

Bases: Model

name#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

displayName#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

classmethod update_from_ldap()[source]#

Update Role objects from LDAP. Currently static values are used and no LDAP query is done. This might change in the future.

Returns:

None

exception DoesNotExist#

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned#

Bases: MultipleObjectsReturned

objects = <django.db.models.manager.Manager object>#
class ucsschool.http_api.import_api.models.School(name, displayName)[source]#

Bases: Model

name#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

displayName#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

classmethod update_from_ldap(ou_str=None)[source]#

Update one or all School objects from OUs in LDAP.

Parameters:

ou_str (str) – name of School object to update, all will be updated if None

Returns:

None

exception DoesNotExist#

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned#

Bases: MultipleObjectsReturned

objects = <django.db.models.manager.Manager object>#
userimportjob_set#

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

class ucsschool.http_api.import_api.models.TextArtifact(id, path, text)[source]#

Bases: Model

path#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

text#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

get_text()[source]#
get_userimportjob()[source]#
exception DoesNotExist#

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned#

Bases: MultipleObjectsReturned

id#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>#
userimportjob_log_file#

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

userimportjob_password_file#

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

userimportjob_summary_file#

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

class ucsschool.http_api.import_api.models.Logfile(id, path, text)[source]#

Bases: TextArtifact

get_userimportjob()[source]#
exception DoesNotExist#

Bases: DoesNotExist

exception MultipleObjectsReturned#

Bases: MultipleObjectsReturned

class ucsschool.http_api.import_api.models.PasswordsFile(id, path, text)[source]#

Bases: TextArtifact

get_userimportjob()[source]#
exception DoesNotExist#

Bases: DoesNotExist

exception MultipleObjectsReturned#

Bases: MultipleObjectsReturned

class ucsschool.http_api.import_api.models.SummaryFile(id, path, text)[source]#

Bases: TextArtifact

get_userimportjob()[source]#
exception DoesNotExist#

Bases: DoesNotExist

exception MultipleObjectsReturned#

Bases: MultipleObjectsReturned

class ucsschool.http_api.import_api.models.UserImportJob(id, dryrun, principal, school, source_uid, status, user_role, task_id, result, log_file, password_file, summary_file, basedir, date_created, input_file)[source]#

Bases: Model

dryrun#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

principal#

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

school#

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

source_uid#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

status#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

user_role#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

task_id#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

result#

Accessor to the related object on the forward side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Restaurant.place is a ForwardOneToOneDescriptor instance.

log_file#

Accessor to the related object on the forward side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Restaurant.place is a ForwardOneToOneDescriptor instance.

password_file#

Accessor to the related object on the forward side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Restaurant.place is a ForwardOneToOneDescriptor instance.

summary_file#

Accessor to the related object on the forward side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Restaurant.place is a ForwardOneToOneDescriptor instance.

basedir#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

date_created#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

input_file#

The descriptor for the file attribute on the model instance. Return a FieldFile when accessed so you can write code like:

>>> from myapp.models import MyModel
>>> instance = MyModel.objects.get(pk=1)
>>> instance.file.size

Assign a file object on assignment so you can do:

>>> with open('/path/to/hello.world') as f:
...     instance.file = File(f)
exception DoesNotExist#

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned#

Bases: MultipleObjectsReturned

get_next_by_date_created(*, field=<django.db.models.fields.DateTimeField: date_created>, is_next=True, **kwargs)#
get_previous_by_date_created(*, field=<django.db.models.fields.DateTimeField: date_created>, is_next=False, **kwargs)#
get_status_display(*, field=<django.db.models.fields.CharField: status>)#
get_user_role_display(*, field=<django.db.models.fields.CharField: user_role>)#
id#

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

log_file_id#
objects = <django.db.models.manager.Manager object>#
password_file_id#
principal_id#
result_id#
school_id#
summary_file_id#

ucsschool.http_api.import_api.serializers module#

Model/HTTP-API Serializers

class ucsschool.http_api.import_api.serializers.TaskResultSerializer(*args, **kwargs)[source]#

Bases: HyperlinkedModelSerializer

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

class Meta[source]#

Bases: object

model#

alias of TaskResult

fields = ('status', 'result', 'date_done', 'traceback')#
read_only_fields = ('status', 'result', 'date_done', 'traceback')#
to_representation(instance)[source]#

Object instance -> Dict of primitive datatypes.

class ucsschool.http_api.import_api.serializers.UsernameField(*args, **kwargs)[source]#

Bases: CharField

Reduce a Django user object to its username string.

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

run_validation(data=<class 'rest_framework.fields.empty'>)[source]#

Validate a simple representation and return the internal value.

The provided data may be empty if no representation was included in the input.

May raise SkipField if the field should not be included in the validated data.

to_internal_value(data)[source]#

Transform the incoming primitive data into a native value.

to_representation(value)[source]#

Transform the outgoing native value into primitive data.

class ucsschool.http_api.import_api.serializers.UserImportJobCreationValidator(request)[source]#

Bases: object

logger: Logger = <Proxy at 0x7f8f11e8c980 wrapping <Logger ucsschool.http_api.import_api.serializers (INFO)> at 0x7f8f0b949c50 with factory <function UserImportJobCreationValidator.<lambda>>>#
classmethod is_user_school_role_combination_allowed(username, school, role)[source]#
class ucsschool.http_api.import_api.serializers.UserImportJobSerializer(*args, **kwargs)[source]#

Bases: HyperlinkedModelSerializer

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

class Meta[source]#

Bases: object

model#

alias of UserImportJob

fields = ('id', 'url', 'date_created', 'dryrun', 'input_file', 'principal', 'result', 'school', 'status', 'user_role', 'log_file', 'password_file', 'summary_file')#
read_only_fields = ('id', 'created', 'status', 'result', 'principal', 'source_uid')#
get_validators()[source]#

Determine the set of validators to use when instantiating serializer.

create(validated_data)[source]#

Create UserImportJob object with correct values (ignore most user input) and queue a task.

class ucsschool.http_api.import_api.serializers.TextArtifactSerializer(*args, **kwargs)[source]#

Bases: HyperlinkedModelSerializer

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

class Meta[source]#

Bases: object

model#

alias of TextArtifact

fields: Tuple = ('url', 'text')#
read_only_fields = ('text',)#
to_representation(instance)[source]#

Object instance -> Dict of primitive datatypes.

class ucsschool.http_api.import_api.serializers.LogFileSerializer(*args, **kwargs)[source]#

Bases: TextArtifactSerializer

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

class Meta[source]#

Bases: Meta

model#

alias of Logfile

fields: Tuple = ('url', 'text', 'userimportjob_log_file')#
class ucsschool.http_api.import_api.serializers.PasswordFileSerializer(*args, **kwargs)[source]#

Bases: TextArtifactSerializer

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

class Meta[source]#

Bases: Meta

model#

alias of PasswordsFile

fields: Tuple = ('url', 'text', 'userimportjob_password_file')#
class ucsschool.http_api.import_api.serializers.SummarySerializer(*args, **kwargs)[source]#

Bases: TextArtifactSerializer

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

class Meta[source]#

Bases: Meta

model#

alias of SummaryFile

fields: Tuple = ('url', 'text', 'userimportjob_summary_file')#
class ucsschool.http_api.import_api.serializers.RoleSerializer(*args, **kwargs)[source]#

Bases: HyperlinkedModelSerializer

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

class Meta[source]#

Bases: object

model#

alias of Role

fields = ('name', 'displayName', 'url')#
read_only_fields = ('name', 'displayName')#
class ucsschool.http_api.import_api.serializers.SchoolSerializer(*args, **kwargs)[source]#

Bases: HyperlinkedModelSerializer

When a field is instantiated, we store the arguments that were used, so that we can present a helpful representation of the object.

class Meta[source]#

Bases: object

model#

alias of School

fields = ('name', 'displayName', 'url', 'roles', 'user_imports')#
read_only_fields = ('name', 'displayName', 'roles', 'user_imports')#

ucsschool.http_api.import_api.tasks module#

Celery tasks

ucsschool.http_api.import_api.tasks.run_import_job(task, importjob_id)[source]#
ucsschool.http_api.import_api.tasks.cleanup_import_jobs()[source]#

Delete old stopped import jobs if ucsschool/import/http_api/import_jobs_to_keep is set.

ucsschool.http_api.import_api.utils module#

Diverse helper functions.

ucsschool.http_api.import_api.utils.get_wsgi_user_group()[source]#

Get the username and group name of the WSGI process in which the HTTP-API runs.

Returns:

tuple with username and group name

Return type:

tuple(str, str)

ucsschool.http_api.import_api.utils.get_wsgi_uid_gid()[source]#

Get the UID and GID of the WSGI process in which the HTTP-API runs.

Returns:

tuple with UID and GID

Return type:

tuple(int, int)

ucsschool.http_api.import_api.views module#

Django Views

class ucsschool.http_api.import_api.views.UserImportJobFilter(data=None, queryset=None, *, request=None, prefix=None)[source]#

Bases: FilterSet

Used to filter the principal field by ‘username’ (DjangoFilterBackend works automatically only on pk).

class Meta[source]#

Bases: object

model#

alias of UserImportJob

fields = ['id', 'dryrun', 'principal', 'school', 'source_uid', 'status', 'user_role']#
static principal_filter(queryset, name, value)[source]#
base_filters = {'dryrun': <django_filters.rest_framework.filters.BooleanFilter object>, 'id': <django_filters.filters.NumberFilter object>, 'principal': <django_filters.filters.CharFilter object>, 'school': <django_filters.filters.ModelChoiceFilter object>, 'source_uid': <django_filters.filters.CharFilter object>, 'status': <django_filters.filters.MultipleChoiceFilter object>, 'user_role': <django_filters.filters.ChoiceFilter object>}#
declared_filters = {'principal': <django_filters.filters.CharFilter object>, 'status': <django_filters.filters.MultipleChoiceFilter object>}#
class ucsschool.http_api.import_api.views.RoleFilterBackend[source]#

Bases: BaseFilterBackend

Used to list only Roles the user has any permissions on.

filter_s = '(&(objectClass=ucsschoolImportGroup)(ucsschoolImportRole=*)(ucsschoolImportSchool={})(memberUid=%s))'#
filter_attrs = ('ucsschoolImportRole', 'ucsschoolImportSchool')#
filter_queryset(request, queryset, view)[source]#

Return a filtered queryset.

class ucsschool.http_api.import_api.views.SchoolFilterBackend[source]#

Bases: BaseFilterBackend

Used to list only Schools the user has any permissions on.

filter_s = '(&(objectClass=ucsschoolImportGroup)(ucsschoolImportRole=*)(ucsschoolImportSchool=*)(memberUid=%s))'#
filter_attrs = ('ucsschoolImportSchool',)#
filter_queryset(request, queryset, view)[source]#

Return a filtered queryset.

class ucsschool.http_api.import_api.views.UserImportJobFilterBackend[source]#

Bases: BaseFilterBackend

Used to list only ImportJobs the user has any permissions on.

filter_s = '(&(objectClass=ucsschoolImportGroup)(ucsschoolImportRole=*)(ucsschoolImportSchool=*)(memberUid=%s))'#
filter_attrs = ('ucsschoolImportRole', 'ucsschoolImportSchool')#
filter_queryset(request, queryset, view)[source]#

Return a filtered queryset.

class ucsschool.http_api.import_api.views.RoleViewPermission[source]#

Bases: BasePermission

Used to read only Role objects the user has any permissions on.

has_object_permission(request, view, obj)[source]#

Return True if permission is granted, False otherwise.

class ucsschool.http_api.import_api.views.SchoolViewPermission[source]#

Bases: BasePermission

Used to read only School objects the user has any permissions on.

has_object_permission(request, view, obj)[source]#

Return True if permission is granted, False otherwise.

class ucsschool.http_api.import_api.views.TextArtifactViewPermission[source]#

Bases: BasePermission

Used to read only TextArtifact objects (LogFile, PasswordsFile, SummaryFile) the user has any permissions on.

has_object_permission(request, view, obj)[source]#

Return True if permission is granted, False otherwise.

class ucsschool.http_api.import_api.views.UserImportJobViewPermission[source]#

Bases: BasePermission

Used to read only UserImport objects the user has any permissions on.

has_object_permission(request, view, obj)[source]#

Return True if permission is granted, False otherwise.

class ucsschool.http_api.import_api.views.UserImportJobViewSet(**kwargs)[source]#

Bases: CreateModelMixin, RetrieveModelMixin, ListModelMixin, GenericViewSet

Manage Import jobs.

  • Only GET and POST are allowed.

  • In a POST request source_uid, dryrun, input_file and school are mandatory.

  • source_uid is of type string

  • dryrun is of type boolean

  • input_file has to be the key for a multipart-encoded file upload

  • school must be an absolute URI from /{version}/schools/

  • user_role must be one of staff, student, teacher, teacher_and_staff

Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things.

queryset#
serializer_class#

alias of UserImportJobSerializer

filter_backends = (<class 'ucsschool.http_api.import_api.views.UserImportJobFilterBackend'>, <class 'django_filters.rest_framework.backends.DjangoFilterBackend'>, <class 'rest_framework.filters.OrderingFilter'>)#
filterset_class#

alias of UserImportJobFilter

permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>, <class 'ucsschool.http_api.import_api.views.UserImportJobViewPermission'>)#
ordering_fields = ('id', 'school', 'source_uid', 'status', 'principal', 'dryrun', 'date_created')#
perform_create(serializer)[source]#
retrieve(request, *args, **kwargs)[source]#
list(request, *args, **kwargs)[source]#
logfile(request, *args, **kwargs)[source]#
passwords(request, *args, **kwargs)[source]#
summary(request, *args, **kwargs)[source]#
basename = None#
description = None#
detail = None#
name = None#
suffix = None#
class ucsschool.http_api.import_api.views.SubResourceMixin[source]#

Bases: object

permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>, <class 'ucsschool.http_api.import_api.views.TextArtifactViewPermission'>)#
serializer_class#

alias of TextArtifact

get_queryset()[source]#
retrieve(request, *args, **kwargs)[source]#
class ucsschool.http_api.import_api.views.LogFileViewSet(**kwargs)[source]#

Bases: SubResourceMixin, ReadOnlyModelViewSet

Log file of import job.

  • Only GET is allowed.

Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things.

serializer_class#

alias of LogFileSerializer

basename = None#
description = None#
detail = None#
name = None#
suffix = None#
class ucsschool.http_api.import_api.views.PasswordsViewSet(**kwargs)[source]#

Bases: SubResourceMixin, ReadOnlyModelViewSet

New users password file of import job.

  • Only GET is allowed.

Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things.

serializer_class#

alias of PasswordFileSerializer

basename = None#
description = None#
detail = None#
name = None#
suffix = None#
class ucsschool.http_api.import_api.views.SummaryViewSet(**kwargs)[source]#

Bases: SubResourceMixin, ReadOnlyModelViewSet

Summary file of import job.

  • Only GET is allowed.

Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things.

serializer_class#

alias of SummarySerializer

basename = None#
description = None#
detail = None#
name = None#
suffix = None#
class ucsschool.http_api.import_api.views.RoleViewSet(**kwargs)[source]#

Bases: ReadOnlyModelViewSet

Read-only list of Roles.

Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things.

queryset#
serializer_class#

alias of RoleSerializer

filter_backends = (<class 'ucsschool.http_api.import_api.views.RoleFilterBackend'>, <class 'django_filters.rest_framework.backends.DjangoFilterBackend'>, <class 'rest_framework.filters.OrderingFilter'>)#
filterset_fields = ('name', 'displayName')#
ordering_fields = ('name', 'displayName')#
permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>, <class 'ucsschool.http_api.import_api.views.RoleViewPermission'>)#
retrieve(request, *args, **kwargs)[source]#
list(request, *args, **kwargs)[source]#
basename = None#
description = None#
detail = None#
name = None#
suffix = None#
class ucsschool.http_api.import_api.views.SchoolViewSet(**kwargs)[source]#

Bases: ReadOnlyModelViewSet

Read-only list of Schools (OUs).

  • roles provides navigation to a list of roles the connected user has permissions on the respective

school. * user_imports provides navigation to start an import for the respective school.

Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things.

queryset#
serializer_class#

alias of SchoolSerializer

filter_backends = (<class 'ucsschool.http_api.import_api.views.SchoolFilterBackend'>, <class 'django_filters.rest_framework.backends.DjangoFilterBackend'>, <class 'rest_framework.filters.OrderingFilter'>)#
filterset_fields = ('name', 'displayName')#
ordering_fields = ('name', 'displayName')#
permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>, <class 'ucsschool.http_api.import_api.views.SchoolViewPermission'>)#
retrieve(request, *args, **kwargs)[source]#
list(request, *args, **kwargs)[source]#
user_imports(request, *args, **kwargs)[source]#

schools/{ou}/imports/users/

roles(request, *args, **kwargs)[source]#

schools/{ou}/roles/

Roles the connecting user has at this school.

basename = None#
description = None#
detail = None#
name = None#
suffix = None#