diff options
| author | Étienne Loks <etienne.loks@proxience.com> | 2015-02-18 22:38:05 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@proxience.com> | 2015-05-06 15:58:26 +0200 | 
| commit | cadd34a00816a28de6002de7396256b9eaa14531 (patch) | |
| tree | 6748698738be8b03c222f69f5cdc31cbefdcccb4 /archaeological_operations/management/commands/import_operations.py | |
| parent | 695479175552a8f3a6af638e7e1bba841ba9b457 (diff) | |
| download | Ishtar-cadd34a00816a28de6002de7396256b9eaa14531.tar.bz2 Ishtar-cadd34a00816a28de6002de7396256b9eaa14531.zip | |
Improve archaeological files import
Diffstat (limited to 'archaeological_operations/management/commands/import_operations.py')
| -rw-r--r-- | archaeological_operations/management/commands/import_operations.py | 111 | 
1 files changed, 0 insertions, 111 deletions
| diff --git a/archaeological_operations/management/commands/import_operations.py b/archaeological_operations/management/commands/import_operations.py deleted file mode 100644 index 09bfe23b6..000000000 --- a/archaeological_operations/management/commands/import_operations.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2015  Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -# GNU Affero General Public License for more details. - -# You should have received a copy of the GNU Affero General Public License -# along with this program.  If not, see <http://www.gnu.org/licenses/>. - -# See the file COPYING for details. - -import datetime, unicodecsv - -from django.conf import settings -from django.core.management.base import BaseCommand, CommandError - -from archaeological_operations.data_importer import * - -IMPORTERS = { -        'bibracte-operation':OperationImporterBibracte, -        'bibracte-parcelle':ParcelImporterBibracte, -        'bibracte-docs':DocImporterBibracte, -        } - -try: -    from archaeological_context_records.data_importer import * -    IMPORTERS['bibracte-ue'] = ContextRecordsImporterBibracte -    IMPORTERS['bibracte-ue-rel'] = ContextRecordsRelationImporterBibracte -except ImportError: -    pass - -try: -    from archaeological_finds.data_importer import * -    IMPORTERS['bibracte-finds'] = FindsImporterBibracte -    IMPORTERS['bibracte-finds-alt'] = FindAltImporterBibracte -    IMPORTERS['bibracte-treatments'] = TreatmentImporterBibracte -except ImportError: -    pass - -class Command(BaseCommand): -    args = '<filename> <importer_name> [<nb lines skipped>]' -    help = "Import archaeological operations" - -    def handle(self, *args, **options): -        if not args or not args[0]: -            raise CommandError("No file provided.") -        if len(args) < 2 or args[1] not in IMPORTERS: -            msg = "Bad importer. \nAvailable importers are:\n" -            for key in sorted(IMPORTERS.keys()): -                msg += "\t* %s: %s\n" % (key, IMPORTERS[key].DESC.encode('utf-8') -                                     or "-") -            raise CommandError(msg) -        try: -            skip_lines = int(args[2]) -        except: -            skip_lines = 0 -        filename = args[0] -        importer = IMPORTERS[args[1]](skip_lines=skip_lines, output='cli') -        sys.stdout.write("*" * 72 + "\n") -        msg = "* Importer - %s" % importer.DESC -        if len(msg) < 72: -            msg += (71 - len(msg))*" " + "*\n" -        sys.stdout.write(msg) -        sys.stdout.write("*" * 72 + "\n\n") -        sys.stdout.write("Processing...") -        with open(filename) as csv_file: -            encodings = [settings.ENCODING, settings.ALT_ENCODING, 'utf-8'] -            for encoding in encodings: -                try: -                    importer.importation([line for line in -                            unicodecsv.reader(csv_file, encoding='utf-8')]) -                    errors = importer.get_csv_errors() -                    sys.stdout.write("\n") -                    if errors: -                        print errors -                        now = datetime.datetime.now().isoformat('-' -                                                ).replace(':','') -                        error_file = '.'.join(filename.split('.')[:-1]) \ -                                     + "_errors_%s.csv" % now -                        sys.stdout.write("Some errors as occured during the ") -                        sys.stdout.write("import.\n") -                        try: -                            with open(error_file, 'w') as fle: -                                fle.write(errors.encode('utf-8')) -                            sys.stdout.write("A report has been create in file:"\ -                                             " \"%s\"" % error_file) -                        except IOError: -                            sys.stdout.write("Cannot create CSV error file \"%s\"." % -                                             error_file) -                    sys.stdout.write( -                        "\n\n* %d item(s) updated, %d item(s) created.\n" % ( -                            importer.number_updated, importer.number_created)) -                    break -                except ImporterError, e: -                    if e.type == ImporterError.HEADER and encoding != encodings[-1]: -                        csv_file.seek(0) -                        continue -                except UnicodeDecodeError: -                    if encoding != encodings[-1]: -                        csv_file.seek(0) -                        continue -        sys.stdout.write("\n\n") - | 
