Skip to main content

Standalone client used to access Open edX REST APIs.

Project description

The REST API client for Open edX REST API allows users to communicate with various edX REST APIs. It is based on https://github.com/edx/edx-rest-api-client, whith a few differences:

  • It does not depend on Django

  • What is called ‘the client’ in edX’s version is now called ‘session’.

  • As the edX’s version relies on Django’s cache, now the token is stored in memory under the scope of the session object

  • The client here encompasses the session, and one function per REST API entry point

Part of the code is also taken from Opencraft’s implementation of the openedx client.

Testing

$ make validate

Usage

The OpenedxRESTAPIClient object starts a session with the LMS and provides methods to access the Open edX endpoints.

from openedx_rest_api_client.client import OpenedxRESTAPIClient

client_id = 'my_client_id'
client_secret = 'my_client_secret'
lms_url = 'https://lms.example.com'

# create client
client = OpenedxRESTAPIClient(lms_url, client_id, client_secret)

# get a list of all courses
courses = client.list_all_courses()

Function Reference

list_all_courses

Get the full list of courses visible to the requesting user. Calls the /api/courses/v1/courses LMS endpoint

Args:

  • org: filter by organization

Returns:

  • List of dict in the form:

[
   {
      "blocks_url": "https://lms.example.com/api/courses/v1/blocks/?course_id=course-v1%3A<org>%2B<code>%2B<edition>",
      "effort":"01:00",
      "end":"None",
      "enrollment_start":"None",
      "enrollment_end":"None",
      "id":"course-v1:<org>+<code>+<run>",
      "media":{
         "course_image":{
            "uri":"<img path>"
         },
         "course_video":{
            "uri":"None"
         },
         "image":{
            "raw":"<img url>",
            "small":"<img url>",
            "large":"<img url>"
         }
      },
      "name":"Course name",
      "number":"<edition>",
      "org":"<org>",
      "short_description":"",
      "start":"2018-01-11T00:00:00Z",
      "start_display":"11 de Enero de 2018",
      "start_type":"timestamp",
      "pacing":"instructor",
      "mobile_available":true,
      "hidden":false,
      "invitation_only":false,
      "course_id":"course-v1:<org>+<code>+<edition>"
   },
   ...
]

change_enrollment

Enroll or unenroll (depending on the value of action) the list of emails in the list of courses. Calls the /api/bulk_enroll/v1/bulk_enroll/ LMS endpoint

Args:

  • emails: list of emails to enroll

  • courses: list of course ids to enroll

  • action: can be ‘enroll’ or ‘unenroll’

  • url: url of the LMS (base or site). If not specified, uses the base url of the session. Defaults to the LMS base.

  • auto_enroll: if true, the users will be automatically enrolled as soon as they register. Defaults to true.

  • email_students: if true, an email will be sent with the update. Defaults to true.

  • cohorts: List of cohort names to add the students to.

Returns:

dict in the form:

{
   "action":"enroll",
   "courses":{
      "course-v1:ORG+CODE+EDITION":{
         "action":"enroll",
         "results":[
            {
               "identifier":"mail@example.com",
               "after":{
                  "enrollment":true,
                  "allowed":false,
                  "user":true,
                  "auto_enroll":false
               },
               "before":{
                  "enrollment":false,
                  "allowed":false,
                  "user":true,
                  "auto_enroll":false
               }
            },
            ...
         ],
         "auto_enroll":true
      },
      ...
   },
   "email_students":true,
   "auto_enroll":true
}

Account validation

Validates the account registration form. Calls the /api/user/v1/validation/registration API endpoint.

Args:

  • url: url of the LMS (base or site). If not specified, uses the base url of the session. Defaults to the LMS base.

  • **kwargs: dict with form parameters to validate. E.g.:

{
    email=<email>,
    username=<username>,
    name=<name>,
    password=<password>,
    honor_code=<honor_code>,
    terms_of_service=<terms_of_service>,
}

Returns: dict in the form:

{
    'validation_decisions': {
        <field name>: <validation result, or empty if success>,
        ...
    },
    'username_suggestions': [<username suggestions * 3>]
}

Account registration

Registers a new user account. Calls the /api/user/v1/account/registration/ API endpoint.

Args:

  • email: email to register

  • username: username to register

  • name: full name of the user

  • password: password

  • url: url of the LMS (base or site). If not specified, uses the base url of the session.

    Defaults to the LMS base.

Additional default fields accepted:

  • name: full name of the user

  • level_of_education *: one of:
    • ‘p’: ‘Doctorate’

    • ‘m’: “Master’s or professional degree”

    • ‘b’: “Bachelor’s degree”

    • ‘a’: “Associate degree”

    • ‘hs’: “Secondary/high school”

    • ‘jhs’: “Junior secondary/junior high/middle school”

    • ‘el’: “Elementary/primary school”

    • ‘none’: “No formal education”

    • ‘other’: “Other education”

  • gender *: can be ‘m’, ‘f’, or ‘o’

  • mailing_address *

  • city *

  • country: ISO3166-1 two letters country codes as used in django_countries.countries *

  • goals *

  • year_of_birth *: numeric 4-digit year of birth

  • honor_code *: Bool. If mandatory and not set will not create the account.

  • terms_of_service *: Bool. If unset, will be set equally to honor_code

  • marketing_emails_opt_in *: Bool. If set, will add a is_marketable user attribute (see Student > User Attributes in Django admin)

  • provider: Oauth2 provider information

  • social_auth_provider: Oauth2 provider information

* Can be set as hidden, optional or mandatory in REGISTRATION_EXTRA_FIELDS setting.

Returns: Dict with the form:

  • If successful:

{
    'success': True,
    'redirect_url': <redirection url to finish the authorization and go to the dashboard>
}
  • If error:

{
    <field name>: [
        {'user_message': <error message>}
    ]
    'error_code': <error code>,
    'username_suggestions': [<username suggestions> * 3]
}

How to Contribute

To contribute, please send a message to andres@aulasneo.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openedx_rest_api_client-1.0.0.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

openedx_rest_api_client-1.0.0-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

Details for the file openedx_rest_api_client-1.0.0.tar.gz.

File metadata

File hashes

Hashes for openedx_rest_api_client-1.0.0.tar.gz
Algorithm Hash digest
SHA256 3960313047fe17e857e7f295c8b322b5c01be1b00bc0a30daf243d74aa274cd9
MD5 d33994568802a195a324fb4ed9cfda60
BLAKE2b-256 1c40f8cdf8bb630742d9c6d495232f42db166482cc8b958ede0e1a7a336b60d5

See more details on using hashes here.

File details

Details for the file openedx_rest_api_client-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for openedx_rest_api_client-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 770c6e0281213bcd04da45aa48972022ff098cc904f10af6ed3f6d830f16d76c
MD5 26c371fa4f2a2a3cf92044ca9a400ec6
BLAKE2b-256 27a43c549b42d75585d72430407762ddfb8e8d53f009f00a75b10ba221b8f99a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page