HAPI FHIR:将整个包加载到服务器



我刚刚通读了文档,但似乎找不到将整个包加载到HAPI-FHIR服务器的方法。我确信hapi-fhir-cli客户端会有这样的选项,但我所看到的只是创建包的能力。

我想加载整个Core FHIR包(例如,us-core, il-core等)。我很难相信每次新版本出来时我都要一个接一个地加载数百个文件。在谷歌上搜索了几个小时,但有时候你必须承认你在浪费时间。

任何帮助都会很感激。谢谢!

经过几个小时的搜索,我明白到目前为止还没有这样的解决方案可以让服务器保持正常运行。因此,让我提供通过我编写的python脚本逐一加载所有资源的解决方案。它可能没有优化,因为我只是一个非常平庸的程序员(即使这有点牵强)。显然,您可以设置自己的端点和路径。您将需要hapi-fhir-cliJAR文件:

import json
import os
import sys
import requests
path = 'C:/{path/to/folder/}'
endpoint = {server_url}
for filename in os.listdir(path):
if filename.endswith('.json'):
if filename.startswith("CodeSystem"):
continue
filepath = os.path.join(path, filename)
with open(filepath, 'r', encoding='utf-8') as f:
json_data = json.load(f)
resource_type = json_data.get("resourceType", None)
resource_id = json_data.get("id", None)
if resource_type is not None and resource_id is not None and resource_type != "ImplementationGuide":
url = f"{end_point}/fhir/{resource_type}/{resource_id}"
headers = {'Content-type': 'application/fhir+json'}
r = requests.put(url, json=json_data, headers=headers)
if (r.status_code == 400):
print(filename, " ", resource_type)
print(r.status_code, " ", resource_type, " ", resource_id)
else:
if resource_type is None:
print("resourceType not found in json")
if resource_id is None:
print("resource id not found in json")

上传CodeSystems(CS)更麻烦,需要每个CS一个CSV和一个JSON,两者都以特定的格式和特定的命名进行压缩。为此写了一个单独的程序,当然我可以把两者结合起来。这只是一个参考。此外,确保python有权限写入和删除所选文件夹中的文件。

import json
import csv
import os
import requests
import zipfile
rootdir = 'C:/path/to/folder/'
endpoint = {server_url}
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file.startswith("CodeSystem"):
with open(os.path.join(subdir, file), 'r', encoding='utf-8-sig') as json_file:
data = json.load(json_file)
url = data["url"]
with open("CodeSystem.json", "w", encoding='utf-8-sig') as outfile:
json.dump(data, outfile)
with open("concepts.csv", "w", newline='', encoding='utf-8-sig') as f:
csv_writer = csv.writer(f)
csv_writer.writerow(["CODE", "DISPLAY"])
for concept in data["concept"]:
code = concept["code"]
display = concept["display"]
csv_writer.writerow([code, display])
with zipfile.ZipFile("resources.zip", 'w', zipfile.ZIP_DEFLATED) as myzip:
myzip.write("CodeSystem.json")
myzip.write("concepts.csv")
os.system(f'hapi-fhir-cli upload-terminology -d resources.zip -u {url} -t {end_point}/fhir -v r4')
os.remove("CodeSystem.json")
os.remove("concepts.csv")
os.remove("resources.zip")



最新更新