Skip to content

Commit

Permalink
Merge e942290 into 59e770c
Browse files Browse the repository at this point in the history
  • Loading branch information
jacebrowning committed Jan 12, 2019
2 parents 59e770c + e942290 commit d6a30ea
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 91 deletions.
35 changes: 16 additions & 19 deletions datafiles/managers.py
Expand Up @@ -43,6 +43,10 @@ def __init__(
self._last_load = 0.0
self._last_data: Dict = {}

@property
def classname(self) -> str:
return self._instance.__class__.__name__

@cached_property
def path(self) -> Optional[Path]:
if not self._pattern:
Expand Down Expand Up @@ -147,18 +151,16 @@ def _get_text(self, **kwargs):

@prevent_recursion
def load(self, *, first_load=False) -> None:
log.debug(f'Loading values for {self._instance.__class__} instance')

if not self.path:
if self.path:
log.info(f"Loading '{self.classname}' object from '{self.relpath}'")
else:
raise RuntimeError("'pattern' must be set to load the model")

message = f'Reading file: {self.relpath}'
frame = '=' * len(message)
log.info(message)
message = f'Reading file: {self.path}'
log.debug(message)
data = formats.deserialize(self.path, self.path.suffix)
self._last_data = data
log.debug(frame + '\n\n' + prettify(data) + '\n')
log.debug(frame)
log.debug('=' * len(message) + '\n\n' + prettify(data) + '\n')

for name, converter in self.attrs.items():
log.debug(f"Converting '{name}' data with {converter}")
Expand All @@ -168,8 +170,6 @@ def load(self, *, first_load=False) -> None:
else:
self._set_attribute_value(data, name, converter, first_load)

log.info(f'Loaded instance: {self._instance.__class__.__name__}')

self.modified = False

def _set_dataclass_value(self, data, name, converter):
Expand Down Expand Up @@ -252,20 +252,17 @@ def _get_default_field_value(self, name):

@prevent_recursion
def save(self, include_default_values: Trilean = None) -> None:
log.info(f'Saving instance: {self._instance.__class__.__name__}')

if not self.path:
if self.path:
log.info(f"Saving '{self.classname}' object to '{self.relpath}'")
else:
raise RuntimeError(f"'pattern' must be set to save the model")

text = self._get_text(include_default_values=include_default_values)

message = f'Writing file: {self.path}'
log.debug(message)
log.debug('=' * len(message) + '\n\n' + (text or '<nothing>\n'))
self.path.parent.mkdir(parents=True, exist_ok=True)

message = f'Writing file: {self.relpath}'
frame = '=' * len(message)
log.info(message)
log.debug(frame + '\n\n' + (text or '<nothing>\n'))
self.path.write_text(text)
log.debug(frame)

self.modified = False
8 changes: 4 additions & 4 deletions datafiles/models.py
Expand Up @@ -25,7 +25,7 @@ class Model:

def __post_init__(self):
# pylint: disable=attribute-defined-outside-init
log.debug(f'Initializing {self.__class__} instance')
log.debug(f'Initializing {self.__class__} object')

with hooks.disabled():

Expand All @@ -45,7 +45,7 @@ def __post_init__(self):

hooks.apply(self, self.datafile, get_datafile)

log.debug(f'Initialized {self.__class__} instance')
log.debug(f'Initialized {self.__class__} object')

@classproperty
def datafiles(cls) -> ModelManager: # pylint: disable=no-self-argument
Expand All @@ -56,7 +56,7 @@ def get_datafile(obj) -> InstanceManager:
try:
return obj.datafile
except AttributeError:
log.debug(f"Getting 'datafile' for {obj.__class__} instance")
log.debug(f"Getting 'datafile' for {obj.__class__} object")

m = getattr(obj, 'Meta', None)
pattern = getattr(m, 'datafile_pattern', None)
Expand All @@ -66,7 +66,7 @@ def get_datafile(obj) -> InstanceManager:

if attrs is None:
attrs = {}
log.debug(f'Mapping attributes for {obj.__class__} instance')
log.debug(f'Mapping attributes for {obj.__class__} object')
for field in dataclasses.fields(obj):
self_name = f'self.{field.name}'
if pattern is None or self_name not in pattern:
Expand Down
36 changes: 12 additions & 24 deletions notebooks/format_options.ipynb
Expand Up @@ -50,8 +50,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.json\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.json'\n"
]
}
],
Expand Down Expand Up @@ -116,14 +115,10 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.json\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.json\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.json\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.toml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.json'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.json'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.json'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.toml'\n"
]
}
],
Expand Down Expand Up @@ -184,20 +179,13 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.json\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.toml\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.json\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.toml\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.json\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.toml\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/format_options.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.json'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.toml'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.json'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.toml'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.json'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.toml'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/format_options.yml'\n"
]
}
],
Expand Down
7 changes: 3 additions & 4 deletions notebooks/nested_dataclass.ipynb
Expand Up @@ -55,8 +55,8 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Reading file: files/nested_dataclass.yml\n",
"INFO: datafiles.managers: Loaded instance: Sample\n"
"INFO: datafiles.managers: Loading 'Sample' object from 'files/nested_dataclass.yml'\n",
"WARNING: datafiles.managers: Nested(alpha=1, beta=0) was missing 'datafile'\n"
]
}
],
Expand Down Expand Up @@ -102,8 +102,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/nested_dataclass.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/nested_dataclass.yml'\n"
]
}
],
Expand Down
24 changes: 8 additions & 16 deletions notebooks/patched_containers.ipynb
Expand Up @@ -21,8 +21,7 @@
"output_type": "stream",
"text": [
"WARNING: datafiles.converters: Schema enforcement not possible with 'Dict' annotation\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/patched_containers.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/patched_containers.yml'\n"
]
}
],
Expand Down Expand Up @@ -55,10 +54,8 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/patched_containers.yml\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/patched_containers.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/patched_containers.yml'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/patched_containers.yml'\n"
]
}
],
Expand Down Expand Up @@ -97,8 +94,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/patched_containers.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/patched_containers.yml'\n"
]
}
],
Expand Down Expand Up @@ -137,8 +133,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/patched_containers.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/patched_containers.yml'\n"
]
}
],
Expand Down Expand Up @@ -183,8 +178,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/patched_containers.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/patched_containers.yml'\n"
]
}
],
Expand Down Expand Up @@ -225,8 +219,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/patched_containers.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/patched_containers.yml'\n"
]
}
],
Expand Down Expand Up @@ -268,8 +261,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/patched_containers.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/patched_containers.yml'\n"
]
},
{
Expand Down
9 changes: 3 additions & 6 deletions notebooks/readme.ipynb
Expand Up @@ -40,8 +40,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: InventoryItem\n",
"INFO: datafiles.managers: Writing file: inventory/items/widget.yml\n"
"INFO: datafiles.managers: Saving 'InventoryItem' object to 'inventory/items/widget.yml'\n"
]
}
],
Expand Down Expand Up @@ -77,8 +76,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: InventoryItem\n",
"INFO: datafiles.managers: Writing file: inventory/items/widget.yml\n"
"INFO: datafiles.managers: Saving 'InventoryItem' object to 'inventory/items/widget.yml'\n"
]
}
],
Expand Down Expand Up @@ -135,8 +133,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Reading file: inventory/items/widget.yml\n",
"INFO: datafiles.managers: Loaded instance: InventoryItem\n"
"INFO: datafiles.managers: Loading 'InventoryItem' object from 'inventory/items/widget.yml'\n"
]
},
{
Expand Down
16 changes: 6 additions & 10 deletions notebooks/roundtrip_comments.ipynb
Expand Up @@ -48,8 +48,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/roundtrip_comments.yml\n"
"INFO: datafiles.managers: Saving 'Sample' object to 'files/roundtrip_comments.yml'\n"
]
}
],
Expand Down Expand Up @@ -145,17 +144,14 @@
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: datafiles.managers: Reading file: files/roundtrip_comments.yml\n",
"INFO: datafiles.managers: Loaded instance: Sample\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/roundtrip_comments.yml\n",
"INFO: datafiles.managers: Saving instance: Sample\n",
"INFO: datafiles.managers: Writing file: files/roundtrip_comments.yml\n"
"INFO: datafiles.managers: Loading 'Sample' object from 'files/roundtrip_comments.yml'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/roundtrip_comments.yml'\n",
"INFO: datafiles.managers: Saving 'Sample' object to 'files/roundtrip_comments.yml'\n"
]
}
],
"source": [
"sample.foo = 2018\n",
"sample.foo = 2019\n",
"sample.bar = \"Hello, notebook\""
]
},
Expand All @@ -176,7 +172,7 @@
"output_type": "stream",
"text": [
"# Heading comment\n",
"foo: 2018\n",
"foo: 2019\n",
"\n",
"bar: Hello, notebook # Line comment\n"
]
Expand Down
12 changes: 4 additions & 8 deletions tests/conftest.py
Expand Up @@ -59,12 +59,10 @@ def write(dedent):
def _(path: str, text: str) -> None:
_path = Path(path).resolve()
_text = dedent(text)
message = f'Writing: {_path}'
frame = '=' * len(message)
message = f'Writing file: {_path}'
log.info(message)
log.debug(frame + '\n\n' + (_text or '<nothing>\n'))
log.debug('=' * len(message) + '\n\n' + (_text or '<nothing>\n'))
_path.write_text(_text)
log.debug(frame)

return _

Expand All @@ -73,12 +71,10 @@ def _(path: str, text: str) -> None:
def read():
def _(path: str) -> str:
_path = Path(path).resolve()
message = f'Reading: {_path}'
frame = '=' * len(message)
message = f'Reading file: {_path}'
log.info(message)
text = _path.read_text()
log.debug(frame + '\n\n' + (text or '<nothing>\n'))
log.debug(frame)
log.debug('=' * len(message) + '\n\n' + (text or '<nothing>\n'))
return text

return _

0 comments on commit d6a30ea

Please sign in to comment.