diff --git a/src/byteb4rb1e/utils/urllib/__init__.py b/src/byteb4rb1e/utils/urllib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/byteb4rb1e/utils/urllib/request.py b/src/byteb4rb1e/utils/urllib/request.py new file mode 100644 index 0000000..28e8e8e --- /dev/null +++ b/src/byteb4rb1e/utils/urllib/request.py @@ -0,0 +1,36 @@ +import importlib.resources +from urllib.request import URLError +import urllib.request + + +class PkgHandler(urllib.request.BaseHandler): + """ + """ + def pkg_open(self, req): + pkg_files = importlib.resources.files(req.host) + + raise Exception(sorted(pkg_files.glob('**/*'))) + + try: + fh = list( + pkg_files.glob(req.selector.lstrip('//')) + )[0].open('rb') + except Exception as e: + raise URLError(f'{e.__class__.__name__}: {e}') from e + + fh.seek(0, 2); + size = fh.tell(); + fh.seek(0); + + mtype, _ = mimetypes.guess_type(url) + + headers = email.message_from_string( + 'Content-Type: %s\nContent-Length: %d\n' % + (mtype or 'text/plain', size) + ) + + if not mtype or mtype.starts_with('text/'): + fh.close() + fh = importlib.resources.files(req.host).glob(req.selector)[0].open('r') + + return urllib.request.addinfourl(fh, header) diff --git a/tests/unit/byteb4rb1e/utils/urllib/test_request.py b/tests/unit/byteb4rb1e/utils/urllib/test_request.py new file mode 100644 index 0000000..28548ef --- /dev/null +++ b/tests/unit/byteb4rb1e/utils/urllib/test_request.py @@ -0,0 +1,9 @@ +from byteb4rb1e.utils.urllib.request import PkgHandler + +class TestPkgHandler: + """ + """ + def test_default(self): + """ + """ + pass