diff --git a/grill/names/__init__.py b/grill/names/__init__.py index f2d1ec8..6a8b6b9 100644 --- a/grill/names/__init__.py +++ b/grill/names/__init__.py @@ -37,7 +37,7 @@ def _table_from_id(id_mapping): class DefaultName(naming.Name): - """ Inherited by: :class:`grill.names.CGAsset` :class:`grill.names.DateTimeFile` + """ Inherited by: :class:`grill.names.CGAsset` Base class for any Name object that wishes to provide `default` functionality via the `get_default` method. @@ -56,7 +56,25 @@ def get_default(cls, **kwargs) -> DefaultName: return name -class DateTimeFile(naming.File, DefaultName): +class DefaultFile(DefaultName, naming.File): + """ Inherited by: :class:`grill.names.DateTimeFile` + + Similar to :class:`grill.names.DefaultName`, provides File Name objects default + creation via the `get_default` method. + + Adds an extra `DEFAULT_SUFFIX='ext'` member that will be used when creating objects. + """ + + DEFAULT_SUFFIX = 'ext' + + @property + def _defaults(self): + result = super()._defaults + result['suffix'] = type(self).DEFAULT_SUFFIX + return result + + +class DateTimeFile(DefaultFile): """Time based file names respecting iso standard. ============= ================ @@ -110,19 +128,18 @@ class DateTimeFile(naming.File, DefaultName): @property def _defaults(self): + result = super()._defaults time_field = {'year', 'month', 'day', 'hour', 'minute', 'second', 'microsecond'} now = datetime.now() - return dict( - {f: getattr(now, f) for f in time_field}, - suffix='ext', - ) + result.update({f: getattr(now, f) for f in time_field}) + return result def get_pattern_list(self) -> typing.List[str]: """Fields / properties names (sorted) to be used when building names. Defaults to [`date`, `time`] + keys of this name's config """ - return ["date", "time"] + list(self.config) + return ["date", "time"] + super().get_pattern_list() @property def name(self) -> str: @@ -171,10 +188,12 @@ def __init__(self, *args, sep='-', **kwargs): @property def _defaults(self): - return {k: v['default'] for k, v in ids.CGAsset.items()} + result = super()._defaults + result.update({k: v['default'] for k, v in ids.CGAsset.items()}) + return result -class CGAssetFile(CGAsset, naming.PipeFile): +class CGAssetFile(CGAsset, DefaultFile, naming.PipeFile): """Versioned files in the pipeline for a CGAsset. Example: @@ -189,7 +208,7 @@ class CGAssetFile(CGAsset, naming.PipeFile): @property def _defaults(self): result = super()._defaults - result.update(version=1, suffix='ext') + result.update(version=1) return result def get_path_pattern_list(self) -> typing.List[str]: @@ -199,9 +218,8 @@ def get_path_pattern_list(self) -> typing.List[str]: class LifeTR(naming.Name): - """Taxonomic Rank used for biological classification. + """Taxonomic Rank used for biological classification.""" - """ config = {k: v['pattern'] for k, v in ids.LifeTR.items()} __doc__ += '\n' + _table_from_id(ids.LifeTR) + '\n' diff --git a/tests/test_names.py b/tests/test_names.py index f72d891..740b13b 100644 --- a/tests/test_names.py +++ b/tests/test_names.py @@ -77,3 +77,18 @@ class SubTime(DateTimeFile): tf = SubTime("1999-10-28 1-1-1-1 subclassed.txt") self.assertEqual("subclassed", tf.extra) + + def test_default_suffix(self): + suf1 = 'abc' + class TimedAssetFile(DateTimeFile, CGAssetFile): + DEFAULT_SUFFIX = suf1 + + ta = TimedAssetFile.get_default(area='test') + self.assertEqual(ta.suffix, suf1) + + suf2 = 'xyz' + class TimedAssetFile2(CGAssetFile): + DEFAULT_SUFFIX = suf2 + + ta = TimedAssetFile2.get_default(area='test') + self.assertEqual(ta.suffix, suf2)