Skip to main content

Democritus Python

PyPI CI Lint codecov The Democritus Project uses semver version 2.0.0 The Democritus Project uses ruff to format and lint code License: LGPL v3

Democritus functions[1] for working with Python data (code and ASTs).

[1] Democritus functions are simple, effective, modular, well-tested, and well-documented Python functions.

We use d8s (pronounced "dee-eights") as an abbreviation for democritus (you can read more about this here).

Installation

pip install d8s-python

Usage

You import the library like:

from d8s_python import *

Once imported, you can use any of the functions listed below.

Functions

  • def python_functions_signatures(
        code_text: str,
        *,
        ignore_private_functions: bool = False,
        ignore_nested_functions: bool = False,
        keep_function_name: bool = False,
    ) -> List[str]:
        """Return the function signatures for all of the functions in the given code_text."""
    
  • def python_todos(code_text: str, todo_regex: str = 'TODO:.*') -> List[str]:
        """Return all todos in the given code_text that match the given todo_regex."""
    
  • def python_make_pythonic(name: str) -> str:
        """Make the name pythonic.
    
    (e.g. 'fooBar' => 'foo_bar', 'foo-bar' => 'foo_bar', 'foo bar' => 'foo_bar', 'Foo Bar' => 'foo_bar')."""
    
  • def python_namespace_has_argument(namespace: argparse.Namespace, argument_name: str) -> bool:
        """."""
    
  • def python_traceback_prettify(traceback: str) -> str:
        """Return a string with the given traceback pretty-printed."""
    
  • def python_traceback_pretty_print(traceback: str) -> None:
        """Return a string with the given traceback pretty-printed."""
    
  • def python_clean(code_text: str) -> str:
        """Clean python code as it is often found in documentation and snippets."""
    
  • def python_function_blocks(
        code_text: str, *, ignore_private_functions: bool = False, ignore_nested_functions: bool = False
    ) -> List[str]:
        """Find the code (as a string) for every function in the given code_text."""
    
  • def python_line_count(python_code: str, *, ignore_empty_lines: bool = True) -> int:
        """Return the number of lines in the given function_text."""
    
  • def python_function_lengths(code_text: str) -> List[int]:
        """Find the lengths of each function in the given code_text."""
    
  • def python_version() -> str:
        """Return the python version of the current environment."""
    
  • def python_is_version_2() -> bool:
        """Return whether or not the python version of the current environment is v2.x."""
    
  • def python_is_version_3() -> bool:
        """Return whether or not the python version of the current environment is v3.x."""
    
  • def python_files_using_function(function_name: str, search_path: str) -> List[str]:
        """Find where the given function is used in the given search path."""
    
  • def python_keywords() -> List[str]:
        """Get a list of the python keywords."""
    
  • def python_object_properties_enumerate(
        python_object: Any, *, run_methods: bool = True, internal_properties: bool = True
    ) -> None:
        """Enumerate and print out the properties of the given object."""
    
  • def python_copy_deep(python_object: Any) -> Any:
        """Return a deep (complete, recursive) copy of the given python object."""
    
  • def python_copy_shallow(python_object: Any) -> Any:
        """Return shallow copy of the given python object."""
    
  • def python_file_names(path: str, *, exclude_tests: bool = False) -> List[str]:
        """Find all python files in the given directory."""
    
  • def python_fstrings(code_text: str, *, include_braces: bool = False) -> Iterator[str]:
        """Find all of the python formatted string literals in the given text. See https://realpython.com/python-f-strings/ for more details about f-strings."""
    
  • def python_code_details(code_text: str):
        """Get details about the given code_text. This is a wrapper for `dis.code_info`"""
    
  • def python_disassemble(code_text: str):
        """Disassemble the python code_text. This is a wrapper for `dis.dis`"""
    
  • def python_stack_local_data():
        """Get local data in the current python environment."""
    
  • def python_object_doc_string(python_object: Any) -> Union[str, None]:
        """Get the doc string for the given python object (e.g. module, function, or class)."""
    
  • def python_object_source_file(python_object: Any) -> str:
        """Get the source file for the given python object (e.g. module, function, or class)."""
    
  • def python_object_module(python_object: Any) -> str:
        """Get the module for the given python object (e.g. function or class)."""
    
  • def python_object_source_code(python_object: Any) -> str:
        """Get the source code for the given python object (e.g. module, function, or class)."""
    
  • def python_object_signature(python_object: Any) -> str:
        """Get the argument signature for the given python object (e.g. module, function, or class)."""
    
  • def python_sort_type_list_by_name(python_type_list: List[type], **kwargs) -> List[type]:
        """."""
    
  • def python_type_name(python_type: type) -> str:
        """Return the common name of the given type."""
    
  • def python_object_type_to_word(python_object: Any) -> str:
        """Convert the given python type to a string."""
    
  • def python_ast_raise_name(node: ast.Raise) -> Optional[str]:
        """Get the name of the exception raise by the given ast.Raise object."""
    
  • def python_ast_exception_handler_exceptions_handled(handler: ast.ExceptHandler) -> Optional[Iterable[str]]:
        """Return all of the exceptions handled by the given exception handler."""
    
  • def python_ast_exception_handler_exceptions_raised(handler: ast.ExceptHandler) -> Optional[Iterable[str]]:
        """Return the exception raised by the given exception handler."""
    
  • def python_exceptions_handled(code_text: str) -> Iterable[str]:
        """Return a list of all exceptions handled in the given code."""
    
  • def python_exceptions_raised(code_text: str) -> Iterable[str]:
        """Return a list of all exceptions raised in the given code."""
    
  • def python_functions_as_import_string(code_text: str, module_name: str) -> str:
        """."""
    
  • def python_ast_object_line_number(ast_object: object) -> Optional[int]:
        """."""
    
  • def python_ast_object_line_numbers(ast_object: object) -> Tuple[int, int]:
        """."""
    
  • def python_ast_objects_of_type(
        code_text_or_ast_object: Union[str, object], ast_type: type, *, recursive_search: bool = True
    ) -> Iterable[object]:
        """Return all of the ast objects of the given ast_type in the code_text_or_ast_object."""
    
  • def python_ast_objects_not_of_type(code_text_or_ast_object: Union[str, object], ast_type: type) -> Iterable[object]:
        """Return all of the ast objects which are not of the given ast_type in the code_text_or_ast_object."""
    
  • def python_ast_parse(code_text: str) -> ast.Module:
        """."""
    
  • def python_ast_function_defs(code_text: str, recursive_search: bool = True) -> Iterable[ast.FunctionDef]:
        """."""
    
  • def python_function_arguments(function_text: str) -> List[ast.arg]:
        """."""
    
  • def python_function_argument_names(function_text: str) -> Iterable[str]:
        """."""
    
  • def python_function_argument_defaults(function_text: str) -> List[str]:
        """."""
    
  • def python_function_argument_annotations(function_text: str) -> List[str]:
        """."""
    
  • def python_function_names(
        code_text: str, *, ignore_private_functions: bool = False, ignore_nested_functions: bool = False
    ) -> List[str]:
        """."""
    
  • def python_function_docstrings(
        code_text: str, *, ignore_private_functions: bool = False, ignore_nested_functions: bool = False
    ) -> List[str]:
        """Get docstrings for all of the functions in the given text."""
    
  • def python_variable_names(code_text: str) -> List[str]:
        """Get all of the variables names in the code_text."""
    
  • def python_constants(code_text: str) -> List[str]:
        """Get all constants in the code_text."""
    

