Skip to content

Commit 45eacc1

Browse files
committed
Generate Python model with required fields also
1 parent 57130d4 commit 45eacc1

File tree

9 files changed

+509
-35
lines changed

9 files changed

+509
-35
lines changed

.github/workflows/generate-python.yml

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,35 +35,26 @@ jobs:
3535
git config user.name "dapla-bot[bot]"
3636
git config user.email "143391972+dapla-bot[bot]@users.noreply.github.com"
3737
38-
- uses: actions/setup-python@v2
38+
- name: Install uv
39+
uses: astral-sh/setup-uv@v6
3940
with:
40-
python-version: 3.11.5
41+
enable-cache: true
4142

42-
- name: Install pipx
43-
run: |
44-
python -m pip install --upgrade pipx
45-
python -m pipx ensurepath
46-
47-
- name: Install datamodel-codegen
48-
run: |
49-
python -m pipx install datamodel-code-generator==0.25.2
43+
- name: Generate All-optional Python models
44+
run: >
45+
uvx
46+
--with datamodel-code-generator
47+
-- bash bin/generate_python.sh
48+
--output=generated/python/datadoc_model/datadoc_model/all_optional/model.py
49+
--force-optional
5050
51-
- name: Generate Python
51+
- name: Generate Required Python models
5252
run: >
53-
datamodel-codegen
54-
--input-file-type jsonschema
55-
--input src/metadata-container-json-schema.json
56-
--output-model-type pydantic_v2.BaseModel
57-
--base-class "datadoc_model.datadoc_base_model.DatadocBaseModel"
58-
--use-default
59-
--use-title-as-name
60-
--use-one-literal-as-default
61-
--force-optional
62-
--use-subclass-enum
63-
--use-standard-collections
64-
--use-double-quotes
65-
--target-python-version 3.10
66-
--output generated/python/datadoc_model/datadoc_model/model.py
53+
uvx
54+
--with datamodel-code-generator
55+
-- bash bin/generate_python.sh
56+
--output=generated/python/datadoc_model/datadoc_model/required/model.py
57+
--force-optional
6758
6859
- name: Check for modified files
6960
id: git-check

bin/generate_python.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#! /usr/bin/env bash
2+
3+
while [ "$#" -gt 0 ]; do
4+
case "$1" in
5+
--output=*) OUTPUT="${1#*=}"; shift 1;;
6+
--output) echo "$1 requires an argument" >&2; exit 1;;
7+
8+
--force-optional) FORCE_OPTIONAL=true; shift 1;;
9+
10+
-*) echo "$LOG_PREFIX unknown option: $1" >&2; exit 1;;
11+
# Skip positional arguments
12+
*) shift 1;;
13+
esac
14+
done
15+
16+
datamodel-codegen \
17+
--input-file-type jsonschema \
18+
--input src/metadata-container-json-schema.json \
19+
--output-model-type pydantic_v2.BaseModel \
20+
--base-class "datadoc_model.datadoc_base_model.DatadocBaseModel" \
21+
--use-default \
22+
--use-title-as-name \
23+
--use-one-literal-as-default \
24+
--use-subclass-enum \
25+
--use-standard-collections \
26+
--use-double-quotes \
27+
--target-python-version 3.10 \
28+
--output "$OUTPUT" \
29+
${FORCE_OPTIONAL:+"--force-optional"}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# This is provided for backwards compatibility
2+
import all_optional.model
3+
import all_optional.model as model
4+
import required.model

generated/python/datadoc_model/datadoc_model/all_optional/__init__.py

Whitespace-only changes.

generated/python/datadoc_model/datadoc_model/model.py renamed to generated/python/datadoc_model/datadoc_model/all_optional/model.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
# generated by datamodel-codegen:
22
# filename: metadata-container-json-schema.json
3-
# timestamp: 2024-07-08T12:55:43+00:00
3+
# timestamp: 2025-05-02T12:33:40+00:00
44

55
from __future__ import annotations
66

7-
from datetime import date
7+
from datetime import date, datetime
88
from enum import Enum
99
from typing import Any, Literal, Optional, Union
1010
from uuid import UUID
1111

12-
from pydantic import AnyUrl, AwareDatetime, Field, RootModel
13-
1412
from datadoc_model.datadoc_base_model import DatadocBaseModel
13+
from pydantic import AnyUrl, Field, RootModel
1514

1615

1716
class Assessment(str, Enum):
@@ -118,7 +117,7 @@ class TemporalityTypeType(str, Enum):
118117

119118

120119
class PseudoDataset(DatadocBaseModel):
121-
dataset_pseudo_time: Optional[AwareDatetime] = Field(
120+
dataset_pseudo_time: Optional[datetime] = Field(
122121
None,
123122
description="Time at which the dataset was pseudonymized. In ISO 8601 format.",
124123
title="Dataset pseudo time",
@@ -268,7 +267,7 @@ class Dataset(DatadocBaseModel):
268267
use_restriction: Optional[UseRestriction] = Field(
269268
None, description="Data set use restriction", title="Use restriction"
270269
)
271-
use_restriction_date: Optional[AwareDatetime] = Field(
270+
use_restriction_date: Optional[datetime] = Field(
272271
None,
273272
description="Use restriction date, eg. the date (deadline) for when data must be deleted/anonymised.",
274273
title="Use restriction date",
@@ -291,15 +290,15 @@ class Dataset(DatadocBaseModel):
291290
description="The file path contains the data set's name and the path to where it is stored",
292291
title="File path",
293292
)
294-
metadata_created_date: Optional[AwareDatetime] = Field(
293+
metadata_created_date: Optional[datetime] = Field(
295294
None,
296295
description="Created date for metadata about the data set",
297296
title="Metadata created date",
298297
)
299298
metadata_created_by: Optional[str] = Field(
300299
None, description="Created by identifiable person.", title="Metadata created by"
301300
)
302-
metadata_last_updated_date: Optional[AwareDatetime] = Field(
301+
metadata_last_updated_date: Optional[datetime] = Field(
303302
None,
304303
description="Last updated date for metadata about the dataset",
305304
title="Metadata last updated date",
@@ -326,10 +325,10 @@ class OtherSpecialValue(DatadocBaseModel):
326325
name: Optional[LanguageStringType] = Field(
327326
None, description="Other value name (text)", title="Name"
328327
)
329-
valid_from: Optional[AwareDatetime] = Field(
328+
valid_from: Optional[datetime] = Field(
330329
None, description="Other value valid from date", title="Valid from"
331330
)
332-
valid_until: Optional[AwareDatetime] = Field(
331+
valid_until: Optional[datetime] = Field(
333332
None, description="Other value until date", title="Valid until"
334333
)
335334

generated/python/datadoc_model/datadoc_model/all_optional/py.typed

Whitespace-only changes.

generated/python/datadoc_model/datadoc_model/required/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)