https://github.com/withprecedent/camina
Flexible, lightweight, extensible, easy-to-use data structures for Python
https://github.com/withprecedent/camina
data-structures dictionary list mapping python sequence
Last synced: about 1 year ago
JSON representation
Flexible, lightweight, extensible, easy-to-use data structures for Python
- Host: GitHub
- URL: https://github.com/withprecedent/camina
- Owner: WithPrecedent
- License: other
- Created: 2022-11-17T18:56:55.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-09-29T16:42:43.000Z (over 2 years ago)
- Last Synced: 2025-02-16T06:19:27.519Z (about 1 year ago)
- Topics: data-structures, dictionary, list, mapping, python, sequence
- Language: Python
- Homepage:
- Size: 1020 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# camina
| | |
| --- | --- |
| Version | [](https://pypi.org/project/camina/) [](https://github.com/WithPrecedent/camina/releases)
| Status | [](https://github.com/WithPrecedent/camina/actions/workflows/ci.yml?query=branch%3Amain) [](https://www.repostatus.org/#active) [](https://pypi.org/project/camina/)
| Documentation | [](https://WithPrecedent.github.io/camina)
| Tools | [](https://squidfunk.github.io/mkdocs-material/) [](https://github.com/astral-sh/Ruff) [](https://PDM.fming.dev) [](https://github.com/TezRomacH/python-package-template/blob/master/.pre-commit-config.yaml) [](https://github.com/features/actions) [](https://editorconfig.org/) [](https://www.github.com/WithPrecedent/camina) [](https://github.com/dependabot)
| Compatibility | [](https://pypi.python.org/pypi/camina/) [](https://www.linux.org/) [](https://www.apple.com/macos/) [](https://www.microsoft.com/en-us/windows?r=1)
| Stats | [](https://pypi.org/project/camina) [](https://github.com/WithPrecedent/camina/stargazers) [](https://github.com/WithPrecedent/camina/graphs/contributors) [](https://github.com/WithPrecedent/camina/graphs/contributors) [](https://github.com/WithPrecedent/camina/forks)
| | |
-----
## What is camina?
*"Truth is truth. How you deal with it is up to you."* - Captain Camina Drummer
This package adds functionality to core Python container classes and provides functions for common tasks.
## Why use camina?
## Mappings
* `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`.
* `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.
* `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.
### Sequences
* `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`.
* `Hybrid`: iterable with both dict and list interfaces. Stored items must be hashable or have a `name` attribute.
### Passthrough
* `Proxy`: transparently wraps an object and directs access methods to access the wrapped object when appropriate (under construction for edge cases).
### Converters
* `instancify`: converts a class to an instance or adds kwargs to a passed instance as attributes.
* `listify`: converts passed item to a list.
* `namify`: returns hashable name for passed item.
* `numify`: attempts to convert passed item to a numerical type.
* `pathlibify`: converts a str to a pathlib object or leaves it as a pathlib object.
* `stringify`:
* `tuplify`: converts a passed item to a tuple.
* `typify`: converts a str type to other common types, if possible.
* `windowify`:
* `to_dict`:
* `to_index`:
* `str_to_index`:
* `to_int`:
* `str_to_int`:
* `float_to_int`:
* `to_list`:
* `str_to_list`:
* `to_float`:
* `int_to_float`:
* `str_to_float`:
* `to_path`:
* `str_to_path`:
* `to_str`:
* `int_to_str`:
* `float_to_str`:
* `list_to_str`:
* `none_to_str`:
* `path_to_str`:
* `datetime_to_str`:
### Modifiers
* Adders:
* `add_prefix`: adds a str prefix to item.
* `add_slots`: adds `__slots__` to a dataclass.
* `add_suffix`: adds a str suffix to item.
* Dividers:
* `cleave`: divides an item into 2 parts based on `divider` argument.
* `separate`: divides an item into n+1 parts based on `divider` argument.
* Subtractors:
* `deduplicate`: removes duplicate data from an item.
* `drop_dunders`: drops strings from a list if they start and end with double underscores.
* `drop_prefix`: removes a str prefix from an item.
* `drop_prefix_from_dict`
* `drop_prefix_from_list`
* `drop_prefix_from_set`
* `drop_prefix_from_str`
* `drop_prefix_from_tuple`
* `drop_privates`
* `drop_substring`: removes a substring from an item.
* `drop_suffix`: removes a str suffix from an item.
* `drop_suffix_from_dict`
* `drop_suffix_from_list`
* `drop_suffix_from_set`
* `drop_suffix_from_str`
* `drop_suffix_from_tuple`
* Other:
* `capitalify`: converts a snake case str to capital case.
* `snakify`: converts a capital case str to snake case.
* `uniquify`: returns a unique key for a dict.
## Getting started
### Requirements
[TODO: List any OS or other restrictions and pre-installation dependencies]
### Installation
To install `camina`, use `pip`:
```sh
pip install camina
```
### Usage
[TODO: Describe common use cases, with possible example(s)]
## Contributing
Contributors 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).
## Similar Projects
[TODO: If they exist, it is always nice to acknowledge other similar efforts]
## Acknowledgments
[TODO: Mention any people or organizations that warrant a special acknowledgment]
## License
Use of this repository is authorized under the [Apache Software License 2.0](https://www.github.com/WithPrecedent/camina/blog/main/LICENSE).