From fe9f0a0b0d6715db9e500f05237550f3a491d713 Mon Sep 17 00:00:00 2001 From: Jace Browning Date: Sun, 9 Feb 2020 13:56:00 -0500 Subject: [PATCH] Fix ORM methods to handle relative paths --- CHANGELOG.md | 1 + datafiles/formats.py | 2 +- datafiles/manager.py | 9 +++++++-- pyproject.toml | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33b52ccd..0417f1f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # 0.7 (unreleased) - Added a `YAML_LIBRARY` setting to control the underlying YAML library. +- Fixed ORM methods to handle relative file patterns. # 0.6 (2020-01-25) diff --git a/datafiles/formats.py b/datafiles/formats.py index b0fdd5d1..3dfe60ab 100644 --- a/datafiles/formats.py +++ b/datafiles/formats.py @@ -119,7 +119,7 @@ def extensions(cls): def deserialize(cls, file_object): import yaml - data = yaml.safe_load(file_object) + data = yaml.safe_load(file_object) or {} return data diff --git a/datafiles/manager.py b/datafiles/manager.py index e73a46c5..de1feae1 100644 --- a/datafiles/manager.py +++ b/datafiles/manager.py @@ -62,8 +62,13 @@ def get_or_create(self, *args, **kwargs) -> HasDatafile: return self.model(*args, **kwargs) def all(self) -> Iterator[HasDatafile]: - root = Path(inspect.getfile(self.model)).parent - pattern = str(root / self.model.Meta.datafile_pattern) + path = Path(self.model.Meta.datafile_pattern) + if path.is_absolute() or self.model.Meta.datafile_pattern.startswith('./'): + pattern = str(path.resolve()) + else: + root = Path(inspect.getfile(self.model)).parent + pattern = str(root / self.model.Meta.datafile_pattern) + splatted = pattern.format(self=Splats()) log.info(f'Finding files matching pattern: {splatted}') for filename in iglob(splatted): diff --git a/pyproject.toml b/pyproject.toml index fa0afd03..dbc946c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "datafiles" -version = "0.7b2" +version = "0.7b3" description = "File-based ORM for dataclasses." license = "MIT"