获取有关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第三方库


热门话题
java关闭应用程序按钮Listener   Java中的多线程同步在Java示例中的思考   java如何查看Tomcat正在使用/访问的JAR?   java My代码在调用垃圾收集器后不会终止   多线程Java连接线程池和connectionfactory?   java在运行时修改JAR文件   java Android:使用光标时引发IllegaleException   在Netbeans中测试不可执行库的java?   泛型在参数上强制子类Java类型   spring Java:继承与依赖注入“自动连线”   javascript如何解析这个xml元素   java打印特定序列中的数组   带有ProcessingTimeSessionWindow的java Apache Flink自定义触发器   java如何配置消息驱动的Bean应用程序和Glassfish来使用来自远程MessageBroker的消息?