获取有关Clinicedc/EDC数据收集设备的信息

edc-device的Python项目详细描述


pypitraviscoverage

EDC设备

edc-device为主机名可能不可靠的主机和客户端提供设备角色唯一的设备ID。主机可以分组为服务器、客户端、节点服务器以及根据此角色限制的某些功能。

唯一的设备id用于种子唯一的主题和样本标识符。在部署期间评估唯一性。

edc_device.apps.AppConfig中设置并读取设备信息。

您应该像这样将子类划分到项目apps.py中,例如:

fromedc_device.appsimportAppConfigasEdcDeviceAppConfigParentclassEdcDeviceAppConfig(EdcDeviceAppConfigParent):device_id='32'device_role=CLIENTdevice_permissions=DevicePermissions(plot_add,plot_change,...)

然后在您的设置中:

INSTALLED_APPS=[...my_app.apps.EdcDeviceAppConfig,myapp.apps.AppConfig',]

包括在您的urls.py

urlpatterns=[...path('edc_device/',include('edc_device.urls')),...]

要进入EDC设备主页,请按如下方式反转URL:

reverse('edc_device:home_url')

使用量

client可能如下所示:

classEdcDeviceAppConfig(EdcDeviceAppConfigParent):device_id='18'node_server_id_list=[97,98,99]middleman_id_list=[95,96]>>>fromdjango.appsimportappsasdjango_apps>>>app_config=django_apps.get_app_config('edc_device')>>>app_config.device_id'18'>>>app_config.is_clientTrue>>>app_config.device_role'Client'

节点服务器服务器可能如下所示:

classEdcDeviceAppConfig(EdcDeviceAppConfigParent):device_id='98'node_server_id_list=[97,98,99]middleman_id_list=[95,96]>>>fromdjango.appsimportappsasdjango_apps>>>app_config=django_apps.get_app_config('edc_device')>>>app_config.device_id'98'>>>app_config.is_node_serverTrue>>>app_config.device_role'NodeServer'

中间人服务器可能是这样的:

classEdcDeviceAppConfig(EdcDeviceAppConfigParent):device_id='95'node_server_id_list=[97,98,99]middleman_id_list=[95,96]>>>fromdjango.appsimportappsasdjango_apps>>>app_config=django_apps.get_app_config('edc_device')>>>app_config.device_id'95'>>>app_config.is_middlemanTrue>>>app_config.device_role'Middleman'

中央服务器可能如下所示:

classEdcDeviceAppConfig(EdcDeviceAppConfigParent):device_id='99'node_server_id_list=[97,98,99]middleman_id_list=[95,96]>>>fromdjango.appsimportappsasdjango_apps>>>app_config=django_apps.get_app_config('edc_device')>>>app_config.device_id'99'>>>app_config.is_middlemanTrue>>>app_config.device_role'CentralServer'

另请参见django-collect-offline

按型号划分的设备权限

您可以使用设备角色或设备ID来限制对模型的添加/更改权限。

edc-deviceappconfig维护在模型的save方法中使用DeviceModelMixin检查的DeviceAddPermissionDeviceChangePermission实例的集合。

声明一个DeviceAddPermission对象:

test_model_add=DeviceAddPermission(model='my_app.mymodel, device_roles=[NODE_SERVER, CENTRAL_SERVER])

声明一个DeviceChangePermission对象:

test_model_change=DeviceChangePermission(model='my_app.mymodel, device_roles=[CLIENT])

这意味着,如果app_config.device_role不是NODE_SERVERCENTRAL_SERVER,save方法将引发DevicePermissionsAddError

使用edc_device.apps.AppConfig.device_permissions

注册实例
device_permissions=DevicePermissions(test_model_add,test_model_change)

这意味着,如果app_config.device_role不是CLIENT,save方法将引发DevicePermissionsChangeError

启动时,您应该看到:

LoadingEdcDevice...*deviceidis'10'.*deviceroleis'Client'.*devicepermissionsexistfor:-edc_device.testmodelADDNodeServer,CentralServer-edc_device.testmodelCHANGEClientDoneloadingEdcDevice.

使用EdcDeviceModelMixin声明的模型在保存时检查设备权限集合。注意,模型MIXIN已经被声明为{TT23 } $。

fromedc_model.modelsimportBaseUuidModelclassTestModel(BaseUuidModel):pass

直接在模型Meta类上声明设备权限:

您可以用与上面相同的方式声明Meta.device_permissions上的设备权限。

[...]classMeta(DeviceModelMixin.Meta):device_permissions=DevicePermissions(...)

将同时调用MetaAppConfig设备权限,其中将首先调用Meta类对象。

按模型实例禁用设备权限:

通过将check_device_permissions设置为False

自定义设备权限

默认情况下,add和change设备权限对象检查模型的id。如果obj.idNone,则它作为add model操作;如果obj.id不是None,则它是change model操作。

您可以通过重写model_operation方法来更改此设置。model_operation必须返回None或某些值,例如self.label

例如:

# default for DeviceAddPermissionlabel='ADD'defmodel_operation(self,model_obj=None,**kwargs):ifnotmodel_obj.id:returnself.labelreturnNone# overriddendefmodel_operation(self,model_obj=None,**kwargs):"""Return ADD if both id and plot identifier are None.
    """ifnotmodel_obj.idandnotobj.plot_identifier:returnself.labelreturnNone

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

推荐PyPI第三方库


热门话题
带有嵌套JAR的java RCP ClassNotFoundException   java在输入框中设置默认值,crud应用程序使用spring   java如何在Heroku中使用fs创建新文件   java将JPanel放在JFrame中   java这个正则表达式会匹配“i.imgur.com/xxx”吗?   java在片段内创建RecylerView,而无需在Android中设置片段   Android上Groovy导致java错误的双精度浮点精度损失   swing Java查找JFrame属于JPanel的内容   java Spring junit自连线自定义类本身必须有构造函数吗?   java textswitcher支持前面的文本   从Android客户端到JAXRS的java Post自定义对象   java如何检索JSON数据并使用MPAndroidChart绘制折线图,以及在安卓上的改进   拒绝用户“root”@“localhost”的java c3p0访问(使用密码“是”)   使用Selenium Webdriver自动化ExtJS应用程序时java面临的问题