The Pockets library pulls together many of the Python helper functions I've found useful over the years.
If you've worked on a project that exports an API and accesses a data store, you've probably seen some code that looks like this:
# Receive a data type with underscores from some API
data_type = 'user_preference'
# Convert underscored data type to CamelCase to match the data model
model_name = camel(data_type)
# Resolve the model name into a model class
model_class = resolve(model_name, modules=["webapp.model.admin",
"webapp.model.user",
"webapp.model.businesslogic"]
# Instantiate the model class and do stuff with the instance...
instance = model_class()
There's an impedance mismatch any time you work with two different frameworks; especially when you want to update your back-end while maintaining legacy compatibility with an external API.
Pockets is full of highly tested, well maintained functions that help bridge the gap. Here are just a few examples...
>>> from pockets.autolog import log
>>> log.error("Always log from the correct module.Class!")
mymodule.MyClass: Always log from the correct module.Class!
>>> from pockets import camel
>>> camel("xml_http_request", upper_segments=[1])
'XmlHTTPRequest'
>>> from pockets import uncamel
>>> uncamel("XmlHTTPRequest")
'xml_http_request'
>>> from pockets import resolve
>>> resolve("calendar.TextCalendar")
<class 'calendar.TextCalendar'>
>>> from pockets import iterpeek
>>> p = iterpeek(["a", "b", "c", "d", "e"])
>>> p.peek()
'a'
>>> p.next()
'a'
>>> p.peek(3)
['b', 'c', 'd']
Full documentation is available on Read the Docs.
Built packages are available on PyPI.
Source code is available on GitHub. Feel free to:
- Create an issue to request a feature or a report a bug.
- Fork the repository and make changes to the master branch for next release.
- Send a pull request and pester the maintainer until it's merged. Make sure to add yourself to AUTHORS and update CHANGES.