{"id":15020433,"url":"https://github.com/dynamic-graphics-inc/dgpy-libs","last_synced_at":"2025-04-09T10:07:57.836Z","repository":{"id":38240188,"uuid":"267936342","full_name":"dynamic-graphics-inc/dgpy-libs","owner":"dynamic-graphics-inc","description":"Dynamic Graphics Python libraries/modules","archived":false,"fork":false,"pushed_at":"2025-03-27T08:03:33.000Z","size":8097,"stargazers_count":24,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-02T08:11:08.672Z","etag":null,"topics":["dgi","library","monorepo","python3","type-annotations"],"latest_commit_sha":null,"homepage":"https://dgpy.dev/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dynamic-graphics-inc.png","metadata":{"files":{"readme":"README.md","changelog":"changelog/changelog.json","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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":"2020-05-29T19:14:56.000Z","updated_at":"2025-03-12T23:10:23.000Z","dependencies_parsed_at":"2023-02-17T13:30:53.139Z","dependency_job_id":"363476e1-ca0f-4073-86e3-d093cc98926f","html_url":"https://github.com/dynamic-graphics-inc/dgpy-libs","commit_stats":{"total_commits":1340,"total_committers":7,"mean_commits":"191.42857142857142","dds":"0.47835820895522385","last_synced_commit":"34ec0978b3df2cccdfa84d5485a95c283aaef0ff"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dynamic-graphics-inc%2Fdgpy-libs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dynamic-graphics-inc%2Fdgpy-libs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dynamic-graphics-inc%2Fdgpy-libs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dynamic-graphics-inc%2Fdgpy-libs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dynamic-graphics-inc","download_url":"https://codeload.github.com/dynamic-graphics-inc/dgpy-libs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248018060,"owners_count":21034048,"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":["dgi","library","monorepo","python3","type-annotations"],"created_at":"2024-09-24T19:55:05.048Z","updated_at":"2025-04-09T10:07:57.764Z","avatar_url":"https://github.com/dynamic-graphics-inc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://github.com/dynamic-graphics-inc/dgpy-libs\"\u003e\n\u003cimg align=\"right\" src=\"https://github.com/dynamic-graphics-inc/dgpy-libs/blob/main/docs/images/dgpy_banner.svg?raw=true\" alt=\"drawing\" height=\"120\" width=\"300\"/\u003e\n\u003c/a\u003e\n\n# dgpy-libs\n\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\nDocs: [dynamic-graphics-inc.github.io/dgpy-libs](https://dynamic-graphics-inc.github.io/dgpy-libs/)\n\nRepo: [github.com/dynamic-graphics-inc/dgpy-libs](https://github.com/dynamic-graphics-inc/dgpy-libs)\n\n---\n\nDynamic Graphics python libraries, home of:\n\n- Callable modules and packages\n- Recursive list/gen comprehensions\n- Nutty decorators\n- Secret agent JSON Bourne\n- The best package names around\n- Notebooks with funky python\n- Dynamic imports\n\n## Libs\n\n```\nlibs\n├── aiopen\n├── asyncify\n├── dgpylibs\n├── dgpytest\n├── fmts\n├── funkify\n├── h5\n├── jsonbourne\n├── lager\n├── listless\n├── requires\n├── shellfish\n└── xtyping\n```\n\n**Install:** `pip install aiopen asyncify fmts funkify h5 jsonbourne lager listless requires shellfish xtyping`\n\n### [aiopen](./libs/aiopen) ~ `pip install aiopen` ~ [![Wheel](https://img.shields.io/pypi/wheel/aiopen.svg)](https://img.shields.io/pypi/wheel/aiopen.svg) [![Version](https://img.shields.io/pypi/v/aiopen.svg)](https://img.shields.io/pypi/v/aiopen.svg) [![py_versions](https://img.shields.io/pypi/pyversions/aiopen.svg)](https://img.shields.io/pypi/pyversions/aiopen.svg)\n\n### [asyncify](./libs/asyncify) ~ `pip install asyncify` ~ [![Wheel](https://img.shields.io/pypi/wheel/asyncify.svg)](https://img.shields.io/pypi/wheel/asyncify.svg) [![Version](https://img.shields.io/pypi/v/asyncify.svg)](https://img.shields.io/pypi/v/asyncify.svg) [![py_versions](https://img.shields.io/pypi/pyversions/asyncify.svg)](https://img.shields.io/pypi/pyversions/asyncify.svg)\n\n### [dgpylibs](./libs/dgpylibs) ~ `pip install dgpylibs` ~ [![Wheel](https://img.shields.io/pypi/wheel/dgpylibs.svg)](https://img.shields.io/pypi/wheel/dgpylibs.svg) [![Version](https://img.shields.io/pypi/v/dgpylibs.svg)](https://img.shields.io/pypi/v/dgpylibs.svg) [![py_versions](https://img.shields.io/pypi/pyversions/dgpylibs.svg)](https://img.shields.io/pypi/pyversions/dgpylibs.svg)\n\n### [dgpytest](./libs/dgpytest) ~ `pip install dgpytest` ~ [![Wheel](https://img.shields.io/pypi/wheel/dgpytest.svg)](https://img.shields.io/pypi/wheel/dgpytest.svg) [![Version](https://img.shields.io/pypi/v/dgpytest.svg)](https://img.shields.io/pypi/v/dgpytest.svg) [![py_versions](https://img.shields.io/pypi/pyversions/dgpytest.svg)](https://img.shields.io/pypi/pyversions/dgpytest.svg)\n\n### [fmts](./libs/fmts) ~ `pip install fmts` ~ [![Wheel](https://img.shields.io/pypi/wheel/fmts.svg)](https://img.shields.io/pypi/wheel/fmts.svg) [![Version](https://img.shields.io/pypi/v/fmts.svg)](https://img.shields.io/pypi/v/fmts.svg) [![py_versions](https://img.shields.io/pypi/pyversions/fmts.svg)](https://img.shields.io/pypi/pyversions/fmts.svg)\n\n### [funkify](./libs/funkify) ~ `pip install funkify` ~ [![Wheel](https://img.shields.io/pypi/wheel/funkify.svg)](https://img.shields.io/pypi/wheel/funkify.svg) [![Version](https://img.shields.io/pypi/v/funkify.svg)](https://img.shields.io/pypi/v/funkify.svg) [![py_versions](https://img.shields.io/pypi/pyversions/funkify.svg)](https://img.shields.io/pypi/pyversions/funkify.svg)\n\n### [h5](./libs/h5) ~ `pip install h5` ~ [![Wheel](https://img.shields.io/pypi/wheel/h5.svg)](https://img.shields.io/pypi/wheel/h5.svg) [![Version](https://img.shields.io/pypi/v/h5.svg)](https://img.shields.io/pypi/v/h5.svg) [![py_versions](https://img.shields.io/pypi/pyversions/h5.svg)](https://img.shields.io/pypi/pyversions/h5.svg)\n\n### [jsonbourne](./libs/jsonbourne) ~ `pip install jsonbourne` ~ [![Wheel](https://img.shields.io/pypi/wheel/jsonbourne.svg)](https://img.shields.io/pypi/wheel/jsonbourne.svg) [![Version](https://img.shields.io/pypi/v/jsonbourne.svg)](https://img.shields.io/pypi/v/jsonbourne.svg) [![py_versions](https://img.shields.io/pypi/pyversions/jsonbourne.svg)](https://img.shields.io/pypi/pyversions/jsonbourne.svg)\n\n### [lager](./libs/lager) ~ `pip install lager` ~ [![Wheel](https://img.shields.io/pypi/wheel/lager.svg)](https://img.shields.io/pypi/wheel/lager.svg) [![Version](https://img.shields.io/pypi/v/lager.svg)](https://img.shields.io/pypi/v/lager.svg) [![py_versions](https://img.shields.io/pypi/pyversions/lager.svg)](https://img.shields.io/pypi/pyversions/lager.svg)\n\n### [listless](./libs/listless) ~ `pip install listless` ~ [![Wheel](https://img.shields.io/pypi/wheel/listless.svg)](https://img.shields.io/pypi/wheel/listless.svg) [![Version](https://img.shields.io/pypi/v/listless.svg)](https://img.shields.io/pypi/v/listless.svg) [![py_versions](https://img.shields.io/pypi/pyversions/listless.svg)](https://img.shields.io/pypi/pyversions/listless.svg)\n\n### [requires](./libs/requires) ~ `pip install requires` ~ [![Wheel](https://img.shields.io/pypi/wheel/requires.svg)](https://img.shields.io/pypi/wheel/requires.svg) [![Version](https://img.shields.io/pypi/v/requires.svg)](https://img.shields.io/pypi/v/requires.svg) [![py_versions](https://img.shields.io/pypi/pyversions/requires.svg)](https://img.shields.io/pypi/pyversions/requires.svg)\n\n### [shellfish](./libs/shellfish) ~ `pip install shellfish` ~ [![Wheel](https://img.shields.io/pypi/wheel/shellfish.svg)](https://img.shields.io/pypi/wheel/shellfish.svg) [![Version](https://img.shields.io/pypi/v/shellfish.svg)](https://img.shields.io/pypi/v/shellfish.svg) [![py_versions](https://img.shields.io/pypi/pyversions/shellfish.svg)](https://img.shields.io/pypi/pyversions/shellfish.svg)\n\n### [xtyping](./libs/xtyping) ~ `pip install xtyping` ~ [![Wheel](https://img.shields.io/pypi/wheel/xtyping.svg)](https://img.shields.io/pypi/wheel/xtyping.svg) [![Version](https://img.shields.io/pypi/v/xtyping.svg)](https://img.shields.io/pypi/v/xtyping.svg) [![py_versions](https://img.shields.io/pypi/pyversions/xtyping.svg)](https://img.shields.io/pypi/pyversions/xtyping.svg)\n\n## About\n\nThis repo (dgpy-libs) are the polished gems formed under intense pressure below the offices of [Dynamic Graphics Inc](http://dgi.com/). These pure-python libraries are all published on pip under the listed names.\n\n### Design PhilosoPY\n\n- dgpy-libs must have excellent names and be published on pip\n- Embrace `async/await`\n- Python 3.6 'n up, baby! (May move to 3.7 for `__future___.annotations`... tbd)\n- Use type annotations everywhere\n- No dead or commented out code\n- Prefer pure-python \u0026 compiled-3rd-party-libs over writing packages with compiled extensions\n- Use optional compiled-3rd-party-libs as optional dependencies to sneakily speed things up if present\n- Offer integrations with the super-hot-fire modern python packages all the kids are using\n- 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.\n- 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)\n\n### Third party friends\n\n- [pydantic](https://pydantic-docs.helpmanual.io/); best python lib you will ever use\n- [loguru](https://github.com/Delgan/loguru); base of lager\n- [httpx](https://www.python-httpx.org/) ; don't use requests\n- [attrs](https://github.com/python-attrs/attrs); pydantic alternative\n- [poetry](https://github.com/python-poetry/poetry); best dep management python has to offer\n- [orjson](https://github.com/ijl/orjson); fastest python json lib (opt dep of jsonbourne)\n- [rapidjson/python-rapidjson](https://github.com/python-rapidjson/python-rapidjson); best mostly drop-in replacement for python's json module\n- [h5py](https://github.com/h5py/h5py); base of h5\n- [rich](https://github.com/willmcgugan/rich); best python console formatting lib\n- [nox](https://github.com/theacodes/nox); like tox but less maddening\n\n---\n\n## Notebooks\n\n```\nnotebooks/\n├── cache_money.ipynb\n├── filter_none.ipynb\n├── json_parsing.ipynb\n└── string_fmt.ipynb\n```\n\n- [Filtering None and False-y values](./notebooks/filter_none)\n- [cache money! `functools.lru_cache`](./notebooks/cache_money)\n- [String formatting funks](./notebooks/string_fmt)\n- [JSON parsing vs plain-jane dictionaries](./notebooks/json_parsing)\n\n---\n\n## Contributor(s):\n\n- [Jesse Rubin](https://github.com/jessekrubin) ~ `jesse@dgi.com` / `jessekrubin@gmail.com`\n- [Dan Costello](https://github.com/dan-costello) ~ `dan@dgi.com` / `dan.costello2@gmail.com`\n- Possibly you!?\n\n## Contributing:\n\nPlz do! Send me that PR!\n\n---\n\n## TODO:\n\n- Have CI/CD auto build n publish\n- Changelog (for real)\n- Figure out why the combine-prs workflow doesn't trigger github actions...\n- Update mkdocs to include all dgpy-libs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdynamic-graphics-inc%2Fdgpy-libs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdynamic-graphics-inc%2Fdgpy-libs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdynamic-graphics-inc%2Fdgpy-libs/lists"}