def create(self, entity: Entity) -> FileRepository:
     serializer = Serializer.toml() if entity.singleton else Serializer.yaml()
     if entity.singleton:
         file_strategy = SingleFileStrategy(
             os.path.join(self.base_path, '{}.{}'.format(entity.name, serializer.default_extension))
         )
     elif entity.parent is None:
         file_strategy = MultipleFileStrategy(
             os.path.join(self.base_path, '{}/{{pk}}/main.{}'.format(entity.name, serializer.default_extension)),
             {
                 'pk': Vars.key(entity.pk)
             }
         )
     else:
         file_strategy = MultipleFileStrategy(
             os.path.join(self.base_path, '{}/{{parent_id}}/{}.{}'.format(
                 entity.parent.name,
                 entity.name,
                 serializer.default_extension
             )),
             {
                 'parent_id': Vars.key(entity.parent.parent_id),
             }
         )
     serializer_strategy = OnePerFileStrategy(serializer) if entity.singleton else ManyPerFileStrategy(serializer)
     pk_factory = (lambda _: 0) if entity.singleton else Vars.key(entity.pk)
     strategy = ComposedStrategy(
         file_strategy=file_strategy,
         serialize_strategy=serializer_strategy,
         pk_factory=pk_factory,
     )
     return FileRepository(strategy)
Beispiel #2
0
 def test_read_sample_toml(self):
     file_repository = FileRepository.one_per_file(
         path.join(path.dirname(__file__), 'multiple/by-name/{name}.toml'),
         Serializer.toml()
     )
     read_sample = sorted(list(file_repository.stream()), key=Vars.key('name'))
     self.assertEqual(read_sample, self.sample_content)
 def test_read_sample_toml(self):
     file_repository = FileRepository.multiple_file(
         path.join(path.dirname(__file__),
                   'multiple/by-parent/{language}.toml'), Serializer.toml())
     read_sample = sorted(list(file_repository.stream()),
                          key=Vars.key("version"))
     self.assertListEqual(read_sample, self.sample_content)
Beispiel #4
0
 def test_write_sample_toml(self):
     original = path.join(path.dirname(__file__), 'multiple/by-name/')
     with tempfile.TemporaryDirectory() as output:
         file_repository = FileRepository.mutable_one_per_file(
             '{}/{{name}}.toml'.format(output),
             Serializer.toml(),
             Vars.key('name')
         )
         file_repository.save(self.sample_content)
         result = filecmp.dircmp(output, original)
         self.assertFalse(result.diff_files)
 def test_write_sample_toml(self):
     original = path.join(path.dirname(__file__), 'multiple/by-parent/')
     with tempfile.TemporaryDirectory() as output:
         file_repository = FileRepository.mutable_multiple_file(
             '{}/{{language}}.toml'.format(output), Serializer.toml(),
             Vars.key('language') + ':' + Vars.key('version').cast(str))
         file_repository.save(self.sample_content)
         result = filecmp.dircmp(output,
                                 original,
                                 ignore=['.yaml', '.json'])
         self.assertFalse(result.diff_files)