{ "info": { "author": "Andreas @blackhc Kirsch", "author_email": "blackhc+teddy@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Teddy\n\n~~Teddy is not Pandas. Teddy is lightweight and snuggly.~~\n\n~~Teddy is straightforward and understands you. Teddy loves you.~~\n\nMore importantly, Teddy is not ready for prime time.\n\n## Feature overview\n\nTeddy loves you so much, it will work with vanilla Python types.\n\n```python\nfrom collections\nrecord = namedtuple\ndata = list()\n```\n\n## Python WTFs\n\n### `__getattr__` also gets called for third-party AttributeErrors\n\nDefault attribute access does also forward to your `__getattr__` if a property descriptor raises\nan unrelated `AttributeError`.\n\n```\nIn [6]: class A:\n ...: @property\n ...: def result(self):\n ...: return [1,2].a\n ...:\n ...: def __getattr__(self, key):\n ...: print('hah')\n ...:\n\nIn [7]: A().result\nhah\n```\n\n### `inspect.signature` doesn't get along with `@staticmethod` in custom object\n\n```\nPython 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)]\nType 'copyright', 'credits' or 'license' for more information\nIPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.\n\nIn [1]: import inspect\n\nIn [2]: class A:\n ...: @staticmethod\n ...: def __call__(x,y):\n ...: return y\n ...:\n\nIn [3]: inspect.signature(A())\nOut[3]: \n\nIn [4]: inspect.signature(A().__call__)\nOut[4]: \n```\n\n## TODOs\n\n* [ ] the code could become simpler if it used key, value pairs everywhere internally?\n* [ ] tests for attr_mapping\n* [ ] prettyprinter is a bit meh sometimes\n* [x] I need a read-only wrapper around dicts for using attrs instead of indexing.\n* [x] get rid of no_value?\n* [x] find another name for IndexedMapping?\n* [x] support indexing by another Teddy instance or an IndexedMapping.\n* [x] we need a sequential type that exposes a dict interface but stores a list internally...\n* ~~[ ] figure out a structure for POPO vs other possible impls~~\n* [x] add tests\n* [ ] figure out a name for different kinds of predicates\n* [x] add support for implicit lambdas\n* [x] support for a literal function that allows for accessing any constant in a dict that has special meaning for teddy.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/blackhc/teddy", "keywords": "tools pandas data", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "teddy", "package_url": "https://pypi.org/project/teddy/", "platform": "", "project_url": "https://pypi.org/project/teddy/", "project_urls": { "Homepage": "https://github.com/blackhc/teddy" }, "release_url": "https://pypi.org/project/teddy/0.0.1/", "requires_dist": [ "check-manifest ; extra == 'dev'", "coverage ; extra == 'test'", "codecov ; extra == 'test'", "pytest ; extra == 'test'", "pytest-benchmark ; extra == 'test'", "pytest-cov ; extra == 'test'" ], "requires_python": "", "summary": "Teddy is like Pandas, but Teddy loves you.", "version": "0.0.1" }, "last_serial": 4709140, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "8e2ecbec7c68dbe90e82cc1ef2af6741", "sha256": "727ecf5d3f811365dce52e03de523b8e7d55b9d4d15c85a58b1926194da0d993" }, "downloads": -1, "filename": "teddy-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8e2ecbec7c68dbe90e82cc1ef2af6741", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14638, "upload_time": "2019-01-17T17:56:03", "url": "https://files.pythonhosted.org/packages/db/cd/98a9b73a6275f0a851b66f81845ad51f50c1a3a8f0433606dc3e1ac9d219/teddy-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19320403236da2f31241980898e6b360", "sha256": "096989089ce5766fc0de16fc219693275e38f2d0fcfc3fdbf83ccc75809cfbdb" }, "downloads": -1, "filename": "teddy-0.0.1.tar.gz", "has_sig": false, "md5_digest": "19320403236da2f31241980898e6b360", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58702, "upload_time": "2019-01-17T17:56:06", "url": "https://files.pythonhosted.org/packages/39/38/0b6405a3864669a6553f8cf2848f5930fc9f78d570fcc75bca76c5b5eda1/teddy-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8e2ecbec7c68dbe90e82cc1ef2af6741", "sha256": "727ecf5d3f811365dce52e03de523b8e7d55b9d4d15c85a58b1926194da0d993" }, "downloads": -1, "filename": "teddy-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8e2ecbec7c68dbe90e82cc1ef2af6741", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14638, "upload_time": "2019-01-17T17:56:03", "url": "https://files.pythonhosted.org/packages/db/cd/98a9b73a6275f0a851b66f81845ad51f50c1a3a8f0433606dc3e1ac9d219/teddy-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19320403236da2f31241980898e6b360", "sha256": "096989089ce5766fc0de16fc219693275e38f2d0fcfc3fdbf83ccc75809cfbdb" }, "downloads": -1, "filename": "teddy-0.0.1.tar.gz", "has_sig": false, "md5_digest": "19320403236da2f31241980898e6b360", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58702, "upload_time": "2019-01-17T17:56:06", "url": "https://files.pythonhosted.org/packages/39/38/0b6405a3864669a6553f8cf2848f5930fc9f78d570fcc75bca76c5b5eda1/teddy-0.0.1.tar.gz" } ] }