跳转到主要内容

为fhirpath提供Plone动力的供应商

项目描述

Egg Status Travis Build Status Test Coverage Python Versions Latest Version License https://img.shields.io/badge/code%20style-black-000000.svg

背景(collective.fhirpath)

fhirpath在Plone中的实现,包含基本电池,可直接使用。

安装

通过将其添加到您的buildout中安装collective.fhirpath

[buildout]
...
eggs +=
    collective.fhirpath

然后运行bin/buildout

在Plone控制面板的插件设置中,安装collective.fhirpath

工作原理

``FhirResource`` fhir字段

请确保正确使用此专用字段,根据plone.app.fhirfield文档。

使字段可索引

一个名为FhirFieldIndex的专用Catalog PluginIndexes可用,您将像使用其他目录索引一样使用它。

示例

<?xml version="1.0"?>
<object name="portal_catalog" meta_type="Plone Catalog Tool">
    <index name="organization_resource" meta_type="FhirFieldIndex">
        <indexed_attr value="organization_resource"/>
    </index>
</object>

Elasticsearch设置

请确保Elasticsearch已按照collective.elasticsearch文档进行配置。

用法

FHIR搜索:
>>> from fhirpath.interfaces import IElasticsearchEngineFactory
>>> from fhirpath.interfaces import IFhirSearch
>>> from fhirpath.interfaces import ISearchContextFactory
>>> from plone import api
>>> from collective.elasticsearch.es import ElasticSearchCatalog
>>> from zope.component import queryMultiAdapter
>>> es_catalog = ElasticSearchCatalog(api.portal.get_tool("portal_catalog"))
>>> factory = queryMultiAdapter(
....        (es_catalog,), IElasticsearchEngineFactory
.... )
>>> engine = factory(fhir_release="STU3")
>>> search_context = queryMultiAdapter((engine,), ISearchContextFactory)(
.... resource_type, unrestricted=False)
>>> search_factory = queryMultiAdapter((search_context,), IFhirSearch)
>>> params = (
....        ("_profile", "http://hl7.org/fhir/Organization"),
....        ("identifier", "urn:oid:2.16.528.1|91654"),
....        ("type", "http://hl7.org/fhir/organization-type|prov"),
....        ("address-postalcode", "9100 AA"),
....        ("address", "Den Burg"),
....    )
>>> bundle = search_factory(params)
>>> len(bundle.entry)
2
>>> # with query string.
>>> # query_string = self.request["QUERY_STRING]
>>> query_string = "_profile=http://hl7.org/fhir/Organization&identifier=urn:oid:2.16.528.1|91654&type=http://hl7.org/fhir/organization-type|prov&address-postalcode=9100+AA"
>>> bundle = search_factory(query_string=query_string)
>>> len(bundle.entry)
2
ZCatlog FHIR搜索:
>>> from collective.fhirpath.interfaces import IZCatalogFhirSearch
>>> zcatalog_factory = queryMultiAdapter((search_context,), IZCatalogFhirSearch)
>>> # with query string.
>>> # query_string = self.request["QUERY_STRING]
>>> query_string = "_profile=http://hl7.org/fhir/Organization&identifier=urn:oid:2.16.528.1|91654&type=http://hl7.org/fhir/organization-type|prov&address-postalcode=9100+AA"
>>> brains = zcatalog_factory(query_string=query_string)
>>> len(brains)
2
FHIR查询:
>>> from fhirpath.interfaces import IElasticsearchEngineFactory
>>> from fhirpath.interfaces import IFhirSearch
>>> from fhirpath.interfaces import ISearchContextFactory
>>> from plone import api
>>> from collective.elasticsearch.es import ElasticSearchCatalog
>>> from zope.component import queryMultiAdapter
>>> from fhirpath.query import Q_
>>> from fhirpath.fql import T_
>>> from fhirpath.fql import sort_
>>> from fhirpath.enums import SortOrderType
>>> es_catalog = ElasticSearchCatalog(api.portal.get_tool("portal_catalog"))
>>> factory = queryMultiAdapter(
....        (es_catalog,), IElasticsearchEngineFactory
.... )
>>> engine = factory(fhir_release="STU3")
>>> query_builder = Q_(resource="Organization", engine=engine)
....    query_builder = query_builder.where(
....        T_("Organization.meta.profile", "http://hl7.org/fhir/Organization")
....    ).sort(sort_("Organization.meta.lastUpdated", SortOrderType.DESC))
>>> result = query_builder(async_result=False, unrestricted=True).fetchall()
>>> result.header.total
2
>>> query_result = query_builder(async_result=False, unrestricted=True)
>>> for resource in query_result:
....        count += 1
....        assert resource.__class__.__name__ == "Organization"
>>> query_builder = Q_(resource="Organization", engine=engine)
>>> query_builder = query_builder.where(T_("Organization.id", "f001"))
>>> result_query = query_builder(async_result=False, unrestricted=True)
>>> resource = result_query.single()
>>> resource is not None
True
>>> query_builder = Q_(resource="Organization", engine=engine)
>>> query_builder = query_builder.where(
....        T_("Organization.meta.profile", "http://hl7.org/fhir/Organization")
....    )
>>> result_query = builder(async_result=False, unrestricted=True)
>>> result = result_query.first()
>>> isinstance(result, result_query._query.get_from()[0][1])
True

