diff options
| author | Elena ``of Valhalla'' Grandi <valhalla@trueelena.org> | 2021-02-08 14:24:52 +0100 | 
|---|---|---|
| committer | Elena ``of Valhalla'' Grandi <valhalla@trueelena.org> | 2021-02-08 14:24:52 +0100 | 
| commit | 03c73d8fa56e60ca756b937693e036d013ed8fe6 (patch) | |
| tree | 89df0787a53297731b2bd7e157a1996f75b0de9d | |
| parent | 78b9390b2a91235c235eabd1e5dbc002fa28fb93 (diff) | |
Use the type loaders to generate empty data
| -rw-r--r-- | lesana/collection.py | 44 | 
1 files changed, 22 insertions, 22 deletions
| diff --git a/lesana/collection.py b/lesana/collection.py index 2ade0be..50e8299 100644 --- a/lesana/collection.py +++ b/lesana/collection.py @@ -49,28 +49,26 @@ class Entry(object):          return d      def empty_data(self): -        data = '' -        for field in self.collection.settings['fields']: -            if not field.get('help', None) is None: -                data += "# {name} ({type}): {help}\n".format(**field) -            t = field['type'] -            if field.get('default', None): -                data += "{name}: '{default}'\n".format(**field) -            elif t == 'string': -                data += "{name}: ''\n".format(**field) -            elif t == 'text': -                data += "{name}: |\n    .\n".format(**field) -            elif t == 'integer': -                data += "{name}: 0\n".format(**field) -            elif t == 'float': -                data += "{name}: 0.0\n".format(**field) -            elif t == 'decimal': -                data += "{name}: 0.00\n".format(**field) -            elif t == 'list': -                data += "{name}: []\n".format(**field) +        data = self.collection.yaml.load("{}") +        for name, field in self.collection.fields.items(): +            if field.field.get('default', None): +                data[name] = field.field['default']              else: -                data += "{name}: \n".format(**field) -        return self.collection.yaml.load(data) +                data[name] = field.empty() +            if field.field.get('help', None) is not None: +                comment = "# {name} ({type}): {help}\n".format(**field.field) +                try: +                    data.yaml_set_comment_before_after_key( +                        key=name, +                        before=comment, +                        indent=0 +                    ) +                except AttributeError: +                    logging.warning( +                        "Not adding comments because they are not" +                        "supported by the yaml loader." +                    ) +        return data      @property      def yaml_data(self): @@ -81,8 +79,9 @@ class Entry(object):          for field in self.collection.settings['fields']:              if field['type'] == 'decimal':                  v = to_dump.get(field['name'], '') -                if v: +                if v is not None:                      to_dump[field['name']] = str(v) +          s_io = io.StringIO()          self.collection.yaml.dump(to_dump, s_io)          return s_io.getvalue() @@ -136,6 +135,7 @@ class Collection(object):          self.itemdir = os.path.join(self.basedir, itemdir)          self.yaml = ruamel.yaml.YAML()          self.yaml.preserve_quotes = True +        self.yaml.typ = 'rt'          try:              with open(os.path.join(self.basedir, 'settings.yaml')) as fp:                  self.settings = self.yaml.load(fp) | 
