用于用户管理的简单oneroster客户端

oneroster的Python项目详细描述


oneroster python客户端

这个库是beta版的,经常更改。风险自负。

此库便于从clever或classlink轻松访问用户数据库。
连接器提供单一方法调用,将从您选择的提供者返回用户(学生、教师或两者)。 基于班级、课程或学校成员,无需分页和响应处理。附加文档。

目前,这个库只返回不同班级、课程和学校的用户,它被设计成集成到同步过程中。获取其他数据类型的其他选项有望实现。

有关此库开发的详细信息,请访问https://github.com/vossenv/oneroster-python" rel="nofollow">https://github.com/vossenv/oneroster-python

联系Danimae Vossen(vossen.dm@gmail.com)查询

什么是oneroster?

oneroster实际上不是一个应用程序,而是一个规范。oneroster通过标准化rest和csv数据处理的格式,简化了教育排班的管理。这使得服务应用程序(如Adobe)更容易与符合标准的SIS(学生信息系统)平台集成。选择oneroster标准化平台最符合学校的利益,因为它大大简化了在排班故障和用户需要访问的产品之间保持同步状态的过程。有关该标准的详细说明,请参见OneRoster主页(IMS Global):

https://www.imsglobal.org/activity/onerosterlis

根据IMS,该标准的主要特点包括:

  • 在不同平台(如学生信息系统(SIS)和学习管理系统(LMS))之间提供关键名册相关数据,包括学生、课程和相关入学信息。
  • 灵活的实现选项,以符合机构的需求和能力,支持简单的电子表格样式(CSV)交换以及使用rest api的系统到系统交换
  • 利用排班和成绩册信息改进多个系统之间的数据交换,从而在问题发生之前消除问题
  • 在应用程序之间传输计分结果,例如学生成绩从LMS返回到SIS。

根据定义,oneroster api是开源的,这意味着有关端点和数据模型的所有信息在实际规范中都是免费的。规范提供了关于api结构的详细指导。由于所有主要的sis播放器都采用了该标准并提供了类似的访问权限,oneroster连接器允许灵活地进行基于排班的配置——这是一个非常理想的特性!Adobe与许多教育机构合作。大多数,如果不是所有这些组织都已经利用SIS,包括OneRoster API/CSV实现。这些SIS的一些示例如下:

  • 类链接
  • 聪明
  • 南北基伍托
  • 无限校园
  • 动力学校

快速启动

*注意:可以找到此代码的完整版本E

pip安装oneroster

