#!/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()