{"id":20466027,"url":"https://github.com/withprecedent/camina","last_synced_at":"2026-05-27T20:32:04.732Z","repository":{"id":63372976,"uuid":"567422037","full_name":"WithPrecedent/camina","owner":"WithPrecedent","description":"Flexible, lightweight, extensible, easy-to-use data structures for Python","archived":false,"fork":false,"pushed_at":"2023-09-29T16:42:43.000Z","size":1046,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-16T06:19:27.519Z","etag":null,"topics":["data-structures","dictionary","list","mapping","python","sequence"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WithPrecedent.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-17T18:56:55.000Z","updated_at":"2023-03-24T02:50:56.000Z","dependencies_parsed_at":"2023-02-02T20:16:45.393Z","dependency_job_id":"c23b9100-03f0-43f1-818c-ba6e4954264d","html_url":"https://github.com/WithPrecedent/camina","commit_stats":{"total_commits":11,"total_committers":1,"mean_commits":11.0,"dds":0.0,"last_synced_commit":"da424754e2193eb3c8887eedfe0b1a0953ea665c"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WithPrecedent%2Fcamina","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WithPrecedent%2Fcamina/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WithPrecedent%2Fcamina/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WithPrecedent%2Fcamina/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WithPrecedent","download_url":"https://codeload.github.com/WithPrecedent/camina/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242027456,"owners_count":20060100,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-structures","dictionary","list","mapping","python","sequence"],"created_at":"2024-11-15T13:21:07.756Z","updated_at":"2026-05-27T20:32:04.703Z","avatar_url":"https://github.com/WithPrecedent.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# camina\n\n| | |\n| --- | --- |\n| Version | [![PyPI Latest Release](https://img.shields.io/pypi/v/camina.svg?style=for-the-badge\u0026color=steelblue\u0026label=PyPI\u0026logo=PyPI\u0026logoColor=yellow)](https://pypi.org/project/camina/) [![GitHub Latest Release](https://img.shields.io/github/v/tag/WithPrecedent/camina?style=for-the-badge\u0026color=navy\u0026label=GitHub\u0026logo=github)](https://github.com/WithPrecedent/camina/releases)\n| Status | [![Build Status](https://img.shields.io/github/actions/workflow/status/WithPrecedent/camina/ci.yml?branch=main\u0026style=for-the-badge\u0026color=cadetblue\u0026label=Tests\u0026logo=pytest)](https://github.com/WithPrecedent/camina/actions/workflows/ci.yml?query=branch%3Amain) [![Development Status](https://img.shields.io/badge/Development-Active-seagreen?style=for-the-badge\u0026logo=git)](https://www.repostatus.org/#active) [![Project Stability](https://img.shields.io/pypi/status/camina?style=for-the-badge\u0026logo=pypi\u0026label=Stability\u0026logoColor=yellow)](https://pypi.org/project/camina/)\n| Documentation | [![Hosted By](https://img.shields.io/badge/Hosted_by-Github_Pages-blue?style=for-the-badge\u0026color=navy\u0026logo=github)](https://WithPrecedent.github.io/camina)\n| Tools | [![Documentation](https://img.shields.io/badge/MkDocs-magenta?style=for-the-badge\u0026color=deepskyblue\u0026logo=markdown\u0026labelColor=gray)](https://squidfunk.github.io/mkdocs-material/) [![Linter](https://img.shields.io/endpoint?style=for-the-badge\u0026url=https://raw.githubusercontent.com/charliermarsh/Ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/Ruff) [![Dependency Manager](https://img.shields.io/badge/PDM-mediumpurple?style=for-the-badge\u0026logo=affinity\u0026labelColor=gray)](https://PDM.fming.dev) [![Pre-commit](https://img.shields.io/badge/pre--commit-darkolivegreen?style=for-the-badge\u0026logo=pre-commit\u0026logoColor=white\u0026labelColor=gray)](https://github.com/TezRomacH/python-package-template/blob/master/.pre-commit-config.yaml) [![CI](https://img.shields.io/badge/GitHub_Actions-navy?style=for-the-badge\u0026logo=githubactions\u0026labelColor=gray\u0026logoColor=white)](https://github.com/features/actions) [![Editor Settings](https://img.shields.io/badge/Editor_Config-paleturquoise?style=for-the-badge\u0026logo=editorconfig\u0026labelColor=gray)](https://editorconfig.org/) [![Repository Template](https://img.shields.io/badge/snickerdoodle-bisque?style=for-the-badge\u0026logo=cookiecutter\u0026labelColor=gray)](https://www.github.com/WithPrecedent/camina) [![Dependency Maintainer](https://img.shields.io/badge/dependabot-navy?style=for-the-badge\u0026logo=dependabot\u0026logoColor=white\u0026labelColor=gray)](https://github.com/dependabot)\n| Compatibility | [![Compatible Python Versions](https://img.shields.io/pypi/pyversions/camina?style=for-the-badge\u0026color=steelblue\u0026label=Python\u0026logo=python\u0026logoColor=yellow)](https://pypi.python.org/pypi/camina/) [![Linux](https://img.shields.io/badge/Linux-lightseagreen?style=for-the-badge\u0026logo=linux\u0026labelColor=gray\u0026logoColor=white)](https://www.linux.org/) [![MacOS](https://img.shields.io/badge/MacOS-snow?style=for-the-badge\u0026logo=apple\u0026labelColor=gray)](https://www.apple.com/macos/) [![Windows](https://img.shields.io/badge/windows-blue?style=for-the-badge\u0026logo=Windows\u0026labelColor=gray\u0026color=orangered)](https://www.microsoft.com/en-us/windows?r=1)\n| Stats | [![PyPI Download Rate (per month)](https://img.shields.io/pypi/dm/camina?style=for-the-badge\u0026color=steelblue\u0026label=Downloads%20💾\u0026logo=pypi\u0026logoColor=yellow)](https://pypi.org/project/camina) [![GitHub Stars](https://img.shields.io/github/stars/WithPrecedent/camina?style=for-the-badge\u0026color=navy\u0026label=Stars%20⭐\u0026logo=github)](https://github.com/WithPrecedent/camina/stargazers) [![GitHub Contributors](https://img.shields.io/github/contributors/WithPrecedent/camina?style=for-the-badge\u0026color=navy\u0026label=Contributors%20🙋\u0026logo=github)](https://github.com/WithPrecedent/camina/graphs/contributors) [![GitHub Issues](https://img.shields.io/github/issues/WithPrecedent/camina?style=for-the-badge\u0026color=navy\u0026label=Issues%20📘\u0026logo=github)](https://github.com/WithPrecedent/camina/graphs/contributors) [![GitHub Forks](https://img.shields.io/github/forks/WithPrecedent/camina?style=for-the-badge\u0026color=navy\u0026label=Forks%20🍴\u0026logo=github)](https://github.com/WithPrecedent/camina/forks)\n| | |\n\n-----\n\n## What is camina?\n\n*\"Truth is truth. How you deal with it is up to you.\"* - Captain Camina Drummer\n\nThis package adds functionality to core Python container classes and provides functions for common tasks.\n\n## Why use camina?\n\n## Mappings\n\n* `Dictionary`: drop-in replacement for a python dict with an `add` method for a default mechanism of adding data, a `delete` method for a default mechanism of deleting data, and a `subset` method for returning a subset of the key/value pairs in a new `Dictionary`.\n* `Catalog`: wildcard-accepting dict which is intended for storing different options and strategies. It also returns lists of matches if a list of keys is provided.\n* `Library`: a dictionary that automatically supplies key names for stored items. The 'overwrite' argument determines if a unique key should always be created or whether entries may be overwritten.\n\n### Sequences\n\n* `Listing`: drop-in replacement for a python list with an `add` method for a default mechanism of adding data, a `delete` method for a default mechanism of deleting data, and a `subset` method for returning a subset of the key/value pairs in a new `Listing`.\n* `Hybrid`: iterable with both dict and list interfaces. Stored items must be hashable or have a `name` attribute.\n\n### Passthrough\n\n* `Proxy`: transparently wraps an object and directs access methods to access the wrapped object when appropriate (under construction for edge cases).\n\n### Converters\n\n* `instancify`: converts a class to an instance or adds kwargs to a passed instance as attributes.\n* `listify`: converts passed item to a list.\n* `namify`: returns hashable name for passed item.\n* `numify`: attempts to convert passed item to a numerical type.\n* `pathlibify`: converts a str to a pathlib object or leaves it as a pathlib object.\n* `stringify`:\n* `tuplify`: converts a passed item to a tuple.\n* `typify`: converts a str type to other common types, if possible.\n* `windowify`:\n* `to_dict`:\n* `to_index`:\n* `str_to_index`:\n* `to_int`:\n* `str_to_int`:\n* `float_to_int`:\n* `to_list`:\n* `str_to_list`:\n* `to_float`:\n* `int_to_float`:\n* `str_to_float`:\n* `to_path`:\n* `str_to_path`:\n* `to_str`:\n* `int_to_str`:\n* `float_to_str`:\n* `list_to_str`:\n* `none_to_str`:\n* `path_to_str`:\n* `datetime_to_str`:\n\n### Modifiers\n\n* Adders:\n  * `add_prefix`: adds a str prefix to item.\n  * `add_slots`: adds `__slots__` to a dataclass.\n  * `add_suffix`: adds a str suffix to item.\n* Dividers:\n  * `cleave`: divides an item into 2 parts based on `divider` argument.\n  * `separate`: divides an item into n+1 parts based on `divider` argument.\n* Subtractors:\n  * `deduplicate`: removes duplicate data from an item.\n  * `drop_dunders`: drops strings from a list if they start and end with double underscores.\n  * `drop_prefix`: removes a str prefix from an item.\n  * `drop_prefix_from_dict`\n  * `drop_prefix_from_list`\n  * `drop_prefix_from_set`\n  * `drop_prefix_from_str`\n  * `drop_prefix_from_tuple`\n  * `drop_privates`\n  * `drop_substring`: removes a substring from an item.\n  * `drop_suffix`: removes a str suffix from an item.\n  * `drop_suffix_from_dict`\n  * `drop_suffix_from_list`\n  * `drop_suffix_from_set`\n  * `drop_suffix_from_str`\n  * `drop_suffix_from_tuple`\n* Other:\n  * `capitalify`: converts a snake case str to capital case.\n  * `snakify`: converts a capital case str to snake case.\n  * `uniquify`: returns a unique key for a dict.\n\n## Getting started\n\n### Requirements\n\n[TODO: List any OS or other restrictions and pre-installation dependencies]\n\n### Installation\n\nTo install `camina`, use `pip`:\n\n```sh\npip install camina\n```\n\n### Usage\n\n[TODO: Describe common use cases, with possible example(s)]\n\n## Contributing\n\nContributors are always welcome. Feel free to grab an [issue](https://www.github.com/WithPrecedent/camina/issues) to work on or make a suggested improvement. If you wish to contribute, please read the [Contribution Guide](https://www.github.com/WithPrecedent/camina/contributing.md) and [Code of Conduct](https://www.github.com/WithPrecedent/camina/code_of_conduct.md).\n\n## Similar Projects\n\n[TODO: If they exist, it is always nice to acknowledge other similar efforts]\n\n## Acknowledgments\n\n[TODO: Mention any people or organizations that warrant a special acknowledgment]\n\n## License\n\nUse of this repository is authorized under the [Apache Software License 2.0](https://www.github.com/WithPrecedent/camina/blog/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwithprecedent%2Fcamina","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwithprecedent%2Fcamina","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwithprecedent%2Fcamina/lists"}