dalia_dif 0.0.15__tar.gz → 0.0.17__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/PKG-INFO +1 -1
  2. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/pyproject.toml +3 -3
  3. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/cli.py +7 -2
  4. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/picklists.py +9 -1
  5. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/reader.py +24 -4
  6. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/version.py +1 -1
  7. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/LICENSE +0 -0
  8. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/README.md +0 -0
  9. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/.DS_Store +0 -0
  10. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/__init__.py +0 -0
  11. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/__main__.py +0 -0
  12. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/__init__.py +0 -0
  13. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/community/__init__.py +0 -0
  14. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/community/dalia_communities.csv +0 -0
  15. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/constants.py +0 -0
  16. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/export/__init__.py +0 -0
  17. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/export/charts.py +0 -0
  18. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/export/fti.py +0 -0
  19. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/legacy/__init__.py +0 -0
  20. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/legacy/authors.py +0 -0
  21. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/legacy/components.py +0 -0
  22. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/legacy/learning_resource.py +0 -0
  23. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/model.py +0 -0
  24. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/predicates.py +0 -0
  25. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/rdf.py +0 -0
  26. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/dif13/utils.py +0 -0
  27. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/__init__.py +0 -0
  28. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/bibframe_lite_relation.py +0 -0
  29. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/bibo.py +0 -0
  30. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/citedcat.py +0 -0
  31. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/educor.py +0 -0
  32. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/fabio.py +0 -0
  33. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/hcrt.py +0 -0
  34. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/metadata4ing.py +0 -0
  35. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/modalia.py +0 -0
  36. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/namespace/rec.py +0 -0
  37. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/py.typed +0 -0
  38. {dalia_dif-0.0.15 → dalia_dif-0.0.17}/src/dalia_dif/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dalia_dif
3
- Version: 0.0.15
3
+ Version: 0.0.17
4
4
  Summary: Tools for DALIA's data model for open educational resources
5
5
  Keywords: snekpack,cookiecutter,open educational resources,educational resources,training
6
6
  Author: Charles Tapley Hoyt
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "dalia_dif"
7
- version = "0.0.15"
7
+ version = "0.0.17"
8
8
  description = "Tools for DALIA's data model for open educational resources"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -82,7 +82,7 @@ typing = [
82
82
  { include-group = "tests" },
83
83
  "mypy",
84
84
  "pydantic",
85
- "click-types",
85
+ "types-click",
86
86
  "types-requests",
87
87
  ]
