Skip to main content

deal with object reference notations

Project description

objectref

objectref is a library to parse object references and find referenced objects.

Notations

Object references are notations to locate modules or objects from the top level of a module.

package.module
package.module:object.attr

The first form simply refers a module, while the second form an object in module. It is also described in here.

This library also supports relative object references (prefixed with dots).

Usage

  • find(ref: str, package: str | None = None) -> Any

    The find function takes an object reference or parse() result, and returns the object pointed by the reference.

    The package argument must be set when the reference is relative.

    If qualified name is unspecified (the first form), the result is a module (types.ModuleType instance).

    ModuleNotFoundError is raised if the module cannot be found nor imported; LookupError if the object is not accessible from the top level of the module.

  • parse(ref: str) -> tuple[str, str | None]

    The parse function takes an object reference, and results in a tuple of module name and qualified name. The qualified name would be None in first form.

    ValueError is raised if the reference is invalid.

Example

import os.path

import objectref

print(objectref.find("os.path") == os.path)  # True
print(objectref.find("os.path:join") == os.path.join)  # True
print(objectref.parse("os.path"))  # ("os.path", None)
print(objectref.parse("os.path:join"))  # ("os.path", "join")

Entrypoint example

There are two main ways to execute a Python program.

  • Run python -m myapp.main in shells, which executes the module as __main__ under the hood. This relates to the first form of notation.

  • Run myapp installed by pip. It is generated according to entrypoint defined in the project metadata (e.g. myapp = myapp.main:main). This requires the second form notation with callable objects.

Here is a code snippet to unify these two ways and start a program by its object reference.

import objectref


def run(ref: str, package: str | None = None):
    modname, qualname = objectref.parse(ref)

    if qualname is None:
        # Use runpy to run a module with __name__ = "__main__"
        if modname.startswith("."):
            # runpy does not support relative module name.
            from importlib.util import resolve_name
            modname = resolve_name(modname, package)
        import runpy
        return runpy.run_module(modname, run_name="__main__")

    fn = objectref.find((modname, qualname), package)
    return fn()


if __name__ == "__main__":
    run("this")  # run the "this" module dynamically.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

objectref-2023.10.31.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

objectref-2023.10.31-py3-none-any.whl (4.4 kB view details)

Uploaded Python 3

File details

Details for the file objectref-2023.10.31.tar.gz.

File metadata

  • Download URL: objectref-2023.10.31.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for objectref-2023.10.31.tar.gz
Algorithm Hash digest
SHA256 9fdd7487ab58c98160ad25978f41d2bec9acbc8bd7c39871e0c01785661401f5
MD5 16979c9b81dcd96e33de5f9e310beadb
BLAKE2b-256 44cfe30f6dce72122cb00e9d20ece2b798f42a98aa56b516050bd2957ae02cff

See more details on using hashes here.

File details

Details for the file objectref-2023.10.31-py3-none-any.whl.

File metadata

File hashes

Hashes for objectref-2023.10.31-py3-none-any.whl
Algorithm Hash digest
SHA256 03c1df453a4cf349c3ac4862f4ec65788efecd0814ac20c65f11dde361595aa8
MD5 e141a6682664023bee61bbc83f30700a
BLAKE2b-256 aaef005617e34ec167d841a838c0b5b047c19ab56f843522fa83ae606ff6af5b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page