From e3319908a1f52db8110f03d2e785c5487b5290f8 Mon Sep 17 00:00:00 2001 From: Rick Rongen Date: Thu, 14 Feb 2019 16:27:58 +0100 Subject: [PATCH] Added support for downloading binary --- Crx/connection.py | 12 ++++++++++++ Crx/simplenode.py | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/Crx/connection.py b/Crx/connection.py index 67cade8..4c8fcde 100644 --- a/Crx/connection.py +++ b/Crx/connection.py @@ -14,6 +14,11 @@ http://localhost:4502/crx/de/nodetypes.jsp?_dc=1549392939958 http://localhost:4502/crx/server/crx.default/jcr%3aroot/libs.1.json?_dc=1549392123434&node=xnode-265 http://localhost:4502/crx/de/query.jsp?_dc=1549392245191&_charset_=utf-8&type=xpath&stmt=%2Fjcr%3Aroot%2Fbin%2F%2F*%5Bjcr%3Acontains(.%2C%20%27asdf%27)%5D%20order%20by%20%40jcr%3Ascore&showResults=true http://app30-prd-asd.sbnl.vancis.nl:4502/bin/wcm/references.json?path=%2Fcontent%2Fdam%2Fbeeldbank%2F_0005_home_algemeen.png&predicate=wcmcontent&_charset_=utf-8 + +Download: +http://app30-prd-asd.sbnl.vancis.nl:4502/crx/server/crx.default/jcr:root/content/dam/beeldbank/vrouw-direct-naar.jpg/jcr:content/renditions/original/jcr:content/jcr:data +OR +download.jsp?path=%2Fcontent%2Fdam%2Fbeeldbank%2Fvrouw-direct-naar.jpg%2Fjcr%3Acontent%2Frenditions%2Foriginal%2Fjcr%3Acontent%2Fjcr%3Adata&index=0 """ CRX_SERVER_ROOT = '/crx/server/crx.default/jcr:root/' @@ -85,6 +90,13 @@ class Connection: return data + def download_binary(self, path: str) -> bytes: + # TODO verify if it is not b64 encoded. for some reason it is in FireFox + resp = self.session.get( + urljoin(self.data_root, '.' + path) + ) + return resp.content + def get_simple_node(self, path: str) -> SimpleNode: return SimpleNode(path, self.get_node_raw(path), self) diff --git a/Crx/simplenode.py b/Crx/simplenode.py index 8dbcc9e..0086fdd 100644 --- a/Crx/simplenode.py +++ b/Crx/simplenode.py @@ -1,13 +1,25 @@ +from logging import Logger + if False: from .connection import Connection +LOGGER = Logger(__name__) + + class SimpleNode: def __init__(self, path: str, data: dict, connection: 'Connection'): self.path = path self._data = data self._connection = connection + def download(self, key: str = 'jcr:data') -> bytes: + if ':' + key not in self._data: + LOGGER.warning(f"Key :{key} is not present, binary probably not available") + # TODO value of the :{key} must be an int + # TODO value denotes file size, warn/deny large files? + return self._connection.download_binary(self.path + '/' + key) + def __getitem__(self, item): return getattr(self, item)