用于生成元数据记录的python库

bas-metadata-librar的Python项目详细描述


BAS元数据库

用于生成元数据记录的python库。

目的

此库旨在帮助生成元数据记录以发现数据集。作为图书馆,这个 包旨在嵌入到其他工具和服务中,以避免实现 特定元数据标准的复杂性和详细性。

这个图书馆是根据英国南极调查局和NERC极地数据中心的需要而建的。这只意味着 支持BAS或英国PDC使用的标准和这些标准的要素。能够实现此目的的附加功能 图书馆对其他人有用,欢迎作为贡献。

支持的标准

<表><广告>标准 实现 库命名空间 介绍于 < /广告><正文>ISO 19115ISO 19139bas_metadata_library.standards.iso_19115_v1\46

支持的配置文件

<表><广告>标准 配置文件实现 库命名空间 介绍于 < /广告><正文>ISO 19115欧盟激励英国双子座bas_metadata_library.standards.iso_19115_v1.profiles.inspire_v1_3\40ISO 19115英国极地数据中心发现元数据 -bas_metadata_library.standards.iso_19115_v1.profiles.uk_pdc_discovery_v1\45

安装

此软件包可以使用pip从pypi安装

$ pip install bas-metadata-library

用法

生成ISO 19115元数据记录并将其作为XML文档返回:

importmetadata_configsfrombas_metadata_library.standards.iso_19115_v1importMetadataRecordConfigasISO19115MetadataRecordConfig, \
    MetadataRecordasISO19115MetadataRecordconfiguration_object=metadata_config.recordconfiguration=ISO19115MetadataRecordConfig(**configuration_object)record=ISO19115MetadataRecord(configuration)document=record.generate_xml_document()# output documentprint(document)

其中,metadata_configs.record是实现bas元数据通用模式的python字典,记录在 BAS元数据标准项目。

HTML实体

不要将HTML实体包含在此生成器的输入中,因为它将由lxml进行双重转义。 底层XML处理库。

这意味着>;的html实体>;将再次转义到&;gt;中,这将不正确 解码时解释。相反,应该使用文本字符(例如>;),如果需要,lxml将转义该字符。

这适用于任何Unicode字符,例如重音符号(例如_)和符号(例如μ)。

实施

此库包含一组基类,用于从配置对象生成基于XML的元数据记录。

每个支持的标准实现这些类,以在 标准配置,使用配置对象中的值或计算值。

配置对象是一个python dict,其属性和值包括是否需要它们或 由ajson模式定义和验证

每个元数据标准的类将有效根据相关的json模式创建配置对象,创建 元素的XML树,并将树导出为XML文档。XML是使用lxml生成的。

有关所有标准中使用的基类和 如何添加新标准

设置

$ git clone https://gitlab.data.bas.ac.uk/uk-pdc/metadata-infrastructure/metadata-generator.git
$ cd metadata-generator

当地发展

需要docker和docker compose才能设置此应用程序的本地开发环境。

本地开发-docker compose

如果您可以访问bas gitlab实例 来自BAS Docker注册表的图像。否则您需要在本地建立Docker映像。

# If you have access to gitlab.data.bas.ac.uk
$ docker login docker-registry.data.bas.ac.uk
$ docker-compose pull
# If you don't have access
$ docker-compose build

使用Flask Development Server运行应用程序(如果源文件发生更改,将自动重新加载):

$ docker-compose up

对烧瓶应用程序运行其他命令(例如集成测试)rel="nofollow">集成测试):

# in a separate terminal to `docker-compose up`
$ docker-compose run app flask [command]# E.g.
$ docker-compose run app flask test# List all available commands
$ docker-compose run app flask

分期和生产

TerraForm用于提供在登台和生产环境中操作此应用程序所需的资源。

这些资源允许外部访问每个标准的配置模式。

提供这些资源需要访问bas aws帐户。

注意:此设置本应已执行(并在全局应用)。如果对此进行了更改 设置只需应用一次。

# start terraform inside a docker container
$ cd provisioning/terraform
$ docker-compose run terraform
# setup terraform
$ terraform init
# apply changes
$ terraform validate
$ terraform fmt
$ terraform apply
# exit container
$ exit
$ docker-compose down

Teraform远程状态

此项目的状态信息使用 后端

特别是作为 bas terraform remote state项目。

运行terraform init时,远程状态存储将自动初始化。对远程状态的任何更改都将 自动保存到远程后端,无需推送或拉取更改。

远程状态认证

此项目的读取和/或写入远程状态信息的权限仅限于授权用户。接触 bas web&applications团队请求访问。

请参阅bas terraform remote state项目了解这些 对远程状态的权限是强制的。

开发

