Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Añadir soporte para REOBJE2 #70

Merged
merged 1 commit into from
Jul 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,6 @@
- `P5D`
- `PMEST`
- `POTELECTRO`
- `REOBJE2`
- `REOBJEAGRECL`
- `REOBJEINCL`
27 changes: 21 additions & 6 deletions mesures/headers.py
Original file line number Diff line number Diff line change
Expand Up @@ -501,8 +501,8 @@
'data_fi', # str aaaa/mm/dd hh
'motiu_emissor', # str(3)
'magnitud', # str(3)
'energia_publicada', # int(10) kWh
'energia_proposada', # int(10) kWh
'energia_publicada', # str(10) kWh
'energia_proposada', # str(10) kWh
'comentari_emissor', # str(255)
'auto_obj', # str(1) S/N
'acceptacio', # str(1) S/N
Expand All @@ -515,13 +515,28 @@
'data_inici', # str aaaammdd hh
'data_fi', # str aaaammdd hh
'motiu_emissor', # str(3)
'energia_entrant_publicada', # int(10) kWh
'energia_entrant_proposada', # int(10) kWh
'energia_sortint_publicada', # int(10) kWh
'energia_sortint_proposada', # int(10) kWh
'energia_entrant_publicada', # str(10) kWh
'energia_entrant_proposada', # str(10) kWh
'energia_sortint_publicada', # str(10) kWh
'energia_sortint_proposada', # str(10) kWh
'comentari_emissor', # str(255)
'auto_obj', # str(1) S/N
'acceptacio', # str(1) S/N
'motiu_receptor', # str(2)
'comentari_receptor' # str(255)
]

REOBJE2_HEADER = [
'cups', # str(22)
'data_inici', # str aaaammdd hh
'data_fi', # str aaaammdd hh
'motiu_emissor', # str(3)
'energia_publicada', # str(10) kWh
'energia_proposada', # str(10) kWh
'comentari_emissor', # str(255)
'auto_obj', # str(1) S/N
'acceptacio', # str(1) S/N
'motiu_receptor', # str(2)
'comentari_receptor', # str(255)
'magnitud' # str(2) AS/AE
]
31 changes: 31 additions & 0 deletions mesures/reobje2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from mesures.headers import REOBJE2_HEADER as COLUMNS
from mesures.reobjeagrecl import REOBJEAGRECL

import pandas as pd


class REOBJE2(REOBJEAGRECL):
def __init__(self, data, distributor=None, comer=None, periode=None, compression='bz2', columns=COLUMNS, version=0):
"""
:param data: list of dicts or absolute file_path
:param distributor: str distributor REE code
:param compression: 'bz2', 'gz'... OR False otherwise
"""
super(REOBJE2, self).__init__(data, distributor=distributor, comer=comer, periode=periode,
compression=compression, columns=COLUMNS, version=version)
self.prefix = 'REOBJE2'

def reader(self, filepath):
if isinstance(filepath, str):
df = pd.read_csv(filepath, sep=';', names=COLUMNS)
elif isinstance(filepath, list):
df = pd.DataFrame(data=filepath)
else:
raise Exception("Filepath must be an str or a list")

df['comentari_emissor'] = df.apply(lambda row: row['comentari_emissor'] or '', axis=1)
df['energia_publicada'] = df.apply(lambda row: row['energia_publicada'] or '', axis=1)
df['energia_proposada'] = df.apply(lambda row: row['energia_proposada'] or '', axis=1)

return df
48 changes: 48 additions & 0 deletions spec/generation_files_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from mesures.p2d import P2D
from mesures.p5d import P5D
from mesures.potelectro import POTELECTRO
from mesures.reobje2 import REOBJE2
from mesures.reobjeagrecl import REOBJEAGRECL
from mesures.reobjeincl import REOBJEINCL
from random import randint
Expand Down Expand Up @@ -763,6 +764,36 @@ def get_sample_reobjeincl_data():
'comentari_receptor': 'La energia está correcta. A llorar a la llorería.'
}]

@staticmethod
def get_sample_reobje2_data():
return [{
'cups': 'ES0291000000004444QR1F',
'data_inici': '2024/01/01 01',
'data_fi': '2024/02/01 00',
'motiu_emissor': '100',
'energia_publicada': '100',
'energia_proposada': '110',
'comentari_emissor': 'Paga la energia, primer aviso.',
'auto_obj': 'N',
'acceptacio': 'N',
'motiu_receptor': '2',
'comentari_receptor': 'La energia está correcta. A llorar a la llorería.',
'magnitud': 'AE'
},
{
'cups': 'ES0291000000004444QR1F',
'data_inici': '2024/01/01 01',
'data_fi': '2024/02/01 00',
'motiu_emissor': '100',
'energia_publicada': '100',
'comentari_emissor': 'Paga la energia, primer aviso.',
'auto_obj': 'N',
'acceptacio': 'N',
'motiu_receptor': '2',
'comentari_receptor': 'La energia está correcta. A llorar a la llorería.',
'magnitud': 'AE'
}]


with description('A P5D'):
with it('is instance of P5D Class'):
Expand Down Expand Up @@ -1359,3 +1390,20 @@ def get_sample_reobjeincl_data():
expected = "ES0291000000004444QR1F;2024/01/01 01;2024/02/01 00;100;100;110;;;Paga la energia, primer aviso.;N;N;2;La energia está correcta. A llorar a la llorería.\n" \
"ES0291000000005555QR1F;2024/01/01 01;2024/02/01 00;100;100;100;10.0;20.0;Paga la energia, primer aviso.;N;N;2;La energia está correcta. A llorar a la llorería.\n"
assert f.file[f.columns].to_csv(sep=';', header=None, index=False) == expected

with description('A REOBJE2'):
with it('is instance of REOBJE2 Class'):
data = SampleData().get_sample_reobje2_data()
f = REOBJE2(data)
assert isinstance(f, REOBJE2)

with it('gets expected content'):
data = SampleData().get_sample_reobje2_data()
f = REOBJE2(data)
res = f.writer()
expected = ("ES0291000000004444QR1F;2024/01/01 01;2024/02/01 00;100;100;110;Paga la energia, "
"primer aviso.;N;N;2;La energia está correcta. A llorar a la llorería.;AE\n"
"ES0291000000004444QR1F;2024/01/01 01;2024/02/01 00;100;100;;Paga la energia, "
"primer aviso.;N;N;2;La energia está correcta. A llorar a la llorería.;AE\n"
)
assert f.file[f.columns].to_csv(sep=';', header=None, index=False) == expected
Loading