예제 #1
0
    def handle(self, *args, **options):
        try:
            self.file_name = args[0]
            in_file = dirname(__file__) + "/" + self.file_name
            err_file = dirname(__file__) + "/" + self.file_name + ".err"
            self.verbose = options.get('verbose')
            self.user_id = args[1]
            if len(args) > 2:
                self.base_srid = int(args[2])
                self.tf = CoordTransform(SpatialReference(self.base_srid),
                                         SpatialReference(4326))
                print "Using transformaton object: %s" % self.tf
            else:
                self.base_srid = 4326
            if len(args) > 3:
                self.readonly = bool(args[3])
                print "Setting readonly flag to %s" % self.readonly
            else:
                self.readonly = False
        except:
            print "Arguments:  Input_File_Name.[dbf|csv], Data_Owner_User_Id, (Base_SRID optional)"
            print "Options:    --verbose"
            return

        self.err_writer = csv.writer(open(err_file, 'wb'))

        if self.file_name.endswith('.csv'):
            rows = self.get_csv_rows(in_file)
        if self.file_name.endswith('.dbf'):
            rows = self.get_dbf_rows(in_file)

        self.data_owner = User.objects.get(pk=self.user_id)
        self.updater = User.objects.get(pk=1)

        self.import_event = ImportEvent(file_name=self.file_name)
        self.import_event.save()

        print 'Importing %d records' % len(rows)
        for i, row in enumerate(rows):
            self.handle_row(row)

            j = i + 1
            if j % 50 == 0:
                print 'Loaded %d...' % j
            self.log_verbose("item %d" % i)

        print "Finished data load. "

        print "Calculating new species tree counts... "
        for s in Species.objects.all():
            s.save()
        print "Done."