获取有关Clinicedc/EDC数据收集设备的信息
edc-device的Python项目详细描述
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检查的DeviceAddPermission和DeviceChangePermission实例的集合。
声明一个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_SERVER或CENTRAL_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(...)
将同时调用Meta和AppConfig设备权限,其中将首先调用Meta类对象。
按模型实例禁用设备权限:
通过将check_device_permissions设置为False
自定义设备权限
默认情况下,add和change设备权限对象检查模型的id。如果obj.id是None,则它作为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