这个api是作为一个python库开发的。捆绑烧瓶应用程序用于模拟其使用并充当 运行测试等的框架。

库基类

bas_metadata_library模块为每个标准定义一系列模块(在bas_metadata_library.standards中) 以及跨所有标准使用的、提供通用功能的基类。参见现有标准 如何使用。

配置模式

此库接受每个元数据记录的"配置"。它包含元素的值,或 用于计算值。例如,一个标题元素将使用直接从记录配置中获取的值。

为了确保包含所有必需的配置属性,并且在相关的情况下允许其值,请执行以下操作 根据架构验证配置。此模式使用json模式标准。

这些模式可通过BAS元数据标准网站从外部获得 元数据标准.data.bas.ac.uk。这允许:

  1. 希望确保其输出与此库兼容的其他应用程序,但这些应用程序不兼容或不能兼容 自己使用这个库(即如果他们不使用python)
  2. 允许模式继承/扩展(用于从其他标准(如配置文件)继承的标准)

定制的flask cli命令output config schemas用于从各种标准生成这些模式文件 受此项目支持。它将为build/config_schemas中的每个配置模式创建json文件。这些是 然后通过持续部署上传到元数据标准网站

注意:在此存储库中忽略生成目录及其包含的架构。输出的模式是 被认为是短暂的,从这个库中的模块重新创建应该很简单。模式的模块版本动作 作为真理的源泉,因为它们用于执行验证。

添加新标准

添加新标准:

  1. bas_metadata_library.standards-例如bas_metadata_library.standards.foo/\uu init_uuu.py
  2. 在此模块中,根据需要重载命名空间元数据记录配置元数据记录类,确保 在metadatarecordconfig中包含适当的模式属性
  3. 定义一系列测试配置(例如最小、典型和完整),以便在 测试/config.py
  4. 使用为新标准生成测试记录的路径更新app.py中的内置烧瓶应用程序
  5. 使用内置的烧瓶应用程序生成测试记录并保存到测试/resources/records/[标准]
  6. 添加相关的集成测试,包括测试每个元数据元素类的方法,以及 生成的记录与tests/resources/records/[标准]中保存的测试记录匹配

代码样式

此项目必须使用PEP-8样式和格式指南,但80个字符的行限制除外。

flake8用于确保遵从性,并在每次提交时运行 连续集成

要在本地检查符合性:

$ docker-compose run app flake8 . --ignore=E501

依赖关系

python依赖项应该通过requirements.txt文件使用pip定义。Docker镜像配置为 将这些依赖项安装到应用程序映像中,以实现不同环境之间的一致性。依赖项应该 随着新版本的发布,定期对其进行审查和更新。

添加新依赖项:

$ docker-compose run app ash
$ pip install [dependency]==# this will display a list of available versions, add the latest to `requirements.txt`
$ exit
$ docker-compose down
$ docker-compose build

如果您有权访问bas gitlab实例,请将重建的docker映像推送到bas docker注册表:

$ pip install bas-metadata-library
0

依赖漏洞扫描

为了确保此api的安全性,将检查所有依赖项 snyk漏洞。

警告:SNYK依赖于已知漏洞,无法检查数据库中没有的问题。和所有一样 安全工具,snyk是发现常见错误的辅助工具,而不是安全代码的保证。

此项目忽略了一些漏洞,有关定义和 依赖异常部分了解更多信息。

通过nuous integration" rel="nofollow">持续集成,在每次提交时测试当前依赖项并生成快照 上传到snyk。然后监视此快照的漏洞。

依赖漏洞异常

此项目包含已知的漏洞,这些漏洞由于特定原因已被忽略。

  • pyyamlyaml.load()函数允许任意代码执行
    • 目前尚无已知或计划的解决方案
    • 间接依赖,通过bandit包需要
    • 严重程度评分
    • 风险被判定为,因为我们在此应用程序中不使用yaml模块
    • 忽略一年以便重新审查

静态安全扫描

为了确保此api的安全性,源代码将对照bandit检查是否存在问题 例如不清除用户输入或使用弱加密。

警告:Bandit是一个静态分析工具,无法检查只有在运行 申请。与所有安全工具一样,bandit是发现常见错误的辅助工具,而不是安全代码的保证。

通过持续集成对每个提交进行测试。

本地检查:

$ pip install bas-metadata-library
1

调试

使用pycharm调试:

  • 运行->;编辑配置
  • 添加新配置->;python

配置中选项卡:

  • 脚本路径:[项目的绝对路径]/manage.py
  • python解释器:项目解释器app项目docker compose中的服务)
  • 工作目录:[项目的绝对路径]
  • 路径映射:[项目的绝对路径]=/usr/src/app

测试

集成测试