首先按上述方式安装oneroster依赖项(home在这里)。构造函数接受3个以上的参数,但3是实例化它所需的全部参数。这些参数是:

  1. 主机名-这应该来自SIS仪表板(这里是ClassLink)。对于不同的提供商,它可能看起来不同
  2. 客户ID-也来自SIS仪表板
  3. client_secret-也来自SIS仪表板
  4. < > >

    导入并实例化连接器(ClassLink),如图所示。

    importonerosterfrompprintimportpprint# optionalconnector=oneroster.ClasslinkConnector(host="https://example.oneroster.com/ims/oneroster/v1p1/",client_id='your_client_id',client_secret='your_client_secret',)

    对于第一次尝试,您可以调用get_users,给出一个参数:"students"。这将返回系统中所有学生的列表。

    user_list=connector.get_users(user_filter='students')print(str(len(user_list))+" students in total")pprint(user_list[0])

    连接器查询由3个主要参数组成:

    用户筛选器-此"筛选器"是用户请求的类型。选项包括:学生、教师和用户。学生和教师为任何查询工作,但用户仅在获得完整列表(例如: /ims/oneroster/v1p1/用户)

    group_filter-选择"group filter"一词来表示用户的分组方式。这可以是:班级,课程,学校。这相当于进行如下api调用: /ims/oneroster/v1p1/classes/class_id/{user_filter}

    组名-"组名"表示我们要瞄准的班级、课程或学校。这可能是类的名称或ID。带有组和用户筛选器的最终查询如下所示:/ims/oneroster/v1p1/{group_filter}/{group_name}/{user_filter}

    例如: /ims/oneroster/v1p1/classes/31763/学生

    下面的片段应该有助于说明这一点。考虑一个简单的例子,让所有学生参加名为ela(6a ela)的课程:

    class_name="ELA 6 (6A ELA)"ela_users=connector.get_users(user_filter='students',group_filter='classes',group_name=class_name)print(str(len(ela_users))+" users found for ELA 6")

    或者,我们可以使用它的sourcedid查询同一个类。第二种情况可能返回较少的结果,因为id对应于一个特定的节,而classname得到共享该名称的所有节。

    class_id="31763"ela_users=connector.get_users(user_filter='students',group_filter='classes',group_name=class_id)print(str(len(ela_users))+" users found for ELA 6 (1 section)")

    我们可以通过设置connector选项来扩展"match groups by"选项。默认值为["sourcedid"、"name"、"title"],这意味着您输入的组名将与这三个字段进行匹配比较。这意味着您可以使用这三个字段中的任何一个进行查询。例如,我们可以查询"classlink hs"和id为7的学校(中学),两者都将返回结果。您可以将"按字段匹配组"设置为目标对象(类、课程或学校)中的任何字段。

    hschool_users=connector.get_users(user_filter='students',group_filter='schools',group_name='Classlink HS')mschool_users=connector.get_users(user_filter='students',group_filter='schools',group_name='7')print(str(len(hschool_users))+" high school students returned")print(str(len(mschool_users))+" middle school students returned")

    可以通过设置类级别属性或将其传递给get_用户来更改匹配器。举个例子,假设我们想得到302房间上课的学生人数。我们可以从api标准中查看可用的json属性,并看到"location"表示一个房间。我们可以在调用中明确地传递此消息,如图所示。注意,目前只允许使用string类型匹配器。"grades"字段由类似于["11"]的列表表示,因此它是无效的匹配项。扩展的匹配功能将在以后的版本中提供。

    connector.match_groups_by=['sourcedId','name','title','location']orconnector.match_groups_by='location'orr302_users=connector.get_users(user_filter='students',group_filter='classes',group_name='302',match_on='location')print(str(len(r302_users))+" students with classes in room 302")

    运行时,以上代码片段将产生以下输出:

    139 students in total.  First result:
    
    {'agents': [],
     'dateLastModified': '2019-03-01T18:14:45.000Z',
     'email': 'billy.flores@classlink.k12.nj.us',
     'enabledUser': 'true',
     'familyName': 'FLORES',
     'givenName': 'BILLY',
     'grades': ['11'],
     'identifier': '17580',
     'middleName': 'DASEAN',
     'orgs': [{'href': 'https://adobe-ca-v2.oneroster.com/ims/oneroster/v1p1/orgs/2',
               'sourcedId': '2',
               'type': 'org'}],
     'password': '',
     'phone': '',
     'role': 'student',
     'sms': '',
     'sourcedId': '18125',
     'status': 'active',
     'userIds': [{'identifier': '18125', 'type': 'FED'}],
     'username': 'billy.flores'}
    
    7 users found for ELA 6
    3 users found for ELA 6 (1 section)
    38 high school students returned
    54 middle school students returned
    13 students with classes in room 302
    

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java Synth外观和感觉什么都不做?   java为什么JavaFX在使用文本组件时会在字母之间添加额外的间距?我该如何修复它?   java四位数字程序:分组数字   java我应该如何创建这个新页面?JSP还是servlet?   java将hashmap作为avalue添加到hashmap中   java如何使xmemcached更快   一个流中的java筛选器和set()   EJB模块和HTTP路由器模块之间的java通用绑定   java线程处理多个rest调用   java什么是运算符重载,它与多态性不同吗?   java投票系统错误