Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into test_python_3.6
Browse files Browse the repository at this point in the history
  • Loading branch information
MiquelIR committed Nov 6, 2017
2 parents bf87a60 + 9ae3710 commit a007e92
Show file tree
Hide file tree
Showing 8 changed files with 252 additions and 7 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,6 @@ docs/_build/

# PyBuilder
target/

#MyPy
.idea
13 changes: 8 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
sudo: false
language: python
python:
- "2.7"
- "3.6"
- "2.7"
- "3.6"
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 primestg/data/WS_DC.wsdl.enc -out primestg/data/WS_DC.wsdl -d
9 changes: 9 additions & 0 deletions primestg/__init__.py
Original file line number Diff line number Diff line change
@@ -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)
Binary file added primestg/data/WS_DC.wsdl.enc
Binary file not shown.
136 changes: 136 additions & 0 deletions primestg/service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# -*- coding: UTF-8 -*-

from zeep import Client
import primestg


class Service(object):
def __init__(self, fact_id, cnc_url, sync=True, source=None):
self.cnc_url = cnc_url
self.fact_id = fact_id
self.sync = sync
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=''):

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, self.source)

return results

def create_service(self):
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_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.
:param meters: a meter_id
:return: an S02 report for the corresponding meter
"""
if isinstance(meters, list):
meters = ','.join(meters)
return self.send('S02', meters, date_from, date_to)

def get_all_daily_incremental(self, date_from, date_to):
"""
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):
"""
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)
return self.send('S04', meters, date_from, date_to)

def get_all_monthly_billing(self, date_from, date_to):
"""
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):
"""
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)
return self.send('S05', meters, date_from, date_to)

def get_all_daily_absolute(self, date_from, date_to):
"""
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):
"""
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)
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.
:param meters: a meter_id
:return: an S06 report for the corresponding meter
"""
if isinstance(meters, list):
meters = ','.join(meters)
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)

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)
1 change: 1 addition & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pre-commit
mamba
expects
responses
5 changes: 3 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@

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',
author='GISCE-TI, S.L.',
author_email='[email protected]',
install_requires=[
'lxml'
'lxml',
'zeep'
],
description='Prime STG-DC Interface Specification'
)
92 changes: 92 additions & 0 deletions spec/web_service_spec.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import responses
from primestg.service import Service
from zeep.exceptions import TransportError

with description('Web services run'):
with before.all:
self.s = Service(1, 'http://cct.gisce.lan:8080/')

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 S02 error"}', status=404)
try:
resp = self.s.get_daily_incremental('ZIV0040318130',
'20170610010000',
'20170611000000')
except TransportError as te:
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 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

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

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_parameters('ZIV0040318130',
'20170609010000',
'20170611000000')
except TransportError as te:
assert 'expected S06 error' in te.message

0 comments on commit a007e92

Please sign in to comment.