From 2a824fab4e4b48184583b639f6753ab051f4dd55 Mon Sep 17 00:00:00 2001 From: Elena ``of Valhalla'' Grandi Date: Sat, 25 Mar 2017 18:37:36 +0100 Subject: Start writing a tellico importer --- scripts/tellico2lesana | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 scripts/tellico2lesana (limited to 'scripts') diff --git a/scripts/tellico2lesana b/scripts/tellico2lesana new file mode 100755 index 0000000..8de8bf9 --- /dev/null +++ b/scripts/tellico2lesana @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +from xml.etree import ElementTree +import zipfile + +import guacamole + + +XML_NS = '{http://periapsis.org/tellico/}' + +# https://docs.kde.org/trunk5/en/extragear-office/tellico/field-type-values.html +F_TYPE_MAP = { + '1': 'string', + '2': 'text', + '3': 'string', + '4': 'bool', + '6': 'integer', + '7': 'url', + '8': 'list', # single column table + '10': 'file', + '12': 'timestamp', # date + '14': 'integer', # rating + + } + + +class T2L(guacamole.Command): + """ + Manage collections + """ + + def register_arguments(self, parser): + parser.add_argument( + 'file', + help='Tellico file to convert to lesana.' + ) + + def invoked(self, ctx): + with zipfile.ZipFile(ctx.args.file, 'r') as zp: + tree = ElementTree.parse(zp.open('tellico.xml')) + # open collection + xml_collection = tree.getroot().find(XML_NS+'collection') + + # get collection settings + title = xml_collection.attrib['title'] + xml_fields = xml_collection.find(XML_NS+'fields') + fields = [] + for xf in xml_fields: + print(xf.attrib) + f_type = F_TYPE_MAP.get(xf.attrib['format']) + # TODO: support fields with the multiple values flag + # (they should probably become lists) + fields.append({ + 'name': xf.attrib['title'], + 'type': f_type, + }) + # TODO: create a collection with the following settings: + import ruamel.yaml + print(ruamel.yaml.dump({'title': title, 'fields': fields})) + + # import data + + + +if __name__ == '__main__': + T2L().main() -- cgit v1.2.3