From 565734d6f9bac30b978ce34d9d1262c20599bc7b Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Mon, 23 Mar 2020 11:21:53 +0100 Subject: [PATCH 01/16] Update urls to new API service --- empowering/executors/urllib2_executor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/empowering/executors/urllib2_executor.py b/empowering/executors/urllib2_executor.py index 927e642..23c8f5c 100644 --- a/empowering/executors/urllib2_executor.py +++ b/empowering/executors/urllib2_executor.py @@ -7,8 +7,8 @@ logger = logging.getLogger('empowering.executors.urllib2_executor') -API_HOST = 'api.empowering.cimne.com' -DEBUG_API_HOST = '91.121.140.152' +API_HOST = 'api.beedataanalytics.com' +DEBUG_API_HOST = 'devapi.beedataanalytics.com' class HTTPSClientAuthHandler(urllib2.HTTPSHandler): From 47206df9fbdbdb759e61e1123689b21bf8a3808e Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Mon, 23 Mar 2020 11:22:08 +0100 Subject: [PATCH 02/16] More py3 compatible --- empowering/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/empowering/__init__.py b/empowering/__init__.py index d2307eb..9b7d351 100644 --- a/empowering/__init__.py +++ b/empowering/__init__.py @@ -1,7 +1,7 @@ try: VERSION = __import__('pkg_resources') \ .get_distribution(__name__).version -except Exception, e: +except Exception as e: VERSION = 'unknown' from service import Empowering From 3f545c50e48b3b39dd35cf29de740effce70020e Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Mon, 23 Mar 2020 11:22:32 +0100 Subject: [PATCH 03/16] Add with statement support to logout --- empowering/service.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/empowering/service.py b/empowering/service.py index 0b22be8..f7b9d4a 100644 --- a/empowering/service.py +++ b/empowering/service.py @@ -123,6 +123,13 @@ def add_cookie_token(self, request): def get_url(self): return "{0}/{1}".format(self.apiroot, self.version) + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + if self.login_handler and self.token: + self.logout() + def login(self, user, password): if self.login_handler and self.token: return {'success': True, 'token': self.token} From 74b42d4830f14a7712ca275f78d17859b417de8f Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Fri, 27 Mar 2020 22:00:29 +0100 Subject: [PATCH 04/16] Add new resources residential and tertiary --- empowering/service.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/empowering/service.py b/empowering/service.py index f7b9d4a..21de7c1 100644 --- a/empowering/service.py +++ b/empowering/service.py @@ -47,6 +47,14 @@ def delete(self, obj, etag): raise base.MethodNotSupported +class ResidentialTimeofuseAmonMeasures(AmonMeasures): + path = 'residential_timeofuse_amon_measures' + + +class TertiaryAmonMeasures(AmonMeasures): + path = 'tertiary_amon_measures' + + class AmonMeasuresMeasurements(EmpoweringResource): path = 'amon_measures_measurements' @@ -159,6 +167,14 @@ def logout(self): def amon_measures(self): return AmonMeasures(self) + @base.resource(ResidentialTimeofuseAmonMeasures) + def residential_timeofuse_amon_measures(self): + return ResidentialTimeofuseAmonMeasures(self) + + @base.resource(TertiaryAmonMeasures) + def tertiary_amon_measures(self): + return TertiaryAmonMeasures(self) + @base.resource(Measures) def measures(self): warn('Deprecated. Use amon_measures_measurements', DeprecationWarning) From e1e8638138791f38da7326696a570bc63d041ba1 Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Mon, 27 Apr 2020 09:01:36 +0200 Subject: [PATCH 05/16] Add tariffs resource --- empowering/service.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/empowering/service.py b/empowering/service.py index 21de7c1..f2a53bc 100644 --- a/empowering/service.py +++ b/empowering/service.py @@ -80,6 +80,10 @@ def __init__(self, *args, **kwargs): DeprecationWarning) +class Tariffs(EmpoweringResource): + path = 'raw_tariffs' + + class Empowering(base.Resource): """ Empowering Insight Engine Service API. @@ -192,6 +196,10 @@ def contract(self, contract_id): def contracts(self): return Contracts(self) + @base.resource(Tariffs) + def tariffs(self): + return Tariffs(self) + @base.resource(OT101Results) def ot101_result(self, result_id): return OT101Results(self, result_id) From 209908a7e68fdb2e3c3ee92a177962b7df48076f Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Tue, 28 Apr 2020 22:33:38 +0200 Subject: [PATCH 06/16] Disable marshmallow wrapper --- empowering/service.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/empowering/service.py b/empowering/service.py index f2a53bc..03571ed 100644 --- a/empowering/service.py +++ b/empowering/service.py @@ -26,10 +26,6 @@ class Contracts(EmpoweringResource): path = 'contracts' - def wrap_object(self, obj): - serializer = models.Contract() - return serializer.dump(obj).data - class AmonMeasures(EmpoweringResource): path = 'amon_measures' From b3bb487b7478417798878f94e83e0433c022e656 Mon Sep 17 00:00:00 2001 From: puig Date: Thu, 18 Mar 2021 18:52:58 +0100 Subject: [PATCH 07/16] Initialize indexed price model --- empowering/models.py | 6 ++++++ empowering/service.py | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/empowering/models.py b/empowering/models.py index d95cbcb..6aa096a 100644 --- a/empowering/models.py +++ b/empowering/models.py @@ -156,3 +156,9 @@ class AmonMeasure(Schema): meteringPointId = fields.UUID() readings = fields.List(fields.Nested(Reading)) measurements = fields.List(fields.Nested(Measurement)) + +class IndexedPrice(Schema): + tariffId = fields.String() + tariffCostId = Integer() + price = fields.Float() + datetime = StringDateTime(format='iso') diff --git a/empowering/service.py b/empowering/service.py index 03571ed..c6e60f2 100644 --- a/empowering/service.py +++ b/empowering/service.py @@ -80,6 +80,14 @@ class Tariffs(EmpoweringResource): path = 'raw_tariffs' +class IndexedPrice(EmpoweringResource): + path = 'amon_indexed_price' + + @base.apimethod + def delete(self, start=None, end=None): + raise base.MethodNotSupported + + class Empowering(base.Resource): """ Empowering Insight Engine Service API. @@ -196,6 +204,10 @@ def contracts(self): def tariffs(self): return Tariffs(self) + @base.resource + def indexed_price(): + return IndexedPrice(self) + @base.resource(OT101Results) def ot101_result(self, result_id): return OT101Results(self, result_id) From 4f1f3a32bc2e5dd7a69eaa559ce576d639510608 Mon Sep 17 00:00:00 2001 From: Francesc Puig Date: Thu, 1 Apr 2021 17:11:41 +0200 Subject: [PATCH 08/16] Not use indexed price model --- empowering/models.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/empowering/models.py b/empowering/models.py index 6aa096a..d95cbcb 100644 --- a/empowering/models.py +++ b/empowering/models.py @@ -156,9 +156,3 @@ class AmonMeasure(Schema): meteringPointId = fields.UUID() readings = fields.List(fields.Nested(Reading)) measurements = fields.List(fields.Nested(Measurement)) - -class IndexedPrice(Schema): - tariffId = fields.String() - tariffCostId = Integer() - price = fields.Float() - datetime = StringDateTime(format='iso') From 0a5d22bb70511af01a66c4b3f5c2e1405aa5cfc5 Mon Sep 17 00:00:00 2001 From: Francesc Puig Date: Thu, 1 Apr 2021 17:12:24 +0200 Subject: [PATCH 09/16] Redefine price_indexed names --- empowering/service.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/empowering/service.py b/empowering/service.py index c6e60f2..fa82cba 100644 --- a/empowering/service.py +++ b/empowering/service.py @@ -80,11 +80,15 @@ class Tariffs(EmpoweringResource): path = 'raw_tariffs' -class IndexedPrice(EmpoweringResource): - path = 'amon_indexed_price' +class PriceIndexed(EmpoweringResource): + path = 'amon_price_indexed' @base.apimethod - def delete(self, start=None, end=None): + def update(self, obj, _id): + raise base.MethodNotSupported + + @base.apimethod + def delete(self, obj, _id): raise base.MethodNotSupported @@ -205,8 +209,8 @@ def tariffs(self): return Tariffs(self) @base.resource - def indexed_price(): - return IndexedPrice(self) + def price_indexed(): + return PriceIndexed(self) @base.resource(OT101Results) def ot101_result(self, result_id): From 6c2397656541d66deb05ffa4441f8f5116a25c5b Mon Sep 17 00:00:00 2001 From: Francesc Puig Date: Thu, 1 Apr 2021 17:24:31 +0200 Subject: [PATCH 10/16] Change path API price indexed name --- empowering/service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/empowering/service.py b/empowering/service.py index fa82cba..e60ebf7 100644 --- a/empowering/service.py +++ b/empowering/service.py @@ -81,7 +81,7 @@ class Tariffs(EmpoweringResource): class PriceIndexed(EmpoweringResource): - path = 'amon_price_indexed' + path = 'price_indexed' @base.apimethod def update(self, obj, _id): From 1a102078ceb9eeb65e30199765aae269fda80058 Mon Sep 17 00:00:00 2001 From: Francesc Puig Date: Thu, 1 Apr 2021 18:04:43 +0200 Subject: [PATCH 11/16] Fix facepalm c and p is e... --- empowering/service.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/empowering/service.py b/empowering/service.py index e60ebf7..f2c938e 100644 --- a/empowering/service.py +++ b/empowering/service.py @@ -208,8 +208,8 @@ def contracts(self): def tariffs(self): return Tariffs(self) - @base.resource - def price_indexed(): + @base.resource(PriceIndexed) + def price_indexed(self): return PriceIndexed(self) @base.resource(OT101Results) From bfdf7e706398911b2c2e222e90f911e3eb9766b8 Mon Sep 17 00:00:00 2001 From: dmunoz Date: Tue, 5 Jul 2022 13:00:55 +0200 Subject: [PATCH 12/16] Commit AgriEnergia Prod code --- empowering/resource.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/empowering/resource.py b/empowering/resource.py index 72a5799..d5019e3 100644 --- a/empowering/resource.py +++ b/empowering/resource.py @@ -20,10 +20,13 @@ def delete(self, etag): return request, parsers.parse_json @base.apimethod - def get(self, where=None, sort=None): + def get(self, where=None, sort=None, rid=None): sort = sort and sort.replace(' ', '') params = base.get_params(('where', 'sort'), locals()) - request = http.Request('GET', self.get_url(), params) + url = self.get_url() + if rid: + url = '{}/{}'.format(url, rid) + request = http.Request('GET', url, params) return request, parsers.parse_json From 69b66856b99d3c3e5c0cd55353629ebe69504cc2 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Thu, 17 Nov 2022 15:31:28 +0100 Subject: [PATCH 13/16] Add environment var to establish anonimous data --- empowering/utils.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/empowering/utils.py b/empowering/utils.py index 7ea4f55..7e2ca7e 100644 --- a/empowering/utils.py +++ b/empowering/utils.py @@ -4,6 +4,7 @@ import times import ssl from arrow.parser import DateTimeParser +import os # Monkey patch parse function for times library (newer) @@ -89,8 +90,11 @@ def make_uuid(model, model_id): model = model.encode('utf-8') if isinstance(model_id, unicode): model_id = model_id.encode('utf-8') - token = '%s,%s' % (model, model_id) - return str(uuid.uuid5(uuid.NAMESPACE_OID, token)) + if os.getenv('EMPOWERING_ANONIMIZE', True): + token = '%s,%s' % (model, model_id) + return str(uuid.uuid5(uuid.NAMESPACE_OID, token)) + else: + return model_id def make_utc_timestamp(timestamp, timezone='Europe/Madrid'): From cf3f4b3c650370dc8b0aa37c6a8691023fd1f8bd Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Thu, 17 Nov 2022 15:47:46 +0100 Subject: [PATCH 14/16] Rename to avoid aliasing --- empowering/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/empowering/utils.py b/empowering/utils.py index 7e2ca7e..b17ab3b 100644 --- a/empowering/utils.py +++ b/empowering/utils.py @@ -90,7 +90,7 @@ def make_uuid(model, model_id): model = model.encode('utf-8') if isinstance(model_id, unicode): model_id = model_id.encode('utf-8') - if os.getenv('EMPOWERING_ANONIMIZE', True): + if os.getenv('ANONIMIZE', True): token = '%s,%s' % (model, model_id) return str(uuid.uuid5(uuid.NAMESPACE_OID, token)) else: From b06cde87c14e7247038ae10893d4f7ff1a72fec8 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Thu, 17 Nov 2022 16:14:53 +0100 Subject: [PATCH 15/16] Test --- empowering/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/empowering/utils.py b/empowering/utils.py index b17ab3b..83e7226 100644 --- a/empowering/utils.py +++ b/empowering/utils.py @@ -90,7 +90,7 @@ def make_uuid(model, model_id): model = model.encode('utf-8') if isinstance(model_id, unicode): model_id = model_id.encode('utf-8') - if os.getenv('ANONIMIZE', True): + if int(os.getenv('ANONIMIZE', '1')): token = '%s,%s' % (model, model_id) return str(uuid.uuid5(uuid.NAMESPACE_OID, token)) else: From 497e4bf43a7259a9eae18cd1e5d35e0fb7502787 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Thu, 17 Nov 2022 17:53:34 +0100 Subject: [PATCH 16/16] Casting to str --- empowering/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/empowering/utils.py b/empowering/utils.py index 83e7226..16e6466 100644 --- a/empowering/utils.py +++ b/empowering/utils.py @@ -94,7 +94,7 @@ def make_uuid(model, model_id): token = '%s,%s' % (model, model_id) return str(uuid.uuid5(uuid.NAMESPACE_OID, token)) else: - return model_id + return str(model_id) def make_utc_timestamp(timestamp, timezone='Europe/Madrid'):