generated from datagouv/tableschema-template
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9 from etalab/add-version-test
- Loading branch information
Showing
3 changed files
with
83 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import json | ||
import re | ||
import os | ||
|
||
pattern = r"v?\d+\.\d+\.\d+" | ||
|
||
|
||
def check(obj, version, parents=""): | ||
""" | ||
This functions recursively parses all fields in the schema looking for | ||
version names that would not be the same as the one mentionned | ||
in the 'version' field | ||
""" | ||
errors = [] | ||
# if field is a string, we check for a potential version | ||
if isinstance(obj, str): | ||
tmp = re.search(pattern, obj) | ||
if tmp and tmp[0] != version: | ||
errors += [(parents, tmp[0])] | ||
# if field is a list, we check every item | ||
elif isinstance(obj, list): | ||
for idx, k in enumerate(obj): | ||
errors += check(k, version, parents=parents + f"[{str(idx)}]") | ||
# if field is a dict, we check every value | ||
elif isinstance(obj, dict): | ||
for k in obj: | ||
# not checking the fields | ||
if k != "fields": | ||
errors += check( | ||
obj[k], | ||
version, | ||
parents=parents + "." + k if parents else k | ||
) | ||
return errors | ||
|
||
|
||
to_check = [] | ||
|
||
if "schema.json" in os.listdir(): | ||
to_check.append("schema.json") | ||
|
||
elif "datapackage.json" in os.listdir(): | ||
with open("datapackage.json", "r") as f: | ||
datapackage = json.load(f) | ||
for r in datapackage["resources"]: | ||
to_check.append(r["schema"]) | ||
|
||
else: | ||
raise Exception("No required file found") | ||
|
||
for schema_path in to_check: | ||
with open(schema_path, "r") as f: | ||
schema = json.load(f) | ||
version = schema["version"] | ||
|
||
errors = check(schema, version) | ||
if errors: | ||
message = ( | ||
f"Versions are mismatched within the schema '{schema['name']}', " | ||
f"expected version '{version}' but:" | ||
) | ||
for e in errors: | ||
message += f"\n- {e[0]} has version '{e[1]}'" | ||
raise Exception(message) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
name: Vérification de la cohérence des versions dans tous les champs du schéma | ||
|
||
on: | ||
push: | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout Repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Set up Python | ||
uses: actions/setup-python@v5 | ||
with: | ||
python-version: "3.10" | ||
|
||
- run: python .github/workflows/assert_version.py |
File renamed without changes.