Docs: dynamic-graphics-inc.github.io/dgpy-libs
Repo: github.com/dynamic-graphics-inc/dgpy-libs
Dynamic Graphics python libraries, home of:
- Callable modules and packages
- Recursive list/gen comprehensions
- Nutty decorators
- Secret agent JSON Bourne
- The best package names around
- Notebooks with funky python
- Dynamic imports
libs
├── aiopen
├── asyncify
├── dgpylibs
├── dgpytest
├── fmts
├── funkify
├── h5
├── jsonbourne
├── lager
├── listless
├── requires
├── shellfish
└── xtyping
Install: pip install aiopen asyncify fmts funkify h5 jsonbourne lager listless requires shellfish xtyping
aiopen ~ pip install aiopen
~
![py_versions](https://camo.githubusercontent.com/52cb47a17de6e7a45f757f452e1759d3be419827409543d505f9ea11d649f16c/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f61696f70656e2e737667)
asyncify ~ pip install asyncify
~
![py_versions](https://camo.githubusercontent.com/2528c8f9d5c6d25ebc9a946a4296fa219e0eeb66fad2516f1f07f6d117167912/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f6173796e636966792e737667)
dgpylibs ~ pip install dgpylibs
~
![py_versions](https://camo.githubusercontent.com/7ab6a2a0347ad43f9fd6f8ecb3d5167695dae06ff613a97d632990c605f0eeb2/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f646770796c6962732e737667)
dgpytest ~ pip install dgpytest
~
![py_versions](https://camo.githubusercontent.com/6219aaab86a433bc54a8df6211dbd444e703f096e676a96ff832d50da68e6584/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f64677079746573742e737667)
fmts ~ pip install fmts
~
![py_versions](https://camo.githubusercontent.com/6f638f07ce35a035e619d5a2c9d012bc287f4a48aaf41686e69385d3c0d006c6/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f666d74732e737667)
funkify ~ pip install funkify
~
![py_versions](https://camo.githubusercontent.com/11b05909b85bba9b756b7634a888dce475fe6ea575606d36d6ed72948f6a2e6a/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f66756e6b6966792e737667)
h5 ~ pip install h5
~
![py_versions](https://camo.githubusercontent.com/87f3044031b4835df8662b87bba1aa3e4d0836a1e895191325192602cd9dc581/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f68352e737667)
jsonbourne ~ pip install jsonbourne
~
![py_versions](https://camo.githubusercontent.com/9bdf56a36d2758cc6c3a85629fa854f8c4dc5dd24d84ca812b3a36f8bf05ceda/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f6a736f6e626f75726e652e737667)
lager ~ pip install lager
~
![py_versions](https://camo.githubusercontent.com/d3a51f41fc9e9eb94da4f5389e9c56050b5303d330f861cd867a5a773ba9826c/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f6c616765722e737667)
listless ~ pip install listless
~
![py_versions](https://camo.githubusercontent.com/e2906368f3f2c81741be92c4892ddd6feb052336a50439f060f3f4e2ed626c51/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f6c6973746c6573732e737667)
requires ~ pip install requires
~
![py_versions](https://camo.githubusercontent.com/e3d5c50056eb52f5b23945b582f6d41bec4b49a0e2270d1eb317bc30e17eb268/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f72657175697265732e737667)
shellfish ~ pip install shellfish
~
![py_versions](https://camo.githubusercontent.com/ce5f234766d51a9a0edc0ed0a056c57a0d0f63c1c22260c1f8be0d0b932dc902/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f7368656c6c666973682e737667)
xtyping ~ pip install xtyping
~
![py_versions](https://camo.githubusercontent.com/3926e4d4ca5126def7216535856b2666f6423cc012ec1ff9d62b127881e3d6db/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f78747970696e672e737667)
This repo (dgpy-libs) are the polished gems formed under intense pressure below the offices of Dynamic Graphics Inc. These pure-python libraries are all published on pip under the listed names.
- dgpy-libs must have excellent names and be published on pip
- Embrace
async/await
- Python 3.6 'n up, baby! (May move to 3.7 for
__future___.annotations
... tbd) - Use type annotations everywhere
- No dead or commented out code
- Prefer pure-python & compiled-3rd-party-libs over writing packages with compiled extensions
- Use optional compiled-3rd-party-libs as optional dependencies to sneakily speed things up if present
- Offer integrations with the super-hot-fire modern python packages all the kids are using
- Optional dependencies are good! Missing optional deps should trigger an error msg that is helpful to installing the relevant dependency ONLY IF THE DEPENDENCY IS NEEDED.
- Test coverage is usually a dumb metric and 100% test coverage
!=
bug-free code (tests of dgpy-libs are slowly being migrated from internal/private repos to this repo)
- pydantic; best python lib you will ever use
- loguru; base of lager
- httpx ; don't use requests
- attrs; pydantic alternative
- poetry; best dep management python has to offer
- orjson; fastest python json lib (opt dep of jsonbourne)
- rapidjson/python-rapidjson; best mostly drop-in replacement for python's json module
- h5py; base of h5
- rich; best python console formatting lib
- nox; like tox but less maddening
notebooks/
├── cache_money.ipynb
├── filter_none.ipynb
├── json_parsing.ipynb
└── string_fmt.ipynb
- Filtering None and False-y values
- cache money!
functools.lru_cache
- String formatting funks
- JSON parsing vs plain-jane dictionaries
- Jesse Rubin ~
[email protected]
/[email protected]
- Dan Costello ~
[email protected]
/[email protected]
- Possibly you!?
Plz do! Send me that PR!
- Have CI/CD auto build n publish
- Changelog (for real)
- Figure out why the combine-prs workflow doesn't trigger github actions...
- Update mkdocs to include all dgpy-libs