From d989fa7c40b754581c5aa7233dafa7f7a50df860 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Thu, 1 Jun 2017 16:42:28 +0200 Subject: [PATCH 01/32] Add first functional structure of the SOAP service --- primestg/service.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 primestg/service.py diff --git a/primestg/service.py b/primestg/service.py new file mode 100644 index 0000000..41a173c --- /dev/null +++ b/primestg/service.py @@ -0,0 +1,33 @@ +# -*- coding: UTF-8 -*- + +from zeep import Client + + +class Service(object): + def __init__(self): + self.DC_service = self.create_service() + self.result = {} + + def send(self, report_id, meters, date_from, date_to): + # TODO: need tocheck which report to demand and which parameters to send + results = self.DC_service.Request(0002, report_id, date_from, + date_to, meters, 2) + + return results + + def create_service(self): + binding = 'XXXXXX' + client = Client( + wsdl='XXXXX') + client.set_ns_prefix(None, 'XXXXX') + return client.create_service(binding, 'XXXXX') + + def get_daily_incremental(self, meters, date_from, date_to): + """ + If meter is empty list do it for all meters. + :param meters: either meter_id, list of meter_id's or empty list + :return: an S02 report for the corresponding meters + """ + if isinstance(meters, list): + meters = ','.join(meters) + return self.send('S02', meters, date_from, date_to) \ No newline at end of file From fca2d149d848b0f80fbcb1f4c3e233bc1e6f1a50 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 12 Jun 2017 18:03:06 +0200 Subject: [PATCH 02/32] Add other high priority functions --- primestg/service.py | 50 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/primestg/service.py b/primestg/service.py index 41a173c..a8cc132 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -30,4 +30,52 @@ def get_daily_incremental(self, meters, date_from, date_to): """ if isinstance(meters, list): meters = ','.join(meters) - return self.send('S02', meters, date_from, date_to) \ No newline at end of file + return self.send('S02', meters, date_from, date_to) + + def get_all_daily_incremental(self, date_from, date_to): + """ + If meter is empty list do it for all meters. + :param meters: either meter_id, list of meter_id's or empty list + :return: an S02 report for the corresponding meters + """ + return self.send('S02', '', date_from, date_to) + + def get_monthly_billing(self, meters, date_from, date_to): + """ + If meter is empty list do it for all meters. + :param meters: either meter_id, list of meter_id's or empty list + :return: an S04 report for the corresponding meters + """ + if isinstance(meters, list): + meters = ','.join(meters) + return self.send('S04', meters, date_from, date_to) + + def get_daily_absolute(self, meters, date_from, date_to): + """ + If meter is empty list do it for all meters. + :param meters: either meter_id, list of meter_id's or empty list + :return: an S05 report for the corresponding meters + """ + if isinstance(meters, list): + meters = ','.join(meters) + return self.send('S05', meters, date_from, date_to) + + def get_meter_events(self, meters, date_from, date_to): + """ + If meter is empty list do it for all meters. + :param meters: either meter_id, list of meter_id's or empty list + :return: an S09 report for the corresponding meters + """ + if isinstance(meters, list): + meters = ','.join(meters) + return self.send('S09', meters, date_from, date_to) + + def get_meter_parameters(self, meters, date_from, date_to): + """ + If meter is empty list do it for all meters. + :param meters: either meter_id, list of meter_id's or empty list + :return: an S06 report for the corresponding meters + """ + if isinstance(meters, list): + meters = ','.join(meters) + return self.send('S06', meters, date_from, date_to) \ No newline at end of file From 8803e65d61c590b25effc954287944b5d7aa5787 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Wed, 14 Jun 2017 17:37:41 +0200 Subject: [PATCH 03/32] Add first version of test w/responses --- spec/web_service_spec.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 spec/web_service_spec.py diff --git a/spec/web_service_spec.py b/spec/web_service_spec.py new file mode 100644 index 0000000..244e939 --- /dev/null +++ b/spec/web_service_spec.py @@ -0,0 +1,22 @@ +from expects import expect, equal +from primestg.report import Report +import responses +import requests +from primestg.service import Service +from zeep.transports import Transport + +with description('Web services run'): + with before.all: + self.s = Service() + + with it('asking for S02 report'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{}', status=200, + content_type='application/json') + + resp = self.s.get_daily_incremental('ZIV0040318130', + '20170610010000', + '20170611000000') + + assert resp.json() == {"error": "not found"} From 4ddce71037ccceb426167843d0b37def6e9814c3 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Thu, 15 Jun 2017 09:45:41 +0200 Subject: [PATCH 04/32] Test-Add first test for S02 report w/responsesMock --- spec/web_service_spec.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 spec/web_service_spec.py diff --git a/spec/web_service_spec.py b/spec/web_service_spec.py new file mode 100644 index 0000000..1514e48 --- /dev/null +++ b/spec/web_service_spec.py @@ -0,0 +1,24 @@ +from expects import expect, equal +from primestg.report import Report +import responses +import requests +from primestg.service import Service +from zeep.transports import Transport +from zeep.exceptions import TransportError + +with description('Web services run'): + with before.all: + self.s = Service() + + with it('asking for S02 report'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{"error": "expected error"}', status=404) + try: + resp = self.s.get_daily_incremental('ZIV0040318130', + '20170610010000', + '20170611000000') + + except TransportError as te: + print te + assert 'expected error' in te.message \ No newline at end of file From ae253d24bbd015c3f022511e59a3b0534983df68 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Thu, 15 Jun 2017 17:23:29 +0200 Subject: [PATCH 05/32] Test-Add test for S02 S04 and S05 --- spec/web_service_spec.py | 41 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/spec/web_service_spec.py b/spec/web_service_spec.py index 1514e48..25d11fd 100644 --- a/spec/web_service_spec.py +++ b/spec/web_service_spec.py @@ -10,15 +10,48 @@ with before.all: self.s = Service() - with it('asking for S02 report'): + with it('asking for S02 report with mocked connection'): with responses.RequestsMock() as rsps: rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', - body='{"error": "expected error"}', status=404) + body='{"error": "expected S02 error"}', status=404) try: resp = self.s.get_daily_incremental('ZIV0040318130', '20170610010000', '20170611000000') except TransportError as te: - print te - assert 'expected error' in te.message \ No newline at end of file + assert 'expected S02 error' in te.message + + with it('asking for S02 report for all meters with mocked connection'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{"error": "expected S02 error"}', status=404) + try: + resp = self.s.get_all_daily_incremental('20170610010000', + '20170611000000') + + except TransportError as te: + assert 'expected S02 error' in te.message + + with it('asking for S04 report with mocked connection'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{"error": "expected S04 error"}', status=404) + try: + resp = self.s.get_monthly_billing('ZIV0040318130', + '20170600010000', + '20170631000000') + + except TransportError as te: + assert 'expected S04 error' in te.message + + with it('asking for S05 report with mocked connection'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{"error": "expected S05 error"}', status=404) + try: + resp = self.s.get_all_daily_absolute('20170609010000', + '20170611000000') + + except TransportError as te: + assert 'expected S05 error' in te.message From 5fc9b094c75485ece7e6f41c4f7ab15b02749bc8 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 19 Jun 2017 15:37:07 +0200 Subject: [PATCH 06/32] Test-Add test S04 for all meters version --- spec/web_service_spec.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/spec/web_service_spec.py b/spec/web_service_spec.py index 25d11fd..0205a49 100644 --- a/spec/web_service_spec.py +++ b/spec/web_service_spec.py @@ -18,7 +18,6 @@ resp = self.s.get_daily_incremental('ZIV0040318130', '20170610010000', '20170611000000') - except TransportError as te: assert 'expected S02 error' in te.message @@ -29,7 +28,6 @@ try: resp = self.s.get_all_daily_incremental('20170610010000', '20170611000000') - except TransportError as te: assert 'expected S02 error' in te.message @@ -41,7 +39,16 @@ resp = self.s.get_monthly_billing('ZIV0040318130', '20170600010000', '20170631000000') + except TransportError as te: + assert 'expected S04 error' in te.message + with it('asking for S04 report for all meters with mocked connection'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{"error": "expected S04 error"}', status=404) + try: + resp = self.s.get_all_monthly_billing('20170600010000', + '20170631000000') except TransportError as te: assert 'expected S04 error' in te.message From 38fc2514919b3204c91e0cc0b7b3b556c35eaa5a Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 19 Jun 2017 15:37:45 +0200 Subject: [PATCH 07/32] Test-Add S05 test for all meters version --- spec/web_service_spec.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spec/web_service_spec.py b/spec/web_service_spec.py index 0205a49..bf6c6ca 100644 --- a/spec/web_service_spec.py +++ b/spec/web_service_spec.py @@ -53,12 +53,22 @@ assert 'expected S04 error' in te.message with it('asking for S05 report with mocked connection'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{"error": "expected S05 error"}', status=404) + try: + resp = self.s.get_daily_absolute('ZIV0040318130', + '20170609010000', + '20170611000000') + except TransportError as te: + assert 'expected S05 error' in te.message + + with it('asking for S05 report for all meters with mocked connection'): with responses.RequestsMock() as rsps: rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', body='{"error": "expected S05 error"}', status=404) try: resp = self.s.get_all_daily_absolute('20170609010000', '20170611000000') - except TransportError as te: assert 'expected S05 error' in te.message From 0386e12c10fb637a4cc2b87c1d8ea1b623130358 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 19 Jun 2017 15:38:14 +0200 Subject: [PATCH 08/32] Test-Add test for S09 and S06 reports --- spec/web_service_spec.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/spec/web_service_spec.py b/spec/web_service_spec.py index bf6c6ca..69b038a 100644 --- a/spec/web_service_spec.py +++ b/spec/web_service_spec.py @@ -72,3 +72,25 @@ '20170611000000') except TransportError as te: assert 'expected S05 error' in te.message + + with it('asking for S09 report with mocked connection'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{"error": "expected S09 error"}', status=404) + try: + resp = self.s.get_meter_events('ZIV0040318130', + '20170609010000', + '20170611000000') + except TransportError as te: + assert 'expected S09 error' in te.message + + with it('asking for S06 report with mocked connection'): + with responses.RequestsMock() as rsps: + rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', + body='{"error": "expected S06 error"}', status=404) + try: + resp = self.s.get_meter_events('ZIV0040318130', + '20170609010000', + '20170611000000') + except TransportError as te: + assert 'expected S06 error' in te.message From db533c0ccfc8f018a7f94347b1dbdb4973b9b6fe Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 19 Jun 2017 15:39:07 +0200 Subject: [PATCH 09/32] Add function to send S04 for all meters --- primestg/service.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/primestg/service.py b/primestg/service.py index a8cc132..624ab84 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -50,6 +50,14 @@ def get_monthly_billing(self, meters, date_from, date_to): meters = ','.join(meters) return self.send('S04', meters, date_from, date_to) + def get_all_monthly_billing(self, date_from, date_to): + """ + If meter is empty list do it for all meters. + :param meters: either meter_id, list of meter_id's or empty list + :return: an S04 report for the corresponding meters + """ + return self.send('S04', '', date_from, date_to) + def get_daily_absolute(self, meters, date_from, date_to): """ If meter is empty list do it for all meters. From 08f56e98dbe42cfa16927d08f9250461ca7dc637 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 19 Jun 2017 15:39:39 +0200 Subject: [PATCH 10/32] Add fiction to send S05 for all meters --- primestg/service.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/primestg/service.py b/primestg/service.py index 624ab84..679caab 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -68,6 +68,14 @@ def get_daily_absolute(self, meters, date_from, date_to): meters = ','.join(meters) return self.send('S05', meters, date_from, date_to) + def get_all_daily_absolute(self, date_from, date_to): + """ + If meter is empty list do it for all meters. + :param meters: either meter_id, list of meter_id's or empty list + :return: an S05 report for the corresponding meters + """ + return self.send('S05', '', date_from, date_to) + def get_meter_events(self, meters, date_from, date_to): """ If meter is empty list do it for all meters. From 5e4de930d30f6ccc86ee4362510088802d753d2c Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 19 Jun 2017 15:42:27 +0200 Subject: [PATCH 11/32] Test-Add responses as a dev requirement --- requirements-dev.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements-dev.txt b/requirements-dev.txt index 62f329f..2c08d92 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,3 +1,4 @@ pre-commit mamba expects +responses From b2ff1296b4e82da8dd8f8cf495ad4e837bf92b94 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 19 Jun 2017 16:23:04 +0200 Subject: [PATCH 12/32] Add zeep library as requirement --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 415341f..9e08a10 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,8 @@ author='GISCE-TI, S.L.', author_email='devel@gisce.net', install_requires=[ - 'lxml' + 'lxml', + 'zeep' ], description='Prime STG-DC Interface Specification' ) From 4e3331f70e2d1256ab735825c224cdc7c966d393 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Mon, 26 Jun 2017 10:03:10 +0200 Subject: [PATCH 13/32] Add factory to create request counter --- primestg/service.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/primestg/service.py b/primestg/service.py index 679caab..9d4f98c 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -4,13 +4,14 @@ class Service(object): - def __init__(self): + def __init__(self, fact_id): self.DC_service = self.create_service() - self.result = {} + self.fact_id = fact_id def send(self, report_id, meters, date_from, date_to): # TODO: need tocheck which report to demand and which parameters to send - results = self.DC_service.Request(0002, report_id, date_from, + results = self.DC_service.Request(self.fact_id, report_id, + date_from, date_to, meters, 2) return results From da3dae3736108c93ea671953689e2f2820c5ff99 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Tue, 27 Jun 2017 16:54:34 +0200 Subject: [PATCH 14/32] Make Service expect an url to connect to CNC --- primestg/service.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/primestg/service.py b/primestg/service.py index 9d4f98c..1f31111 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -4,9 +4,10 @@ class Service(object): - def __init__(self, fact_id): - self.DC_service = self.create_service() + def __init__(self, fact_id, cnc_url): + self.cnc_url = cnc_url self.fact_id = fact_id + self.DC_service = self.create_service() def send(self, report_id, meters, date_from, date_to): # TODO: need tocheck which report to demand and which parameters to send @@ -21,7 +22,7 @@ def create_service(self): client = Client( wsdl='XXXXX') client.set_ns_prefix(None, 'XXXXX') - return client.create_service(binding, 'XXXXX') + return client.create_service(binding, self.cnc_url) def get_daily_incremental(self, meters, date_from, date_to): """ From af71e827f675ea7156f67f3d5a3c491d2ffd855c Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Tue, 27 Jun 2017 16:57:37 +0200 Subject: [PATCH 15/32] Clarify comments of api functions --- primestg/service.py | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/primestg/service.py b/primestg/service.py index 1f31111..85ae069 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -26,9 +26,9 @@ def create_service(self): def get_daily_incremental(self, meters, date_from, date_to): """ - If meter is empty list do it for all meters. - :param meters: either meter_id, list of meter_id's or empty list - :return: an S02 report for the corresponding meters + Asks for a S02 report to the specified meter. + :param meters: a meter_id + :return: an S02 report for the corresponding meter """ if isinstance(meters, list): meters = ','.join(meters) @@ -36,17 +36,16 @@ def get_daily_incremental(self, meters, date_from, date_to): def get_all_daily_incremental(self, date_from, date_to): """ - If meter is empty list do it for all meters. - :param meters: either meter_id, list of meter_id's or empty list - :return: an S02 report for the corresponding meters + Asks for a S02 report to all meters. + :return: an S02 report from every meter """ return self.send('S02', '', date_from, date_to) def get_monthly_billing(self, meters, date_from, date_to): """ - If meter is empty list do it for all meters. - :param meters: either meter_id, list of meter_id's or empty list - :return: an S04 report for the corresponding meters + Asks for a S04 report to the specified meter. + :param meters: a meter_id + :return: an S04 report for the corresponding meter """ if isinstance(meters, list): meters = ','.join(meters) @@ -54,17 +53,16 @@ def get_monthly_billing(self, meters, date_from, date_to): def get_all_monthly_billing(self, date_from, date_to): """ - If meter is empty list do it for all meters. - :param meters: either meter_id, list of meter_id's or empty list - :return: an S04 report for the corresponding meters + Asks for a S04 report to all meters. + :return: an S04 report from every meter """ return self.send('S04', '', date_from, date_to) def get_daily_absolute(self, meters, date_from, date_to): """ - If meter is empty list do it for all meters. - :param meters: either meter_id, list of meter_id's or empty list - :return: an S05 report for the corresponding meters + Asks for a S05 report to the specified meter. + :param meters: a meter_id + :return: an S05 report for the corresponding meter """ if isinstance(meters, list): meters = ','.join(meters) @@ -72,17 +70,16 @@ def get_daily_absolute(self, meters, date_from, date_to): def get_all_daily_absolute(self, date_from, date_to): """ - If meter is empty list do it for all meters. - :param meters: either meter_id, list of meter_id's or empty list - :return: an S05 report for the corresponding meters + Asks for a S05 report to all meters. + :return: an S05 report from every meter """ return self.send('S05', '', date_from, date_to) def get_meter_events(self, meters, date_from, date_to): """ - If meter is empty list do it for all meters. - :param meters: either meter_id, list of meter_id's or empty list - :return: an S09 report for the corresponding meters + Asks for a S09 report to the specified meter. + :param meters: a meter_id + :return: an S09 report for the corresponding meter """ if isinstance(meters, list): meters = ','.join(meters) @@ -90,9 +87,9 @@ def get_meter_events(self, meters, date_from, date_to): def get_meter_parameters(self, meters, date_from, date_to): """ - If meter is empty list do it for all meters. - :param meters: either meter_id, list of meter_id's or empty list - :return: an S06 report for the corresponding meters + Asks for a S06 report to the specified meter. + :param meters: a meter_id + :return: an S06 report for the corresponding meter """ if isinstance(meters, list): meters = ','.join(meters) From 9f182407907999263358ca2a217db41d346826cb Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Tue, 27 Jun 2017 17:01:35 +0200 Subject: [PATCH 16/32] Add .idea to gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index ba74660..825f225 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,6 @@ docs/_build/ # PyBuilder target/ + +#MyPy +.idea From 3ef28b041361b35b8d5a4844d2628037d172b05f Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Thu, 29 Jun 2017 10:57:16 +0200 Subject: [PATCH 17/32] Add functions-get all meter event and parameters --- primestg/service.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/primestg/service.py b/primestg/service.py index 85ae069..89dc39b 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -85,6 +85,13 @@ def get_meter_events(self, meters, date_from, date_to): meters = ','.join(meters) return self.send('S09', meters, date_from, date_to) + def get_all_meter_events(self, date_from, date_to): + """ + Asks for a S09 report to all meters. + :return: an S09 report from every meter + """ + return self.send('S09', '', date_from, date_to) + def get_meter_parameters(self, meters, date_from, date_to): """ Asks for a S06 report to the specified meter. @@ -93,4 +100,11 @@ def get_meter_parameters(self, meters, date_from, date_to): """ if isinstance(meters, list): meters = ','.join(meters) - return self.send('S06', meters, date_from, date_to) \ No newline at end of file + return self.send('S06', meters, date_from, date_to) + + def get_all_meter_parameters(self, date_from, date_to): + """ + Asks for a S06 report to all meters. + :return: an S06 report from every meter + """ + return self.send('S06', '', date_from, date_to) From 8273dc5dc27d99fdea23aa77ec56d7a34a0eef05 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Thu, 29 Jun 2017 13:21:51 +0200 Subject: [PATCH 18/32] Test-Fix tests to work with new service version --- spec/web_service_spec.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/spec/web_service_spec.py b/spec/web_service_spec.py index 69b038a..8b3fc0a 100644 --- a/spec/web_service_spec.py +++ b/spec/web_service_spec.py @@ -1,14 +1,10 @@ -from expects import expect, equal -from primestg.report import Report import responses -import requests from primestg.service import Service -from zeep.transports import Transport from zeep.exceptions import TransportError with description('Web services run'): with before.all: - self.s = Service() + self.s = Service(1, 'http://cct.gisce.lan:8080/') with it('asking for S02 report with mocked connection'): with responses.RequestsMock() as rsps: @@ -79,8 +75,8 @@ body='{"error": "expected S09 error"}', status=404) try: resp = self.s.get_meter_events('ZIV0040318130', - '20170609010000', - '20170611000000') + '20170609010000', + '20170611000000') except TransportError as te: assert 'expected S09 error' in te.message From 779fafefd60557ba370524e8176fd0a5f25cd295 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Fri, 30 Jun 2017 12:45:17 +0200 Subject: [PATCH 19/32] Add travis encrypted file to repository --- .travis.yml | 2 ++ WS_DC.wsdl.enc | Bin 0 -> 10272 bytes 2 files changed, 2 insertions(+) create mode 100644 WS_DC.wsdl.enc diff --git a/.travis.yml b/.travis.yml index 4a31633..e8e1a81 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,8 @@ sudo: false language: python python: - "2.7" +before_install: + - openssl aes-256-cbc -K $encrypted_431a0956756c_key -iv $encrypted_431a0956756c_iv -in WS_DC.wsdl.enc -out primestg/data/WS_DC.wsdl -d install: - "pip install -r requirements-dev.txt" - "pip install -e ." diff --git a/WS_DC.wsdl.enc b/WS_DC.wsdl.enc new file mode 100644 index 0000000000000000000000000000000000000000..ceab25f8d43bc96824c3ac631921bb529496ff02 GIT binary patch literal 10272 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 mc?z;20&=g-r`D literal 0 HcmV?d00001 From 7fc58c651ea4d2d9db8b37a9f9768cecc834b225 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Fri, 30 Jun 2017 12:47:24 +0200 Subject: [PATCH 20/32] Add function to get relative path in repository --- primestg/__init__.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/primestg/__init__.py b/primestg/__init__.py index b74a6cb..11602c7 100644 --- a/primestg/__init__.py +++ b/primestg/__init__.py @@ -1,5 +1,14 @@ +import os + try: __version__ = __import__('pkg_resources') \ .get_distribution(__name__).version except Exception, e: __version__ = 'unknown' + +_ROOT = os.path.abspath(os.path.dirname(__file__)) + + +def get_data(path): + filename = isinstance(path, (list, tuple)) and path[0] or path + return os.path.join(_ROOT, 'data', filename) From 8779459d5f9eb14be515b4ec1ef2400639a528d2 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Fri, 30 Jun 2017 12:47:56 +0200 Subject: [PATCH 21/32] Use relative path to use encrypted file --- primestg/service.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primestg/service.py b/primestg/service.py index 89dc39b..827a215 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -1,6 +1,7 @@ # -*- coding: UTF-8 -*- from zeep import Client +import primestg class Service(object): @@ -18,10 +19,9 @@ def send(self, report_id, meters, date_from, date_to): return results def create_service(self): - binding = 'XXXXXX' - client = Client( - wsdl='XXXXX') - client.set_ns_prefix(None, 'XXXXX') + binding = '{http://www.asais.fr/ns/Saturne/DC/ws}WS_DCSoap' + client = Client(wsdl=primestg.get_data('WS_DC.wsdl')) + client.set_ns_prefix(None, 'http://www.asais.fr/ns/Saturne/DC/ws') return client.create_service(binding, self.cnc_url) def get_daily_incremental(self, meters, date_from, date_to): From 53ab9cca8f45538e4723bb15cc372e7c0479a8d6 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Fri, 30 Jun 2017 12:58:02 +0200 Subject: [PATCH 22/32] Fix travis encrypted file path --- .travis.yml | 13 +++++++------ WS_DC.wsdl.enc | Bin 10272 -> 0 bytes primestg/data/WS_DC.wsdl.enc | Bin 0 -> 10272 bytes 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 WS_DC.wsdl.enc create mode 100644 primestg/data/WS_DC.wsdl.enc diff --git a/.travis.yml b/.travis.yml index e8e1a81..3d9cd92 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,12 @@ sudo: false language: python python: - - "2.7" -before_install: - - openssl aes-256-cbc -K $encrypted_431a0956756c_key -iv $encrypted_431a0956756c_iv -in WS_DC.wsdl.enc -out primestg/data/WS_DC.wsdl -d +- '2.7' install: - - "pip install -r requirements-dev.txt" - - "pip install -e ." +- pip install -r requirements-dev.txt +- pip install -e . script: - - mamba +- mamba +before_install: +- openssl aes-256-cbc -K $encrypted_b6b988576cbe_key -iv $encrypted_b6b988576cbe_iv + -in WS_DC.wsdl.enc -out WS_DC.wsdl -d diff --git a/WS_DC.wsdl.enc b/WS_DC.wsdl.enc deleted file mode 100644 index ceab25f8d43bc96824c3ac631921bb529496ff02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10272 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 mc?z;20&=g-r`D diff --git a/primestg/data/WS_DC.wsdl.enc b/primestg/data/WS_DC.wsdl.enc new file mode 100644 index 0000000000000000000000000000000000000000..4299eadb91984c00645e8d677dfc1145f4ace30c GIT binary patch literal 10272 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 literal 0 HcmV?d00001 From b7e42eaabe373d16d40f69329653afa5a555753d Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Fri, 30 Jun 2017 13:06:03 +0200 Subject: [PATCH 23/32] Change path on travis configuration file --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3d9cd92..1d0135d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,4 +9,4 @@ script: - mamba before_install: - openssl aes-256-cbc -K $encrypted_b6b988576cbe_key -iv $encrypted_b6b988576cbe_iv - -in WS_DC.wsdl.enc -out WS_DC.wsdl -d + -in primestg/data/WS_DC.wsdl.enc -out primestg/data/WS_DC.wsdl -d From 5b18bf0032f45463e25507158427e01fa92918a0 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Tue, 11 Jul 2017 12:10:18 +0200 Subject: [PATCH 24/32] First version to create async services --- primestg/service.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/primestg/service.py b/primestg/service.py index 827a215..173a526 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -5,16 +5,22 @@ class Service(object): - def __init__(self, fact_id, cnc_url): + def __init__(self, fact_id, cnc_url, sync): self.cnc_url = cnc_url self.fact_id = fact_id + self.sync = sync self.DC_service = self.create_service() def send(self, report_id, meters, date_from, date_to): # TODO: need tocheck which report to demand and which parameters to send - results = self.DC_service.Request(self.fact_id, report_id, - date_from, - date_to, meters, 2) + + if self.sync: + results = self.DC_service.Request(self.fact_id, report_id, + date_from, date_to, meters, 2) + else: + results = self.DC_service.AsynchRequest(self.fact_id, report_id, + date_from, date_to, + meters, 2) return results From ad0f1d2fa1309e87469a234018775847a7cf79e1 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Wed, 12 Jul 2017 13:27:57 +0200 Subject: [PATCH 25/32] Add source parameter to service to use with ASYNC --- primestg/service.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/primestg/service.py b/primestg/service.py index 173a526..7c9f51f 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -5,14 +5,14 @@ class Service(object): - def __init__(self, fact_id, cnc_url, sync): + def __init__(self, fact_id, cnc_url, sync=True, source='DCF'): self.cnc_url = cnc_url self.fact_id = fact_id self.sync = sync + self.source = source # By default it doesn't look to the meter for data self.DC_service = self.create_service() def send(self, report_id, meters, date_from, date_to): - # TODO: need tocheck which report to demand and which parameters to send if self.sync: results = self.DC_service.Request(self.fact_id, report_id, @@ -20,7 +20,7 @@ def send(self, report_id, meters, date_from, date_to): else: results = self.DC_service.AsynchRequest(self.fact_id, report_id, date_from, date_to, - meters, 2) + meters, 2, self.source) return results From 672f2df7b15d6ea2234861269685f7386774ce05 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Wed, 12 Jul 2017 13:30:38 +0200 Subject: [PATCH 26/32] Test-Fix method call on S09 test --- spec/web_service_spec.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/web_service_spec.py b/spec/web_service_spec.py index 8b3fc0a..ad974ed 100644 --- a/spec/web_service_spec.py +++ b/spec/web_service_spec.py @@ -85,8 +85,8 @@ rsps.add(responses.POST, 'http://cct.gisce.lan:8080/', body='{"error": "expected S06 error"}', status=404) try: - resp = self.s.get_meter_events('ZIV0040318130', - '20170609010000', - '20170611000000') + resp = self.s.get_meter_parameters('ZIV0040318130', + '20170609010000', + '20170611000000') except TransportError as te: assert 'expected S06 error' in te.message From 591745df7843e816379e1e4f65b38fcba0cf2857 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Wed, 12 Jul 2017 13:59:03 +0200 Subject: [PATCH 27/32] Modify encrypted file --- primestg/data/WS_DC.wsdl.enc | Bin 10272 -> 10272 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/primestg/data/WS_DC.wsdl.enc b/primestg/data/WS_DC.wsdl.enc index 4299eadb91984c00645e8d677dfc1145f4ace30c..ce5a88c73d8ade4a6052ff57339223cab5cbb72c 100644 GIT binary patch literal 10272 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 z

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 From 0ffa297d5cef0a7b94676d597735ef948a978893 Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Wed, 12 Jul 2017 15:28:33 +0200 Subject: [PATCH 28/32] Force default source to "DC" --- primestg/service.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/primestg/service.py b/primestg/service.py index 7c9f51f..f4ba134 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -5,11 +5,14 @@ class Service(object): - def __init__(self, fact_id, cnc_url, sync=True, source='DCF'): + def __init__(self, fact_id, cnc_url, sync=True, source=None): self.cnc_url = cnc_url self.fact_id = fact_id self.sync = sync - self.source = source # By default it doesn't look to the meter for data + if not source: + self.source = 'DCF' # By default it doesn't look to the meter for data + else: + self.source = source self.DC_service = self.create_service() def send(self, report_id, meters, date_from, date_to): From f64cc5e487991e7f87016d3f08bbdf03557bc0ef Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Fri, 28 Jul 2017 14:27:13 +0200 Subject: [PATCH 29/32] Add method to request S12 report - DC parameters --- primestg/service.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/primestg/service.py b/primestg/service.py index f4ba134..26085ef 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -117,3 +117,10 @@ def get_all_meter_parameters(self, date_from, date_to): :return: an S06 report from every meter """ return self.send('S06', '', date_from, date_to) + + def get_concentrator_parameters(self, dc, date_from, date_to): + """ + Asks for a S12 report to the concentrator. + :return: an S12 report from the concentrator. + """ + return self.send('S12', dc, date_from, date_to) From bed9ff9178d53e101dcbd297de56bdb6e76928ee Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Fri, 18 Aug 2017 09:20:39 +0200 Subject: [PATCH 30/32] Add function to request instant data report --- primestg/service.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/primestg/service.py b/primestg/service.py index 26085ef..7257d3e 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -33,6 +33,16 @@ def create_service(self): client.set_ns_prefix(None, 'http://www.asais.fr/ns/Saturne/DC/ws') return client.create_service(binding, self.cnc_url) + def get_instant_data(self, meters): + """ + Asks for a S01 report to the specified meter. + :param meters: a meter_id + :return: an S01 report for the corresponding meter + """ + if isinstance(meters, list): + meters = ','.join(meters) + return self.send('S01', meters) + def get_daily_incremental(self, meters, date_from, date_to): """ Asks for a S02 report to the specified meter. From 42b4bb2b3bd0936f660d6ef0fec9f6ba543d1c8f Mon Sep 17 00:00:00 2001 From: MiquelIR Date: Fri, 18 Aug 2017 09:21:22 +0200 Subject: [PATCH 31/32] Ser default values on parameters for input dates --- primestg/service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primestg/service.py b/primestg/service.py index 7257d3e..c42af29 100644 --- a/primestg/service.py +++ b/primestg/service.py @@ -15,7 +15,7 @@ def __init__(self, fact_id, cnc_url, sync=True, source=None): self.source = source self.DC_service = self.create_service() - def send(self, report_id, meters, date_from, date_to): + def send(self, report_id, meters, date_from='', date_to=''): if self.sync: results = self.DC_service.Request(self.fact_id, report_id, From 9ae371091c53af34ed3e0891159106d4c26d0422 Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Fri, 8 Sep 2017 10:01:18 +0200 Subject: [PATCH 32/32] Bump to v1.3.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index d53b9a5..9e704fe 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name='primestg', - version='1.2.0', + version='1.3.0', packages=find_packages(), url='https://github.com/gisce/primestg', license='GNU Affero General Public License v3',