Skip to content
This repository was archived by the owner on Feb 22, 2025. It is now read-only.
Open
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
17 changes: 12 additions & 5 deletions entsoe_client/Parsers/Parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
Acknowledgment_MarketDocument_Parser
from entsoe_client.Parsers.Outages_MarketDocument_Parser import \
Outages_MarketDocument_Parser
from entsoe_client.Parsers.Unavailability_MarketDocument_parser import \
Unavailability_MarketDocument_Parser


class Parser:
Expand Down Expand Up @@ -47,11 +49,11 @@ def unpack_archive(response_content: bytes) -> List[bytes]:
return xml_document_list

def parse(self, zip_archive: bytes):
parser = XMLParser()
xml_documents = self.unpack_archive(zip_archive)
deserailized_xmls = [XMLParser.deserialize_xml(elem) for elem in xml_documents]
parser = factory.get_parser(deserailized_xmls[0].tag, deserailized_xmls[0].type.text)
parser.set_objectified_input_xml(deserailized_xmls)
return parser.parse()
dfs = [parser.parse(xml_document) for xml_document in xml_documents]
df = pd.concat(dfs, axis=0)
return df


class XMLParser:
Expand All @@ -78,7 +80,12 @@ def get_parser(tag: str, document_type: str):
if tag in ["Acknowledgement_MarketDocument"]:
return Acknowledgment_MarketDocument_Parser()
elif tag in ["Unavailability_MarketDocument"]:
return Outages_MarketDocument_Parser()
if document_type in ["A53"]:
return Unavailability_MarketDocument_Parser()
elif document_type in ["A76", "A78", "A79", "A80", "A77"]:
return Outages_MarketDocument_Parser()
else:
raise ValueError(document_type)
elif tag in ["GL_MarketDocument"]:
if document_type in ["A65", "A70"]: # Load
return GL_MarketDocument_Parser()
Expand Down
44 changes: 44 additions & 0 deletions entsoe_client/Parsers/Unavailability_MarketDocument_parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from entsoe_client.Parsers import ParserUtils as utils
from entsoe_client.Parsers.Entsoe_Document_Parser import Entsoe_Document_Parser

class Abstract_Unavailability_MarketDocument_Parser(Entsoe_Document_Parser):
def __init__(self):
super().__init__()
self.Document_Parser = None
self.TimeSeries_Parser = None
self.Series_Period_Parser = None
self.Point_Parser = None
self.MktPSRType_Parser = None
self.MktGeneratingUnit_Parser = None

def set_Document_Parser(self, Document_Parser):
self.Document_Parser = Document_Parser

def set_TimeSeries_Parser(self, TimeSeries_Parser):
self.TimeSeries_Parser = TimeSeries_Parser

def set_Series_Period_Parser(self, Series_Period_Parser):
self.Series_Period_Parser = Series_Period_Parser

def set_Point_Parser(self, Point_Parser):
self.Point_Parser = Point_Parser

def set_MktPSRType_Parser(self, MktPSRType_Parser):
self.MktPSRType_Parser = MktPSRType_Parser

def set_MktGeneratingUnit_Parser(self, MktGeneratingUnit_Parser):
self.MktGeneratingUnit_Parser = MktGeneratingUnit_Parser


class Unavailability_MarketDocument_Parser(Abstract_Unavailability_MarketDocument_Parser):
def __init__(self):
super().__init__()
self.set_Document_Parser(
utils.Tree_to_DataFrame(utils.Root_to_DataFrame_fn(), "TimeSeries")
)

def parse(self):
df = self.Document_Parser(self.objectified_input_xml)
# Remove the metadata from the parent node (Timeseries) which does not give extra information
df = df.reset_index().pivot(columns="Tag", values="Value", index="Unavailability_MarketDocument.mRID")
return df