Development

👋  If you want to get involved in this project, we have some short, helpful guides below:

If you have any questions or there is anything we did not cover, please raise an issue and we'll be happy to help.

Credits

This package was created with Cookiecutter and Floyd Hightower's Python project template.

Metadata

Release files for d8s-python 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for d8s-python 0.10.0
File Size Uploaded Provenance Actions
d8s_python-0.10.0.tar.gz 102.2 kB With provenance Details for d8s_python-0.10.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for d8s-python 0.10.0
File Interpreter ABI Platform Actions
d8s_python-0.10.0-py3-none-any.whl Python 3 none any Details for d8s_python-0.10.0-py3-none-any.whl

Total release size: 128.2 kB

Release files / d8s_python-0.10.0.tar.gz

Download URL d8s_python-0.10.0.tar.gz
Size 102.2 kB
Tags Source
SHA-256 checksum
How to use checksums
135c6b9d5b62a66604ffef4ab58a68b4490a6bd4c58ae42ac4edcd4f1d426882
BLAKE2b-256 checksum
How to use checksums
020246f439fca46fd2998770d17803a40dd847ef498b2422a2518804a7262179
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 1, 2026.

Transparency log

Release files / d8s_python-0.10.0-py3-none-any.whl

Download URL d8s_python-0.10.0-py3-none-any.whl
Size 26.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
99e3edbebacbd1f4d46a43039b732a65e5ed8cdb0640248e9387a1f039d0e1f3
BLAKE2b-256 checksum
How to use checksums
be9a925f9bd876c03c281271de131f360ae9aabd97823d2071012bd3aca9304c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 1, 2026.

Transparency log

Security for d8s-python 0.10.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for d8s_python-0.10.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.10.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page