跳转到主要内容

用于处理Amsterdam Schema的工具。

项目描述

amsterdam-schema-tools

一组用于处理Amsterdam Schema的库和工具。

使用以下命令安装此包:pip install amsterdam-schema-tools。这会安装库和一个名为schema的命令行工具,它具有各种子命令。可以通过schema --help获取列表。

与PostgreSQL数据库通信的子命令需要DATABASE_URL环境变量或带有DSN的命令行选项--db-url

许多子命令需要知道如何找到模式文件。大多数会在由SCHEMA_URL环境变量或--schema-url命令行选项指定的模式目录中查找。例如:

schema create tables --schema-url=myschemas mydataset

将尝试从myschemas/mydataset/dataset.json加载mydataset的模式。

从现有数据库表生成Amsterdam模式

--prefix参数控制是否在模式中删除表前缀,因为这是Django模型所必需的。

例如,我们可以生成一个BAG模式。将DATABASE_URL指向bag_v11数据库,然后运行

schema show tablenames | sort | awk '/^bag_/{print}' | xargs schema introspect db bag --prefix bag_ | jq

jq格式化得很好,可以直接重定向到模式存储库的正确目录。

以关系表的形式表达阿姆斯特丹模式信息

阿姆斯特丹模式以jsonschema的形式表达。然而,为了使具有更关系性思维或工具集的人更容易理解,可以将阿姆斯特丹模式表达为一组关系表。这些表是meta_datasetmeta_tablemeta_field

可以将jsonschema转换为关系表结构,反之亦然。

此命令将一个数据集从现有的jsonschema格式的数据集中转换

schema import schema <id of dataset>

要将关系表转换回jsonschema

schema show schema <id of dataset>

从现有的GeoJSON文件生成阿姆斯特丹模式

以下命令可用于检查和导入GeoJSON文件

schema introspect geojson <dataset-id> *.geojson > schema.json
edit schema.json  # fine-tune the table names
schema import geojson schema.json <table1> file1.geojson
schema import geojson schema.json <table2> file2.geojson

导入GOB事件

schematools库有一个模块可以读取由阿姆斯特丹模式定义的数据库表中的GOB事件。此模块可以用于从Kafka流中读取GOB事件。还可以使用以下方法从带有行分隔事件的批处理文件中读取GOB事件

schema import events <path-to-dataset> <path-to-file-with-events>

导出数据集

数据集可以导出为不同的文件格式。目前支持geopackage、csv和jsonlines。导出数据集表的命令是

schema export [geopackage|csv|jsonlines] <id of dataset>

此命令具有多个可用的命令行选项。有关这些标志的文档可以使用--help选项显示。

将Schema Tools用作预提交钩子

项目包含一个pre-commit钩子,可以验证项目中的模式文件,例如amsterdam-schema

要配置它,请将项目的.pre-commit-config.yaml扩展如下

  - repo: https://github.com/Amsterdam/schema-tools
    rev: v3.5.0
    hooks:
      - id: validate-schema
        args: ['https://schemas.data.amsterdam.nl/schema@v1.2.0#']
        exclude: |
            (?x)^(
                schema.+|             # exclude meta schemas
                datasets/index.json
            )$

args是一个包含阿姆斯特丹元模式URL的单元素列表。

validate-schema将仅处理json文件。然而,并非所有json文件都是阿姆斯特丹模式文件。要排除文件或目录,请使用模式使用exclude

pre-commit依赖于其钩子的正确标记版本。因此,我们不仅应该在更新此包时增加版本号,而且还应该提交一个带有版本号的标签;见下文。

进行发布

(这是为schema-tools开发者准备的。)

我们使用GitHub pull请求。如果您的PR应该生成schema-tools的新版本,请确保其中一个提交适当地增加了setup.cfg中的版本号。然后,

  • 在审查后合并提交到GitHub;
  • 从GitHub拉取代码并将其合并到master分支中,git checkout master && git fetch origin && git merge --ff-only origin/master
  • 使用git tag -a vX.Y.Z -m "Bump to vX.Y.Z"标记版本X.Y.Z;
  • 将标签推送到GitHub,使用git push origin --tags
  • 发布到PyPI:make upload(需要PyPI密钥)。

模拟数据

schematools库包含两个Django管理命令来生成模拟数据。第一个是create_mock_data,它为在配置的模式位置SCHEMA_URL(其中SCHEMA_URL可以配置为指向本地文件系统的路径)中找到的所有数据集生成模拟数据。

create_mock_data命令处理所有数据集。然而,可以通过添加位置参数来限制此操作。这些位置参数可以是数据集ID或本地文件系统中dataset.json位置路径。

此外,该命令还有一些选项,例如更改生成的默认记录数量(--size)或使用--exclude反转位置参数的含义。

为了避免在后续运行中出现重复的主键,可以使用--start-at选项从偏移量开始自动编号主键。

例如,为baggebieden数据集生成5条记录,从主键自动编号的50开始。

    django create_mock_data bag gebieden --size 5 --start-at 50

为除了fietspaaltjes数据集之外的所有数据集生成记录。

    django create_mock_data fietspaaltjes --exclude  # or -x

通过从本地文件系统加载模式生成bbga数据集的记录。

    django create_mock_data <path-to-bbga-schema>/datasets.json

create_mock_data记录生成过程中,不会添加关系,因此外键字段将填充NULL值。

还有一个名为relate_mock_data的第二个管理命令,可以用来添加关系。此命令支持与create_mock_data相同的方式为数据集提供位置参数。此外,该命令还提供了--exclude选项,用于反转位置数据集参数的含义。

例如,为所有数据集添加关系

    django relate_mock_data

仅为baggebieden添加关系

    django relate_mock_data bag gebieden

为除了meetbouten之外的所有数据集添加关系

    django relate_mock_data meetbouten --exclude  # or -x

注意。当仅模拟数据集的子集时,如果涉及关系的数据集缺失,则命令可能会失败,因此请确保包括所有相关数据集。

为了方便,还增加了一个名为truncate_tables的管理命令,用于截断所有表。

项目详情


发布历史 发布通知 | RSS源

下载文件

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

源代码分发

amsterdam_schema_tools-6.1.1.tar.gz (156.4 kB 查看哈希值)

上传时间 源代码

构建分发

amsterdam_schema_tools-6.1.1-py3-none-any.whl (168.2 kB 查看哈希值)

上传时间 Python 3

支持