initial commit
This commit is contained in:
45
core/management/commands/import_csv.py
Normal file
45
core/management/commands/import_csv.py
Normal file
@@ -0,0 +1,45 @@
|
||||
import csv
|
||||
import collections
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
from core.models import Enregistrement, Etiquette
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Importe des enregistrement à partir d'un fichier .csv"
|
||||
mapping = ("date", "description", "etiquette", "montant")
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument("files", nargs="+", type=str)
|
||||
parser.add_argument("-t", "--test", action="store_true")
|
||||
|
||||
def handle(self, *args, **options):
|
||||
header = "== Importation au format .csv"
|
||||
if options['test']:
|
||||
header += " (test)"
|
||||
header += " ==\n%s" % (self.mapping,)
|
||||
self.stdout.write(self.style.MIGRATE_HEADING(header))
|
||||
|
||||
for filepath in options['files']:
|
||||
with open(filepath, 'r') as f:
|
||||
self.stdout.write(self.style.WARNING("[-] %s " % filepath), ending='')
|
||||
reader = csv.reader(f)
|
||||
results = list()
|
||||
for row in reader:
|
||||
result = collections.OrderedDict()
|
||||
for i, field in enumerate(self.mapping):
|
||||
result[field] = row[i]
|
||||
results.append(result)
|
||||
self.stdout.write(self.style.SUCCESS("Ok (%i results):" % len(results)))
|
||||
|
||||
for result in results:
|
||||
output = ", ".join(map(lambda t: "%s:%s" % (t[0][0:4], t[1]), result.items()))
|
||||
if not options['test']:
|
||||
# Création d'un nouvel enregistrement
|
||||
date = result['date'] # TODO: format date !
|
||||
etiquette, created = Etiquette.objects.get_or_create(nom=result['etiquette'])
|
||||
Enregistrement.objects.create(date=result['date'],
|
||||
description=result['description'],
|
||||
etiquette=etiquette,
|
||||
montant=result['montant'])
|
||||
output = "+" + output
|
||||
if created: output += "(added %s)" % etiquette
|
||||
self.stdout.write(self.style.SUCCESS(" " + output))
|
||||
Reference in New Issue
Block a user