Coverage for jbank/management/commands/wsedi_import.py: 0%
49 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-27 13:36 +0700
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-27 13:36 +0700
1# pylint: disable=too-many-locals
2import json
3import logging
4import os
5import zipfile
6from random import randint
7from django.conf import settings
8from django.core.management.base import CommandParser
9from django.utils.timezone import now
10from jutil.command import SafeCommand
11from jbank.models import WsEdiConnection
14logger = logging.getLogger(__name__)
17class Command(SafeCommand):
18 help = "Import WS-EDI connection"
20 def add_arguments(self, parser: CommandParser):
21 parser.add_argument("file", type=str)
22 parser.add_argument("--verbose", action="store_true")
24 def do(self, *args, **options): # pylint: disable=too-many-branches
25 zf = zipfile.ZipFile(options["file"]) # noqa
26 ws_data = {}
27 today = now()
29 for filename in zf.namelist():
30 assert isinstance(filename, str)
31 if options["verbose"]:
32 print("Importing {}".format(filename))
33 if filename.endswith(".json"):
34 content = zf.read(filename)
35 ws_data = json.loads(content.decode())
37 pem_suffix = "-import-{}-{}.pem".format(today.date().isoformat(), randint(100, 999))
38 for filename in zf.namelist():
39 assert isinstance(filename, str)
40 if filename.endswith(".pem"):
41 content = zf.read(filename)
42 new_filename = filename[:-4] + pem_suffix
43 new_path = "certs/{}".format(new_filename)
44 with open(os.path.join(settings.MEDIA_ROOT, new_path), "wb") as fp:
45 fp.write(content) # pytype: disable=not-callable
46 repl = []
47 for k, v in ws_data.items():
48 if k.endswith("_file") and os.path.basename(v) == filename:
49 repl.append((k, new_path))
50 for k, v in repl:
51 ws_data[k] = v
53 if not ws_data:
54 print("Nothing to import!")
55 return
56 if "created" in ws_data:
57 del ws_data["created"]
58 ws = WsEdiConnection.objects.create(**ws_data)
59 logger.info("WsEdiConnection id=%s created", ws.id)