使用FHIRModelServiceMixin

为了更好的性能优化,您应该使用FHIRModelServiceMixin来高效地响应FHIRModelFhirFieldValue对象。

示例1

>>> from plone.restapi.services import Service
>>> from collective.fhirpath.utils import FHIRModelServiceMixin
>>> class MyFHIRGetService(FHIRModelServiceMixin, Service):
....     """ """
....     def reply(self):
....        # do return bellow's types of data
....        # could be ``dict`` type data
....        # could be instance of ``FHIRAbstractModel`` derrived class.
....        # could be instance of ``plone.app.fhirfield.FhirResourceValue`` derrived class.
....        # or self.reply_no_content()

配置

本产品提供三个基于Plone注册表的记录:fhirpath.es.index.mapping.nested_fields.limitfhirpath.es.index.mapping.depth.limitfhirpath.es.index.mapping.total_fields.limit。这些与ElasticSearch索引映射设置相关,如果您了解它,则可以从Plone控制面板(注册表)中进行修改。

文档

完整用户文档可以在“docs”文件夹中找到,也可以在https://collective-fhirpath.readthedocs.io/在线查看

贡献

支持

如果您遇到问题,请通过以下方式告知我们:Md Nazrul Islam <email2nazrul@gmail.com>

许可协议

该项目采用GPLv2许可。

REST客户端示例

获取单个资源,这里我们通过ID获取Patient资源。

示例(1)

>>> response = admin_session.get('/@fhir/Patient/19c5245f-89a8-49f8-b244-666b32adb92e')
>>> response.status_code
200
<BLANKLINE>
>>> response.json()['resourceType'] == 'Patient'
True
<BLANKLINE>
>>> response = admin_session.get('/@fhir/Patient/19c5245f-fake-id')
>>> response.status_code
404
<BLANKLINE>

通过状态条件搜索Observation,任何截至2017年12月之前或早于2017年1月的观察结果。

示例(2)

>>> response = admin_session.get('/@fhir/Observation?patient=Patient/19c5245f-89a8-49f8-b244-666b32adb92e&status=final&_lastUpdated=lt2017-12-31T00%3A00%3A00%2B00%3A00&_lastUpdated=gt2017-01-01T00%3A00%3A00%2B00%3A00')
>>> response.status_code
200
>>> response.json()["total"]
1
<BLANKLINE>

通过REST API添加FHIR资源

示例(3)

>>> import os
>>> import json
>>> import uuid
>>> import DateTime
>>> import time

>>> with open(os.path.join(FIXTURE_PATH, 'Patient.json'), 'r') as f:
...     fhir_json = json.load(f)

