def main(): logging.basicConfig() parser = argparse.ArgumentParser( description="Convertir XML Geo-Trafic en format Open511") parser.add_argument('fichier', metavar='FICHIER_XML', type=str, help="Nom du fichier contenant l'XML Geo-Trafic") parser.add_argument('-f', '--format', choices=('xml', 'json'), default='xml', help='Format du resultat') parser.add_argument('--postgres-dsn', default=os.environ.get('POSTGRES_DSN', 'dbname=open511 user=postgres')) args = parser.parse_args() import psycopg2 db_conn = psycopg2.connect(args.postgres_dsn) with open(args.fichier, encoding='utf8') as f: data = f.read() result = geotrafic_to_xml(data, db_conn) if args.format == 'json': result = json.dumps(xml_to_json(result), indent=4) else: result = etree.tostring(result, encoding='unicode', pretty_print=True) sys.stdout.write(result)
def ensure_format(doc, format): """ Ensures that the provided document is an lxml Element or json dict. """ assert format in ('xml', 'json') if getattr(doc, 'tag', None) == 'open511': if format == 'json': return xml_to_json(doc) elif isinstance(doc, dict) and 'meta' in doc: if format == 'xml': return json_doc_to_xml(doc) else: raise ValueError("Unrecognized input document") return doc
def ensure_format(doc, format): """ Ensures that the provided document is an lxml Element or json dict. """ assert format in ('xml', 'json') if getattr(doc, 'tag', None) == 'open511': if format == 'json': return xml_to_json(doc) elif isinstance(doc, dict) and 'meta' in doc: if format == 'xml': return json_doc_to_xml(doc) else: raise ValueError("Unrecognized input document") return doc
def test_outputs(self): db_conn = self._get_db_conn() my_dir = os.path.dirname(os.path.realpath(__file__)) fixtures_dir = os.path.join(my_dir, 'fixtures') input_files = glob.glob(fixtures_dir + '/*.input.xml') self.assertGreater(len(input_files), 3) for input_file in input_files: print("Processing file %s" % os.path.basename(input_file)) with open(input_file) as f: input_data = f.read() xml = converter.geotrafic_to_xml(input_data, db_conn) json_result = xml_to_json(xml) json_result = json.loads(json.dumps(json_result)) # normalize it output_fixture = input_file.replace('.input.xml', '.output.json') with open(output_fixture) as f: valid_json = json.load(f) self.assertEqual(json_result, valid_json)
def test_outputs(self): db_conn = self._get_db_conn() my_dir = os.path.dirname(os.path.realpath(__file__)) fixtures_dir = os.path.join(my_dir, 'fixtures') input_files = glob.glob(fixtures_dir + '/*.input.xml') self.assertGreater(len(input_files), 3) for input_file in input_files: print("Processing file %s" % os.path.basename(input_file)) with open(input_file) as f: input_data = f.read() xml = converter.geotrafic_to_xml(input_data, db_conn) json_result = xml_to_json(xml) json_result = json.loads(json.dumps(json_result)) # normalize it output_fixture = input_file.replace('.input.xml', '.output.json') with open(output_fixture) as f: valid_json = json.load(f) self.assertEqual(json_result, valid_json)
def main(): logging.basicConfig() parser = argparse.ArgumentParser(description="Convertir XML Geo-Trafic en format Open511") parser.add_argument('fichier', metavar='FICHIER_XML', type=str, help="Nom du fichier contenant l'XML Geo-Trafic") parser.add_argument('-f', '--format', choices=('xml', 'json'), default='xml', help='Format du resultat') parser.add_argument('--postgres-dsn', default=os.environ.get('POSTGRES_DSN', 'dbname=open511 user=postgres')) args = parser.parse_args() import psycopg2 db_conn = psycopg2.connect(args.postgres_dsn) with open(args.fichier, encoding='utf8') as f: data = f.read() result = geotrafic_to_xml(data, db_conn) if args.format == 'json': result = json.dumps(xml_to_json(result), indent=4) else: result = etree.tostring(result, encoding='unicode', pretty_print=True) sys.stdout.write(result)