Coverage for jbank/management/commands/wsedi_exec.py: 0%

1 import base64

2 import logging

3 import pytz

4 from django.core.management.base import CommandParser

5 from jutil.format import get_media_full_path

6 from jutil.command import SafeCommand

7 from jbank.helpers import parse_start_and_end_date

8 from jbank.models import WsEdiConnection

9 from jbank.wsedi import wsedi_execute

10 from xml.etree import ElementTree

11

12 logger = logging.getLogger(__name__)

13

14

15 class Command(SafeCommand):

16 help = "Executes WS-EDI command using direct bank connection."

17

18 def add_arguments(self, parser: CommandParser):

19 parser.add_argument("--ws", type=int, default=1)

20 parser.add_argument("--cmd", type=str, default="DownloadFileList")

21 parser.add_argument("--file-reference", type=str)

22 parser.add_argument("--file-type", type=str)

23 parser.add_argument("--start-date", type=str)

24 parser.add_argument("--end-date", type=str)

25 parser.add_argument("--status", type=str)

26

27 def do(self, *args, **options): # pylint: disable=too-many-locals

28 ws = WsEdiConnection.objects.get(id=options["ws"])

29 assert isinstance(ws, WsEdiConnection)

30 if ws and not ws.enabled:

31 logger.info("WS connection %s not enabled, exiting", ws)

32 return

33

34 start_date, end_date = parse_start_and_end_date(pytz.timezone("Europe/Helsinki"), **options)

35 cmd = options["cmd"]

36 file_reference = options["file_reference"] or ""

37 file_type = options["file_type"] or ""

38 status = options["status"] or ""

39 response = wsedi_execute(

40 ws,

41 command=cmd,

42 file_reference=file_reference,

43 file_type=file_type,

44 status=status,

45 start_date=start_date,

46 end_date=end_date,

47 verbose=True,

48 )

49 print(response)

50 root_el = ElementTree.fromstring(response)

51 content_el = root_el.find("{http://bxd.fi/xmldata/}Content")

52 if content_el is not None:

53 content_bytes = base64.b64decode(content_el.text)

54 print(content_bytes.decode())

55 if file_reference:

56 full_path = get_media_full_path("downloads/" + file_reference + "." + file_type)

57 with open(full_path, "wb") as fp:

58 fp.write(content_bytes)

59 print(full_path, "written")