>>> fhir_json['id'] = str(uuid.uuid4())
>>> fhir_json['name'][0]['text'] = 'Another Patient'
>>> response = admin_session.post('/@fhir/Patient', json=fhir_json)
>>> response.status_code
201
>>> time.sleep(1)
>>> response = admin_session.get('/@fhir/Patient?active=true')
>>> response.json()["total"]
2

更新(PATCH)FHIR资源,当前激活的Patient将被停用。

示例(4)

>>> patch = [{'op': 'replace', 'path': '/active', 'value': False}]
>>> response = admin_session.patch('/@fhir/Patient/19c5245f-89a8-49f8-b244-666b32adb92e', json={'patch': patch})
>>> response.status_code
204
<BLANKLINE>

贡献者

变更日志

0.8.0 (2022-06-13)

新功能

  • 针对collective.elasticsearch上的问题issue#91,添加了一个补丁。

0.7.6 (2021-05-04)

  • 最低的fhir.resources版本现在是6.1.0,最低的collective.elasticsearch版本现在是3.0.5

0.7.5 (2020-12-17)

0.7.4 (2020-11-19)

  • 最低要求的fhirpath版本现在是0.10.4(请参阅其更改日志)并添加了兼容性。

0.7.3 (2020-10-24)

  • 创建了一个新的辅助函数json_body,它使用orjson反序列化器。

  • FHIRModelServiceMixin现在具有更高的性能优化。

0.7.2 (2020-10-06)

  • 在基于ZCatalog的搜索中启用以dict选项返回Bundle响应。

0.7.1 (2020-10-05)

  • fhirpath``minimum version 已更新,包括最低的fhir.resources版本6.0.0b5

  • 使用orjson序列化器改进了FHIRModelServiceMixin

0.7.0 (2020-09-25)

改进

修复

  • utils.FHIRModelServiceMixin 现在可以处理响应中的 list 类型数据。

0.6.1 (2020-09-09)

  • plone.app.fhirfield:default`` 已添加到依赖中,因此无需单独安装 ``plone.app.fhirfield.

0.6.0 (2020-09-09)

改进

  • FHIRModelServiceMixin 类现在在 utils 模块下可用,可以与您的 plone.restapi 服务一起使用,以以最佳效率响应类型为 FhirModel 即 pydantic 的 BaseModelplone.app.fhirfield.FhirFieldValue 对象。

0.5.0 (2020-08-18)

改进

  • 通过 fhir.resourcesfhirpath 支持革命性的版本,我们可能需要对现有的代码库进行一些重构,因为这些破坏性更改,请参阅 fhir.resourcesplone.app.fhirfieldfhirpath 中的更改。

  • 恢复对 Python 版本 3.6 的支持

  • 基于 plone 注册表的三个配置(fhirpath.es.index.mapping.nested_fields.limitfhirpath.es.index.mapping.depth.limitfhirpath.es.index.mapping.total_fields.limit)现在可用。

0.4.0 (2020-05-15)

破坏性更改

  • 作为支持最新的 fhirpath 版本(从 0.6.1)的一部分,删除了高于 3.7.0 的 Python 版本。

  • ElasticsearchEngineFactory.__call__ 的参数名称 fhir_version 已更改为 fhir_release

0.3.0 (2019-11-10)

改进

  • 添加了 ZCatalog 特有的 fhir 搜索功能,您将从中获得 ZCatalog 的 brain 功能。

  • FhirFieldIndex 命名为 PluginIndex 现在可用。

  • FHIR STU3````R4 搜索映射现在可用。

  • 其他改进,使其能够在生产项目中使用(当然没有保证。)

0.2.0 (2019-09-16)

  • 第一个工作版本,有很多改进。

0.1.0 (2019-09-06)

  • 初始发布。 [nazrulworld]

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分发

collective.fhirpath-0.8.0.tar.gz (97.5 kB 查看哈希值)

上传时间

构建分发

collective.fhirpath-0.8.0-py2.py3-none-any.whl (332.2 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下提供支持