88
88
  docs-lint = [
@@ -250,7 +250,7 @@ known-first-party = [
250
250
  docstring-code-format = true
251
251
 
252
252
  [tool.bumpversion]
253
- current_version = "0.0.15"
253
+ current_version = "0.0.17"
254
254
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(?:-(?P<release>[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+(?P<build>[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?"
255
255
  serialize = [
256
256
  "{major}.{minor}.{patch}-{release}+{build}",
@@ -17,8 +17,9 @@ def main() -> None:
17
17
 
18
18
  @main.command()
19
19
  @click.option("--dif-version", type=click.Choice(["1.3"]), default="1.3")
20
+ @click.option("--ignore-missing-description", is_flag=True)
20
21
  @click.argument("location")
21
- def validate(location: str, dif_version: str) -> None:
22
+ def validate(location: str, dif_version: str, ignore_missing_description: bool) -> None:
22
23
  """Validate a local/remote file or local folder of DIF-encoded CSVs."""
23
24
  from dalia_dif.dif13 import read_dif13
24
25
 
@@ -31,7 +32,11 @@ def validate(location: str, dif_version: str) -> None:
31
32
  for path in p.glob("*.csv"):
32
33
  click.secho(f"\n> {path.relative_to(p)}", fg="green")
33
34
  errors: list[str] = []
34
- read_dif13(path, error_accumulator=errors)
35
+ read_dif13(
36
+ path,
37
+ error_accumulator=errors,
38
+ ignore_missing_description=ignore_missing_description,
39
+ )
35
40
  if errors:
36
41
  fail = True
37
42
  for error in errors:
@@ -42,6 +42,7 @@ MEDIA_TYPES = {
42
42
  "image": SDO.ImageObject,
43
43
  "multipart": modalia.Multipart,
44
44
  }
45
+
45
46
  PROFICIENCY_LEVELS = {
46
47
  "novice": modalia.Novice,
47
48
  "advanced beginner": modalia.Beginner,
@@ -49,6 +50,14 @@ PROFICIENCY_LEVELS = {
49
50
  "proficient": modalia.Proficient,
50
51
  "expert": modalia.Expert,
51
52
  }
53
+ PROFICIENCY_TO_ORDER: dict[URIRef, int] = {
54
+ modalia.Novice: 0,
55
+ modalia.Beginner: 1,
56
+ modalia.Competent: 2,
57
+ modalia.Proficient: 3,
58
+ modalia.Expert: 4,
59
+ }
60
+
52
61
  RELATED_WORKS_RELATIONS = {
53
62
  "isPartOf": modalia.isPartOf,
54
63
  "hasPart": SDO.hasPart,
@@ -62,7 +71,6 @@ RELATED_WORKS_RELATIONS = {
62
71
  "isTranslationOf": modalia.isTranslationOf,
63
72
  }
64
73
 
65
-
66
74
  # Entries that will be ignored during the mapping because they shall be used as media type.
67
75
  # Format: URI -> media type to be used instead
68
76
  MEDIA_TYPE_EXCEPTIONS = {
@@ -101,6 +101,7 @@ def read_dif13(
101
101
  *,
102
102
  error_accumulator: list[str] | None = None,
103
103
  converter: curies.Converter | None = None,
104
+ ignore_missing_description: bool = False,
104
105
  ) -> list[EducationalResourceDIF13]:
105
106
  """Parse DALIA records."""
106
107
  if isinstance(path, str) and (path.startswith("http://") or path.startswith("https://")):
@@ -132,7 +133,12 @@ def read_dif13(
132
133
  for idx, record in enumerate(reader, start=2)
133
134
  if (
134
135
  oer := parse_dif13_row(
135
- file_name, idx, record, error_accumulator=error_accumulator, converter=converter
136
+ file_name,
137
+ idx,
138
+ record,
139
+ error_accumulator=error_accumulator,
140
+ converter=converter,
141
+ ignore_missing_description=ignore_missing_description,
136
142
  )
137
143
  )
138
144
  is not None
@@ -149,16 +155,20 @@ def read_dif13_into_rdflib(
149
155
  return graph
150
156
 
151
157
 
152
- def parse_dif13_row(
153
- file_name: str,
158
+ def parse_dif13_row( # noqa:C901
159
+ file_name: str | Path,
154
160
  idx: int,
155
161
  row: dict[str, str],
156
162
  *,
157
163
  future: bool = False,
158
164
  error_accumulator: list[str] | None = None,
159
165
  converter: curies.Converter | None = None,
166
+ ignore_missing_description: bool = False,
160
167
  ) -> EducationalResourceDIF13 | None:
161
168
  """Convert a row in a DALIA curation file to a resource, or return none if unable."""
169
+ if isinstance(file_name, Path):
170
+ file_name = file_name.name
171
+
162
172
  supporting_communities, recommending_communities = _process_communities(
163
173
  file_name, idx, row, error_accumulator=error_accumulator
164
174
  )
@@ -188,6 +198,16 @@ def parse_dif13_row(
188
198
  else:
189
199
  raise ValueError(f"converter was unable to expand CURIE in keyword: {keyword}")
190
200
 
201
+ description = row.pop("Description").strip()
202
+ if not description:
203
+ _log(
204
+ file_name,
205
+ idx,
206
+ "no description given",
207
+ error_accumulator=None if ignore_missing_description else error_accumulator,
208
+ )
209
+ return None
210
+
191
211
  try:
192
212
  rv = EducationalResourceDIF13(
193
213
  uuid=uuid,
@@ -198,7 +218,7 @@ def parse_dif13_row(
198
218
  links=external_uris,
199
219
  supporting_communities=supporting_communities,
200
220
  recommending_communities=recommending_communities,
201
- description=row.pop("Description").strip() or None,
221
+ description=description,
202
222
  disciplines=_process_disciplines(
203
223
  file_name, idx, row, error_accumulator=error_accumulator
204
224
  ),
@@ -12,7 +12,7 @@ __all__ = [
12
12
  "get_version",
13
13
  ]
14
14
 
15
- VERSION = "0.0.15"
15
+ VERSION = "0.0.17"
16
16
 
17
17
 
18
18
  def get_git_hash() -> str:
File without changes
File without changes