此项目使用集成测试来确保功能按预期工作,并防止回归和 漏洞。

编写测试是为了基于tests/config.py中定义的一系列配置创建元数据记录。这些 定义"最小"到"完成"测试记录,旨在测试标准的不同使用方式,两者都用于 单个元素和整个记录。

测试用例方法用于测试单个元素。与静态记录的比较用于测试 记录:

python库用于使用flask的 测试框架。测试用例在tests/中的文件中定义,并在使用 测试flask cli命令。

每次提交都会通过连续集成自动运行测试

手动运行测试:

$ pip install bas-metadata-library
2

捕获静态测试记录

要捕获静态测试记录(验证如何正确组装记录),请使用自定义flask cli命令, 捕获测试记录可用。这需要首先运行烧瓶应用程序。请求库是 用于针对应用程序路由发出请求并将响应保存到 测试/资源/记录

$ pip install bas-metadata-library
3

此命令旨在更新预先存在的静态记录,并在版本控制中捕获差异 并手动检查以确保它们是正确的。

PyCharm支持

使用pycharm运行测试:

  • 运行->;编辑配置
  • 添加新配置->;python测试->;单元测试

配置中选项卡:

  • 脚本路径:[项目的绝对路径]/tests
  • python解释器:项目解释器app项目docker compose中的服务)
  • 工作目录:[项目的绝对路径]
  • 路径映射:[项目的绝对路径]=/usr/src/app

注意:此配置也可用于调试测试(通过选择调试而不是运行)。

JUnit支持

要运行集成测试以生成与junit兼容的文件,test results.xml:

$ pip install bas-metadata-library
4

持续集成

所有提交都将使用gitlab的ci/cd平台触发一个连续的集成过程,配置在.gitlab ci.yml

此过程将运行应用程序集成测试。

PIP依赖项也会被检查并监视是否存在漏洞

分布

包的源版本和二进制版本都是使用setuptools构建的。 然后可以发布到python包索引中,以用于其他 应用。包设置在setup.py中定义

此项目通过连续部署自动生成并发布到PYPI

要手动生成此项目的源和二进制工件:

$ pip install bas-metadata-library
5

手动将此项目的生成工件发布到pypi测试中

$ pip install bas-metadata-library
6

手动发布到

$ pip install bas-metadata-library
7

连续部署

使用gitlab的ci/cd平台的连续部署过程在.gitlab ci.yml中配置。这将:

  • 为此项目生成源和二进制工件
  • 将此项目的生成工件发布到相关的pypi存储库
  • 发布此库内部配置格式的json模式

提交到master分支时:

标记提交时:

  • 更改将部署到pypi
  • 配置模式将发布到元数据标准 网站

释放程序

发布时

  1. 创建一个版本分支
  2. 根据semver在setup.py中插入版本
  3. changelog.md中关闭释放
  4. 推动更改,将版本分支合并到主版本中,并用版本标记

项目将通过持续部署自动生成并发布到PYPI

反馈

此项目的维护者是BAS Web&Applications团队,可以通过以下方式联系他们: 服务台@bas.ac.uk

问题跟踪

此项目使用问题跟踪,请参见 问题跟踪程序了解更多信息 信息。

注意:对此问题跟踪程序的读写访问受到限制。请与项目维护人员联系以请求访问。

许可证

?英国研究与创新(UKRI),2019年,英国安塔尔科特IC调查。

您可以在以下任何格式或介质中免费使用和重新使用本软件和相关文档文件: 开放式政府牌照v3.0的条款。

您可以在http://www.nationalaarchives.gov.uk/doc/open-government-license/" rel="nofollow">http://www.nationalaarchives.gov.uk/doc/open government license/

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

推荐PyPI第三方库


热门话题
java连接usb到uart设备到安卓设备>3.1   可以强制Php中的web应用程序与Java中的桌面应用程序一起工作吗?   java为什么自定义系统类加载器不工作?   数组在Java中解析具有多个分隔符的字符串   PMD Java 8德米特定律   JavaSpringMVC表单验证不适用于嵌套的复杂类型   让Eclipse Java组织导入以使用Google checkstyle   java Appium:无法创建新会话   java如何在数组中声明新字段   java如何解决“无法初始化类org.apache.cassandra.config.DatabaseDescriptor”?   java AsyncTask创建socket   java向@CreatedBy添加更多信息   如何在ubuntu中运行包含大量jars依赖项的java文件   java如何使用<s:select>标记并在中休眠来填充下拉列表?   java获取错误:找不到符号变量“level”和“next_level_button”   javaweb应用中基于UI的ajax显示代码流   Java长到MySql   java JvisualVM:奇怪的应用程序行为   ubuntu将Java程序的输出结果保存到一个文件中