Skip to content

Commit bc476db

Browse files
committed
Removed the hardcoded default for cache
1 parent 7c06550 commit bc476db

6 files changed

Lines changed: 37 additions & 47 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Previously, loading a schema whose version existed only in the prerelease cache
1212
- Removed the parameter from `SchemaLoader` (base class) and all subclasses (`SchemaLoaderXML`, `SchemaLoaderWiki`, `SchemaLoaderJSON`, `SchemaLoaderDF`).
1313
- `get_hed_version_path()` in `hed_cache.py` now always searches both regular and prerelease directories (regular first).
1414
- `get_hed_versions()` in `hed_cache.py` now defaults to `check_prerelease=True`; the compliance checker explicitly passes `False` to compare against released versions only.
15+
- Default schema version is now resolved dynamically from the cache (highest released version) instead of being hardcoded, so new schema releases no longer require a code change.
1516
- `check_schema_loading.py` simplified — removed `_is_prerelease_partner()` helper.
1617
- `run_loading_check()` now raises `ValueError` immediately for mutually exclusive flag combinations (`prerelease_only` + `exclude_prereleases`, or `library_filter` + `standard_only`), consistent with the existing CLI-level validation.
1718

hed/schema/hed_cache.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def get_hed_versions(local_hed_directory=None, library_name=None, check_prerelea
102102

103103
all_hed_versions = {}
104104
local_directories = [local_hed_directory]
105-
if check_prerelease and not local_hed_directory.endswith(prerelease_suffix):
105+
if check_prerelease and Path(local_hed_directory).name != "prerelease":
106106
local_directories.append(os.path.join(local_hed_directory, "prerelease"))
107107

108108
hed_files = []
@@ -135,9 +135,7 @@ def get_hed_versions(local_hed_directory=None, library_name=None, check_prerelea
135135
return all_hed_versions
136136

137137

138-
def get_hed_version_path(
139-
xml_version, library_name=None, local_hed_directory=None
140-
) -> Union[str, None]:
138+
def get_hed_version_path(xml_version, library_name=None, local_hed_directory=None) -> Union[str, None]:
141139
"""Get HED XML file path in a directory. Only returns filenames that exist.
142140
143141
Parameters:
@@ -146,7 +144,7 @@ def get_hed_version_path(
146144
local_hed_directory (str): Path to local HED directory. Defaults to HED_CACHE_DIRECTORY
147145
148146
Returns:
149-
Union[str, None]: The path to the latest HED version the HED directory.
147+
Union[str, None]: The path to the requested HED version the HED directory.
150148
151149
"""
152150
if not local_hed_directory:

hed/schema/hed_schema_io.py

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@
2222
MAX_MEMORY_CACHE = 40
2323

2424

25-
def load_schema_version(
26-
xml_version=None, xml_folder=None
27-
) -> Union["HedSchema", "HedSchemaGroup"]:
25+
def load_schema_version(xml_version=None, xml_folder=None) -> Union["HedSchema", "HedSchemaGroup"]:
2826
"""Return a HedSchema or HedSchemaGroup extracted from xml_version
2927
3028
Parameters:
@@ -52,8 +50,7 @@ def load_schema_version(
5250
if xml_version and isinstance(xml_version, list):
5351
xml_versions = parse_version_list(xml_version)
5452
schemas = [
55-
_load_schema_version(xml_version=version, xml_folder=xml_folder)
56-
for version in xml_versions.values()
53+
_load_schema_version(xml_version=version, xml_folder=xml_folder) for version in xml_versions.values()
5754
]
5855
if len(schemas) == 1:
5956
return schemas[0]
@@ -125,9 +122,7 @@ def load_schema(hed_path, schema_namespace=None, schema=None, name=None) -> "Hed
125122
return hed_schema
126123

127124

128-
def from_string(
129-
schema_string, schema_format=".xml", schema_namespace=None, schema=None, name=None
130-
) -> "HedSchema":
125+
def from_string(schema_string, schema_format=".xml", schema_namespace=None, schema=None, name=None) -> "HedSchema":
131126
"""Create a schema from the given string.
132127
133128
Parameters:
@@ -158,17 +153,11 @@ def from_string(
158153
schema_string = schema_string.replace("\r\n", "\n")
159154

160155
if schema_format.endswith(".xml"):
161-
hed_schema = SchemaLoaderXML.load(
162-
schema_as_string=schema_string, schema=schema, name=name
163-
)
156+
hed_schema = SchemaLoaderXML.load(schema_as_string=schema_string, schema=schema, name=name)
164157
elif schema_format.endswith(".mediawiki"):
165-
hed_schema = SchemaLoaderWiki.load(
166-
schema_as_string=schema_string, schema=schema, name=name
167-
)
158+
hed_schema = SchemaLoaderWiki.load(schema_as_string=schema_string, schema=schema, name=name)
168159
elif schema_format.endswith(".json"):
169-
hed_schema = SchemaLoaderJSON.load(
170-
schema_as_string=schema_string, schema=schema, name=name
171-
)
160+
hed_schema = SchemaLoaderJSON.load(schema_as_string=schema_string, schema=schema, name=name)
172161
else:
173162
raise HedFileError(HedExceptions.INVALID_EXTENSION, f"Unknown schema extension {schema_format}", filename=name)
174163

@@ -202,9 +191,7 @@ def from_dataframes(schema_data, schema_namespace=None, name=None) -> "HedSchema
202191
HedExceptions.BAD_PARAMETERS, "Empty or non dict value passed to HedSchema.from_dataframes", filename=name
203192
)
204193

205-
hed_schema = SchemaLoaderDF.load_spreadsheet(
206-
schema_as_strings_or_df=schema_data, name=name
207-
)
194+
hed_schema = SchemaLoaderDF.load_spreadsheet(schema_as_strings_or_df=schema_data, name=name)
208195

209196
if schema_namespace:
210197
hed_schema.set_schema_prefix(schema_namespace=schema_namespace)
@@ -302,9 +289,7 @@ def _load_schema_version(xml_version=None, xml_folder=None):
302289
else:
303290
xml_versions = [""]
304291

305-
first_schema = _load_schema_version_sub(
306-
xml_versions[0], schema_namespace, xml_folder=xml_folder, name=name
307-
)
292+
first_schema = _load_schema_version_sub(xml_versions[0], schema_namespace, xml_folder=xml_folder, name=name)
308293
filenames = [os.path.basename(first_schema.filename)]
309294

310295
# Collect all duplicate issues for proper error reporting
@@ -350,13 +335,12 @@ def _load_schema_version(xml_version=None, xml_folder=None):
350335
return first_schema
351336

352337

353-
def _load_schema_version_sub(
354-
xml_version, schema_namespace="", xml_folder=None, schema=None, name=""
355-
):
356-
"""Return specified version(single version only for this one)
338+
def _load_schema_version_sub(xml_version, schema_namespace="", xml_folder=None, schema=None, name=""):
339+
"""Return specified version (single version only for this one).
357340
358341
Parameters:
359-
xml_version (str): HED version format string. Expected format: '[library_name_]X.Y.Z'
342+
xml_version (str): HED version format string. Expected format: '[library_name_]X.Y.Z'.
343+
If empty, the latest released standard schema version from the cache is used.
360344
schema_namespace (str): The prefix this will have
361345
xml_folder (str): Path to a folder containing schema
362346
schema (HedSchema or None): A HED schema to merge this new file into.
@@ -373,7 +357,15 @@ def _load_schema_version_sub(
373357
- The prefix is invalid
374358
"""
375359
if not xml_version:
376-
xml_version = "8.4.0"
360+
versions = hed_cache.get_hed_versions(xml_folder, check_prerelease=False)
361+
if versions:
362+
xml_version = versions[0]
363+
else:
364+
raise HedFileError(
365+
HedExceptions.FILE_NOT_FOUND,
366+
"No HED schema versions found in cache. Ensure schemas are installed or cached.",
367+
"",
368+
)
377369

378370
# Parse library name from version string before validation
379371
library_name = ""
@@ -400,9 +392,7 @@ def _load_schema_version_sub(
400392
hed_schema = load_schema(hed_file_path, schema_namespace=schema_namespace, schema=schema, name=name)
401393
else:
402394
library_string = f"for library '{library_name}'" if library_name else ""
403-
known_versions = hed_cache.get_hed_versions(
404-
xml_folder, library_name=library_name if library_name else "all"
405-
)
395+
known_versions = hed_cache.get_hed_versions(xml_folder, library_name=library_name if library_name else "all")
406396
raise HedFileError(
407397
HedExceptions.FILE_NOT_FOUND,
408398
f"HED version {library_string}: '{version_to_validate}' not found. Check {hed_cache.get_cache_directory(xml_folder)} for cache or https://github.com/hed-standard/hed-schemas/tree/main/library_schemas. "

hed/schema/schema_io/df2schema.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ def load_spreadsheet(cls, filenames=None, schema_as_strings_or_df=None, name="")
4545
Returns:
4646
HedSchema: The new schema
4747
"""
48-
loader = cls(
49-
filenames, schema_as_strings_or_df=schema_as_strings_or_df, name=name
50-
)
48+
loader = cls(filenames, schema_as_strings_or_df=schema_as_strings_or_df, name=name)
5149
hed_schema = loader._load()
5250
return hed_schema
5351

hed/scripts/schema_script_util.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ def validate_schema_object(base_schema, schema_name, check_for_warnings=False):
3838
for save_merged in (True, False):
3939
label = "merged" if save_merged else "unmerged"
4040
tagged_name = f"{schema_name} ({label})"
41-
validation_issues += _roundtrip_all_formats(
42-
base_schema, tagged_name, save_merged=save_merged
43-
)
41+
validation_issues += _roundtrip_all_formats(base_schema, tagged_name, save_merged=save_merged)
4442
except HedFileError as e:
4543
print(f"Saving/loading error: {schema_name} {e.message}")
4644
error_text = e.message

spec_tests/test_hed_cache.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,15 @@ def test_get_hed_versions_library(self):
7979
self.assertTrue(len(cached_versions) > 0)
8080

8181
def test_get_hed_versions_library_prerelease(self):
82-
# Todo: improve this code to actually test it.
83-
cached_versions = hed_cache.get_hed_versions(self.hed_cache_dir, library_name="score")
84-
self.assertIsInstance(cached_versions, list)
85-
self.assertTrue(len(cached_versions) > 0)
82+
all_versions = hed_cache.get_hed_versions(self.hed_cache_dir, library_name="score")
83+
released_only = hed_cache.get_hed_versions(self.hed_cache_dir, library_name="score", check_prerelease=False)
84+
self.assertIsInstance(all_versions, list)
85+
self.assertTrue(len(all_versions) > 0)
86+
self.assertGreater(
87+
len(all_versions),
88+
len(released_only),
89+
"Default (prerelease included) should return more versions than released-only",
90+
)
8691

8792
def test_sort_version_list(self):
8893
valid_versions = ["8.1.0", "8.0.0", "8.0.0-alpha.1", "7.1.1", "1.0.0"]

0 commit comments

Comments
 (0)