create get_resource_path function
This commit is contained in:
parent
d341950caa
commit
f5c7e9102e
|
@ -45,6 +45,7 @@ from .misc import (
|
||||||
deprecated,
|
deprecated,
|
||||||
get_object_name,
|
get_object_name,
|
||||||
get_object_properties,
|
get_object_properties,
|
||||||
|
get_resource_path,
|
||||||
get_top_domain,
|
get_top_domain,
|
||||||
http_request,
|
http_request,
|
||||||
is_loop_running,
|
is_loop_running,
|
||||||
|
|
32
blib/misc.py
32
blib/misc.py
|
@ -22,6 +22,26 @@ from urllib.request import Request, urlopen
|
||||||
from . import __version__
|
from . import __version__
|
||||||
from .enums import FileSizeUnit, HttpMethod
|
from .enums import FileSizeUnit, HttpMethod
|
||||||
|
|
||||||
|
try:
|
||||||
|
from importlib.resources import files as pkgfiles
|
||||||
|
|
||||||
|
except ImportError:
|
||||||
|
# this is a mess and I'm now debating my decision to never have outside dependencies
|
||||||
|
# outside of docs and dev stuff
|
||||||
|
import inspect
|
||||||
|
from importlib import import_module
|
||||||
|
from importlib.resources.abc import Traversable
|
||||||
|
from types import ModuleType
|
||||||
|
|
||||||
|
def pkgfiles(anchor: str | ModuleType | None = None) -> Traversable:
|
||||||
|
if anchor is None:
|
||||||
|
raise ValueError("A module or name must be specified")
|
||||||
|
|
||||||
|
if isinstance(anchor, str):
|
||||||
|
anchor = import_module(anchor)
|
||||||
|
|
||||||
|
return Path(inspect.getfile(anchor)).parent
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from typing import Self
|
from typing import Self
|
||||||
|
|
||||||
|
@ -201,6 +221,18 @@ def get_object_properties(
|
||||||
yield key, value
|
yield key, value
|
||||||
|
|
||||||
|
|
||||||
|
def get_resource_path(module: str, path: str | None = None) -> Path:
|
||||||
|
"""
|
||||||
|
Get a path to a module resource
|
||||||
|
|
||||||
|
:param module: Name of the module to get the resource from
|
||||||
|
:param path: Path of the resource starting from the path of the module
|
||||||
|
"""
|
||||||
|
|
||||||
|
new_path = Path(str(pkgfiles(module)))
|
||||||
|
return new_path.joinpath(path.lstrip("/")) if path is not None else new_path
|
||||||
|
|
||||||
|
|
||||||
def get_top_domain(domain: str) -> str:
|
def get_top_domain(domain: str) -> str:
|
||||||
'''
|
'''
|
||||||
Get the main domain from a string. The top-level domain list is cached as
|
Get the main domain from a string. The top-level domain list is cached as
|
||||||
|
|
|
@ -17,6 +17,7 @@ Functions
|
||||||
.. autodecorator:: blib.deprecated
|
.. autodecorator:: blib.deprecated
|
||||||
.. autofunction:: blib.get_object_name
|
.. autofunction:: blib.get_object_name
|
||||||
.. autofunction:: blib.get_object_properties
|
.. autofunction:: blib.get_object_properties
|
||||||
|
.. autofunction:: blib.get_resource_path
|
||||||
.. autofunction:: blib.get_top_domain
|
.. autofunction:: blib.get_top_domain
|
||||||
.. autofunction:: blib.http_request
|
.. autofunction:: blib.http_request
|
||||||
.. autofunction:: blib.is_loop_running
|
.. autofunction:: blib.is_loop_running
|
||||||
|
|
Loading…
Reference in a new issue