Skip to main content

Keep your Python modules (and packages, and any other namespaces) clean and tidy!

Project description

Module Hygiene

Simple tools to help with Python namespace hygiene!

Description

This is an opinionated project! I prefer Python modules to only include what's necessary for users. If I'm in an IDE and type from module import <TAB>, I want only API-level elements to be available! Many Python projects use a leading underscore to specify private-like objects and modules. Still, it's sometimes nice to keep things simple without multiple _module definitions in a package.

This package is my solution! It currently provides a single function, cleanup, which returns code to delete all locals which are not in a provided "export list".

Usage

See the example usage below. Note that we need to import T to add a proper typed signature for the function square. Unfortunately, this means that T is also available to anyone who imports this module.

By default, cleanup assumes the name of the module's export list is '__export__'. If you want to choose a different export list name, pass that name as a str to cleanup!

"""module.py

A python module which exports a single function, `square`.
"""

from hygiene import cleanup
from typing  import T 

__export__ = [
    "square",
]

def square(x: T) -> T:
    """Returns the square of x!"""
    return x ** 2

if __name__ != "__main__":
    cleanup()

This cleanup approach will likely change how you write Python modules. If you need a Python package throughout your module, like numpy, you likely import numpy as np at the top of your module, and use np in various functions throughout the module. If you cleanup at the end of the module, your code will break on execution because np will no longer exist!

If you choose to use cleanup, then you will need to import modules at the function level. Personally, I like this better anyways! Every dependency is right next to where it's used. One major downside of this approach is you need to parse your source code for import statements to track all dependencies.

"""another.py

Another module which exports a single function, `abssqrt`!
"""

from hygiene import cleanup
from typing  import T

# Don't do this!
# from numpy import abs, sqrt

__export_list__ = [
    "abssqrt",
]

def abssqrt(x: T) -> T:
    """Returns the square root of the absolute value of `x`!"""
    from numpy import abs, sqrt
    return sqrt(abs(x))

if __name__ != "__main__":
    cleanup(export = __export_list__)

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

module_hygiene-0.3.4.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

module_hygiene-0.3.4-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file module_hygiene-0.3.4.tar.gz.

File metadata

  • Download URL: module_hygiene-0.3.4.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.9

File hashes

Hashes for module_hygiene-0.3.4.tar.gz
Algorithm Hash digest
SHA256 cfd3582e26f5cfbb2deeffcb4f34e27d5ce34dea18fad785c0cc6b8734bc2cbe
MD5 5d57df63470eb4b65667c29d7c29a639
BLAKE2b-256 5e526db0c4f00ab450524cdfaf2f70a4efdf36078f01a1b9e5048d1e820eaf48

See more details on using hashes here.

File details

Details for the file module_hygiene-0.3.4-py3-none-any.whl.

File metadata

File hashes

Hashes for module_hygiene-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f655d775ffea74a06c00205c07bdff02dae903081e8192bf5c11288ae5ac7dc7
MD5 fac3b9b53707f99315ecb32a79c88cb2
BLAKE2b-256 270bba7b3491998a5a10068a8078e0703b1ff7f65b5465a0d8a3cf63343e23fc

See more details on using hashes here.

Supported by

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