|
|
|
@ -13,20 +13,6 @@ from kedro.framework.session import KedroSession
|
|
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
with KedroSession.create() as session:
|
|
|
|
|
|
|
|
context = session.load_context()
|
|
|
|
|
|
|
|
xlststylesheet = context.params['xsltstylesheet']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#xlststylesheet = "templates/xsl/actes_princiers.xsl"
|
|
|
|
|
|
|
|
# XXX is it usefull to make this bunch of code a classmethod ?
|
|
|
|
|
|
|
|
def _xslt(xsltstylesheet):
|
|
|
|
|
|
|
|
"performs XML transformation on each dataset"
|
|
|
|
|
|
|
|
xslt_doc = etree.parse(xlststylesheet)
|
|
|
|
|
|
|
|
xslt_transformer = etree.XSLT(xslt_doc)
|
|
|
|
|
|
|
|
return xslt_transformer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xslt_transformer = _xslt(xlststylesheet)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XMLDataSet(ABC):
|
|
|
|
class XMLDataSet(ABC):
|
|
|
|
"Abstract base class for an XML dataset loader"
|
|
|
|
"Abstract base class for an XML dataset loader"
|
|
|
|
|
|
|
|
|
|
|
|
@ -52,6 +38,10 @@ class XMLDataSet(ABC):
|
|
|
|
class EtreeXMLDataSet(XMLDataSet):
|
|
|
|
class EtreeXMLDataSet(XMLDataSet):
|
|
|
|
"XMLDataSet loader with lxml.etree (lxml.etree._ElementTree)"
|
|
|
|
"XMLDataSet loader with lxml.etree (lxml.etree._ElementTree)"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, filepath, params):
|
|
|
|
|
|
|
|
self._filepath = filepath
|
|
|
|
|
|
|
|
self.xsltstylesheet = params
|
|
|
|
|
|
|
|
|
|
|
|
def _load(self):
|
|
|
|
def _load(self):
|
|
|
|
"from the xml file loads a internal xml repr (with element tree)"
|
|
|
|
"from the xml file loads a internal xml repr (with element tree)"
|
|
|
|
# self.source_doc is an etree internal xml repr document
|
|
|
|
# self.source_doc is an etree internal xml repr document
|
|
|
|
@ -68,7 +58,15 @@ class EtreeXMLDataSet(XMLDataSet):
|
|
|
|
with open(self._filepath, 'w') as fhandle:
|
|
|
|
with open(self._filepath, 'w') as fhandle:
|
|
|
|
fhandle.write(data)
|
|
|
|
fhandle.write(data)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
|
|
def _xslt(xsltstylesheet):
|
|
|
|
|
|
|
|
"performs XML transformation on each dataset"
|
|
|
|
|
|
|
|
xslt_doc = etree.parse(xsltstylesheet)
|
|
|
|
|
|
|
|
xslt_transformer = etree.XSLT(xslt_doc)
|
|
|
|
|
|
|
|
return xslt_transformer
|
|
|
|
|
|
|
|
|
|
|
|
def transform(self):
|
|
|
|
def transform(self):
|
|
|
|
|
|
|
|
xslt_transformer = self._xslt(self.xsltstylesheet)
|
|
|
|
return str(xslt_transformer(self.source_doc))
|
|
|
|
return str(xslt_transformer(self.source_doc))
|
|
|
|
|
|
|
|
|
|
|
|
class BsXMLDataSet(XMLDataSet):
|
|
|
|
class BsXMLDataSet(XMLDataSet):
|
|
|
|
@ -149,11 +147,15 @@ class DataSetCollection(AbstractDataSet):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XMLDataSetCollection(DataSetCollection):
|
|
|
|
class XMLDataSetCollection(DataSetCollection):
|
|
|
|
|
|
|
|
def __init__(self, housename: str,
|
|
|
|
|
|
|
|
folderpath: str, xsltstylesheet: str) -> None:
|
|
|
|
|
|
|
|
super().__init__(housename, folderpath)
|
|
|
|
|
|
|
|
self.xsltstylesheet = xsltstylesheet
|
|
|
|
|
|
|
|
|
|
|
|
def _load(self) -> dict[str, EtreeXMLDataSet]:
|
|
|
|
def _load(self) -> dict[str, EtreeXMLDataSet]:
|
|
|
|
"kedro's API loader method"
|
|
|
|
"kedro's API loader method"
|
|
|
|
for filepath in sorted(self._folderpath.glob("*.xml")):
|
|
|
|
for filepath in sorted(self._folderpath.glob("*.xml")):
|
|
|
|
self.datasets[filepath.stem] = EtreeXMLDataSet(
|
|
|
|
self.datasets[filepath.stem] = EtreeXMLDataSet(str(filepath), self.xsltstylesheet)
|
|
|
|
filepath=str(filepath))
|
|
|
|
|
|
|
|
return self
|
|
|
|
return self
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|