{ "info": { "author": "Jacob Oscarson", "author_email": "jacob@414soft.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3" ], "description": "micropy\n=======\n\nMy little lib of Python goodies\n\nMicropy is auto-formatted using\n`yapf `__.\n\nNice things\n-----------\n\ndig()\n~~~~~\n\nCSS selector like deep value grabbing from almost any object.\n\n.. code:: python\n\n >>> from micropy import dig\n >>> dig.xget((1, 2, 3), 1)\n 2\n >>> dig.xget({'foo': 'bar'}, 'foo')\n 'bar'\n >>> dig.dig({'foo': 1, 'bar': [1,2,3]}, 'bar.1')\n 2\n >>> dig.dig({'foo': 1, 'bar': [1,{'baz':'jox'},3]}, 'bar.1.baz')\n 'jox'\n >>>\n\nThe difference between ``dig.dig()`` and ``funcy.get_in()`` is that you\ncan use shell-like blob patterns to get several values keyed by similar\nnames:\n\n.. code:: python\n\n >>> from micropy import dig\n >>> res = dig.dig({'foo': 1, 'foop': 2}, 'f*')\n >>> res\n [foo=1:int, foop=2:int]\n >>> # (textual representation of an indexable object)\n >>> res[0]\n foo=1:int\n >>> res[1]\n foop=2:int\n >>>\n\nProgrammatic class creation\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nProgrammatic creation of arbitrary named classes in module definition,\nadd methods using a decorator notation:\n\n.. code:: python\n\n >>> from micropy import lang\n >>> mystuff = (('Foo', 1), ('Bar', 2))\n >>> for name, num in mystuff: locals()[name] = lang.mkclass(name, **{'num': num})\n >>> Foo\n \n >>> Foo.num\n 1\n >>> \\\n ... @Foo.classmethod\n ... def myclassmethod(cls, x):\n ... return x + 1\n >>> Foo.myclassmethod(1)\n 2\n >>>\n >>> \\\n ... @Foo.staticmethod\n ... def mystaticmethod(x, y):\n ... return x + y\n >>> Foo.mystaticmethod(1, 2)\n 3\n >>> \\\n ... @Foo.method\n ... def mymethod(self, x):\n ... self.y = self.num + x\n ... return self.y\n >>> foo = Foo()\n >>> foo.mymethod(1)\n 2\n >>> foo.y\n 2\n >>>\n\nmicropy module with developer convenience tools\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe ``micropy.microscope`` module contains utilities that aid\ndevelopment. It has to ways to inspect live objects:\n\n#. Via 'AbneuYAML'\n\n AbneuYAML is *\u201cAlmost, but not entirely unlike YAML\u201d*. Objects dumped\n to \u2018AbneuYAML\u2019 should be easy to get a visual overview of for humans.\n\n To dump any object:\n\n .. code:: python\n\n >>> from micropy import microscope\n >>> class Cls: pass\n ...\n >>> c = Cls()\n >>> c.foo, c.bar = 1, 2\n >>> c.sub = Cls()\n >>> c.sub.foo, c.sub.bar, c.sub.baz = 3, 4, [1, 2]\n >>> encoded = microscope.abneuyaml(c)\n >>> print(encoded) #doctest: +ELLIPSIS\n <__main__.Cls object at 0x...>:Cls\n foo=1:int\n bar=2:int\n sub=<__main__.Cls object at 0x...>:Cls\n foo=3:int\n bar=4:int\n baz=[1, 2]:list\n >>>\n\nA simple way of creating small DSL's using Python operator overloading.\n-----------------------------------------------------------------------\n\n.. code:: python\n\n >>> from micropy import lang\n >>> \\\n ... class PipingExample(lang.Piping):\n ... def __add__(self, value) -> lang.Piping:\n ... self.queue(lambda a, b: a + b, value)\n ... return self\n ...\n >>> simplest_pipe = PipingExample(10)\n >>> res = simplest_pipe + 10 + 20\n >>> res()\n 40\n >>>\n\nMostly, you'll want to use the pipe operator to define simple\ncomposition:\n\n.. code:: python\n\n >>> from micropy import lang\n >>> incr = lambda x: x + 1\n >>> showr = \"It is {}!\".format\n >>> (lang.ComposePiping(5) >> incr >> incr >> showr)()\n 'It is 7!'\n >>>\n\n'Call by type' convenience objects\n----------------------------------\n\n.. code:: python\n\n >>> from micropy import lang\n >>> foo = lang.Match({int: lambda x: x*100, str: lambda x: f'Hello {x}'})\n >>> foo(10)\n 1000\n >>> foo('bar')\n 'Hello bar'\n >>>\n\nNarrowable collections\n----------------------\n\nUses indexes to narrow collections to fewer values. You can narrow by\ntype, a predicate function or value equality. The return value is always\na new ``Narrowable`` derived type from the initial value. Therefore, you\ncan chain several narrowing operations in the same expression.\n\nErrors raised by the narrowing predicates are considered misses.\n\nSome examples:\n\nNarrow by type\n~~~~~~~~~~~~~~\n\n.. code:: python\n\n >>> from micropy.primitives import narrowable\n >>> narrowable((1,2,3,'foo', 'bar'))[int]\n (1, 2, 3)\n >>>\n\nNarrow by callable\n~~~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n >>> from micropy.primitives import narrowable\n >>> narrowable((1, 2, 3))[lambda x: x > 1]\n (2, 3)\n >>>\n >>> narrowable((1,2,3,'foo', 'bar'))[int]\n (1, 2, 3)\n >>> narrowable((1,2,3,'foo', 'bar'))[lambda x: x > 1]\n (2, 3)\n >>> # Note, swallows ValueError raised by 'foo' > 1 etc\n >>>\n\nSupress empty iterable objects\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n >>> from micropy.primitives import narrowable\n >>> narrowable([[1], [2], [], []])[lambda x: x[0]]\n [[1], [2]]\n >>>\n\nNarrow using exact match\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n >>> from micropy.primitives import narrowable\n >>> narrowable((1, 2, 3, 'foo'))['foo']\n ('foo',)\n >>>\n\nNarrow using a regexp\n~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n >>> from micropy.primitives import narrowable\n >>> import re\n >>> narrowable(('foo', 'fom', 'jox', 8, 'fim'))[re.compile('fo.*').match]\n ('foo', 'fom')\n >>>\n\nCombine\n~~~~~~~\n\n.. code:: python\n\n >>> from micropy.primitives import narrowable\n >>> narrowable((1,2,3,'foo', 'bar'))[str]['foo']\n ('foo',)\n >>>\n\nGo deeper\n---------\n\n.. code:: python\n\n >>> from micropy.primitives import narrowable\n >>> narrowable((1, 2, 3, (41, 42, 43)))[tuple][0][lambda x: x > 41]\n (42, 43)\n >>>\n\nNo matches found\n~~~~~~~~~~~~~~~~\n\nIf no element matches, an empty version of the collection parameter will\nbe returned:\n\n.. code:: python\n\n >>> from micropy.primitives import narrowable\n >>> narrowable((1,2,3))[lambda x: x > 3]\n ()\n >>>", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://www.414soft.com/micropy", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "micropy", "package_url": "https://pypi.org/project/micropy/", "platform": "", "project_url": "https://pypi.org/project/micropy/", "project_urls": { "Homepage": "https://www.414soft.com/micropy" }, "release_url": "https://pypi.org/project/micropy/0.6.2/", "requires_dist": null, "requires_python": "", "summary": "Some Python nicieties", "version": "0.6.2", "yanked": false, "yanked_reason": null }, "last_serial": 6837365, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "032f5848feedfbb68e106817eb70c082", "sha256": "ec1a9251a778c74bd7faf87c7834c253e2372bcf64c4aec76d4c9b365391f822" }, "downloads": -1, "filename": "micropy-0.5.0.tar.gz", "has_sig": false, "md5_digest": "032f5848feedfbb68e106817eb70c082", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7273, "upload_time": "2019-10-24T18:38:36", "upload_time_iso_8601": "2019-10-24T18:38:36.681185Z", "url": "https://files.pythonhosted.org/packages/fd/dc/b408050e0ad211428ed8740fe9add9c1422f16fd1c2ef50a424422c074cc/micropy-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "b1740fc4e389a66b88ede40ba315803d", "sha256": "6b896742c220d7be5808109493d36e8e0020301b5c57151f3419ff6da0b03c0f" }, "downloads": -1, "filename": "micropy-0.5.1.tar.gz", "has_sig": false, "md5_digest": "b1740fc4e389a66b88ede40ba315803d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7804, "upload_time": "2019-10-24T19:03:15", "upload_time_iso_8601": "2019-10-24T19:03:15.188748Z", "url": "https://files.pythonhosted.org/packages/39/69/39afeb1b220b3efa629201b47f858dedf55c0f994a1220f96688594d544f/micropy-0.5.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "a32c03b4ee4a8560495f298779380435", "sha256": "90159badf19a9d073e8118d8ca21bed70c7cee2e2973740b2f2bcd1edf099085" }, "downloads": -1, "filename": "micropy-0.5.2.tar.gz", "has_sig": false, "md5_digest": "a32c03b4ee4a8560495f298779380435", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9516, "upload_time": "2019-11-11T14:36:13", "upload_time_iso_8601": "2019-11-11T14:36:13.296967Z", "url": "https://files.pythonhosted.org/packages/59/bf/daec43225dbd5a6edcbbdad3f7b1e15b9cb300c0ccf1d2a1cbad23522303/micropy-0.5.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "bfa66e75ef3a356aaa01bb29a3581a97", "sha256": "fbee695d1f9aba941a35d0bfbd29f975e5b7f7882997d806b31bbc2505d63842" }, "downloads": -1, "filename": "micropy-0.5.3.tar.gz", "has_sig": false, "md5_digest": "bfa66e75ef3a356aaa01bb29a3581a97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10220, "upload_time": "2019-11-12T13:43:31", "upload_time_iso_8601": "2019-11-12T13:43:31.873546Z", "url": "https://files.pythonhosted.org/packages/35/80/b4625ed43d7419893380033d897b71c027a7ab6c08ca8c76caa8a5069d27/micropy-0.5.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "c304b8d125b37c945a3578eafd352ade", "sha256": "55af53798ce114eabfa1df2c542cfb6d1f088eef21efbcb47dce46af5a9c2f9a" }, "downloads": -1, "filename": "micropy-0.5.4.tar.gz", "has_sig": false, "md5_digest": "c304b8d125b37c945a3578eafd352ade", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11580, "upload_time": "2019-11-21T14:19:19", "upload_time_iso_8601": "2019-11-21T14:19:19.640385Z", "url": "https://files.pythonhosted.org/packages/30/71/f8fe96a83384043b22ba8a520834691705b5de1907dbdd292df4fb2c5f8c/micropy-0.5.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "7e407b8eb732b856dbe9edb4b19b8885", "sha256": "d2c61481f87441176cfb720f884098280f206f9dfb048c352d045bba46bcf2a5" }, "downloads": -1, "filename": "micropy-0.5.5.tar.gz", "has_sig": false, "md5_digest": "7e407b8eb732b856dbe9edb4b19b8885", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11947, "upload_time": "2019-12-05T17:04:33", "upload_time_iso_8601": "2019-12-05T17:04:33.802260Z", "url": "https://files.pythonhosted.org/packages/90/ee/67bedb6bd35592589cb3eff24ba8a1fe1e7dedc33cb93059dd2eb6c9fab4/micropy-0.5.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.6": [ { "comment_text": "", "digests": { "md5": "d6f229fd4aea45913103213e3295255a", "sha256": "f31c6ef15b2ba899f86aad3774ec39bcb48d087d01d0e85c788594d66ddd7ebc" }, "downloads": -1, "filename": "micropy-0.5.6.tar.gz", "has_sig": false, "md5_digest": "d6f229fd4aea45913103213e3295255a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12524, "upload_time": "2019-12-11T13:07:14", "upload_time_iso_8601": "2019-12-11T13:07:14.160647Z", "url": "https://files.pythonhosted.org/packages/5c/b4/33fb59a9229d9bfb490c188e73b6187af83ff8413da0c32587581b4ec2e3/micropy-0.5.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.7": [ { "comment_text": "", "digests": { "md5": "8eba7b605d06d4f917f0f4cc24743ab0", "sha256": "f3e545196307807ae528f7f90c2b30d5860f9637fb449afa754b999aa697974d" }, "downloads": -1, "filename": "micropy-0.5.7.tar.gz", "has_sig": false, "md5_digest": "8eba7b605d06d4f917f0f4cc24743ab0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12524, "upload_time": "2019-12-11T13:21:01", "upload_time_iso_8601": "2019-12-11T13:21:01.918292Z", "url": "https://files.pythonhosted.org/packages/0e/3b/74f2fc553bbc8c33b2d7c434fc029164677258cd48b973b0cec27b2afabd/micropy-0.5.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.8": [ { "comment_text": "", "digests": { "md5": "0ccd832bd44e08ac45539da8f90c06be", "sha256": "c176675e1b20037fa75458b7da527af0f516691e2e585cc0852fae9887201a32" }, "downloads": -1, "filename": "micropy-0.5.8.tar.gz", "has_sig": false, "md5_digest": "0ccd832bd44e08ac45539da8f90c06be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12525, "upload_time": "2019-12-11T14:01:50", "upload_time_iso_8601": "2019-12-11T14:01:50.613517Z", "url": "https://files.pythonhosted.org/packages/60/4f/82cf7cfdd9b781e16c5b9d1dc7c46c6e57eef95e337721a1e4135528eedf/micropy-0.5.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.9": [ { "comment_text": "", "digests": { "md5": "32815e9fc3a124b36f33bb258c79cca2", "sha256": "faf6a0b15feab92576e64a8fb82a5c0a8b3384b49f298103e6ac5bcbd5b24b76" }, "downloads": -1, "filename": "micropy-0.5.9.tar.gz", "has_sig": false, "md5_digest": "32815e9fc3a124b36f33bb258c79cca2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14103, "upload_time": "2020-01-15T13:28:17", "upload_time_iso_8601": "2020-01-15T13:28:17.006330Z", "url": "https://files.pythonhosted.org/packages/f1/66/9d14aa57fffabf53d55c9b255ee877c39f90ec516747fd5450166ab230d0/micropy-0.5.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "2af5fd6d48c41c0d77fa4d53b64e29d5", "sha256": "bffc508550e420d4d37768c67959f6b28edccc30c6f4e3734fb6d1f4c14a4140" }, "downloads": -1, "filename": "micropy-0.6.0.tar.gz", "has_sig": false, "md5_digest": "2af5fd6d48c41c0d77fa4d53b64e29d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14227, "upload_time": "2020-01-21T20:26:44", "upload_time_iso_8601": "2020-01-21T20:26:44.740253Z", "url": "https://files.pythonhosted.org/packages/90/f1/0a63691008b3084255cadcb4d8d99b7fd42fb21b4840e594a5b5293b9912/micropy-0.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "9cd19f387d420b61df2a40c5dee5cba7", "sha256": "1bd32b1a64e9f33165568308eba6c8680690f5976dedf4a5807764d8743980a7" }, "downloads": -1, "filename": "micropy-0.6.1.tar.gz", "has_sig": false, "md5_digest": "9cd19f387d420b61df2a40c5dee5cba7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15713, "upload_time": "2020-02-08T20:46:55", "upload_time_iso_8601": "2020-02-08T20:46:55.403502Z", "url": "https://files.pythonhosted.org/packages/aa/87/5ad0cf5e0da32d2c2503bf9f32d6f71cfd9acbee6128a1fcf6b996f4c3e5/micropy-0.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "8cf79b8c94e982ae2743f63341600567", "sha256": "635b49f6c6e05da0f877800fea4abb73163ece2f9b55b527946816a00d23f70e" }, "downloads": -1, "filename": "micropy-0.6.2.tar.gz", "has_sig": false, "md5_digest": "8cf79b8c94e982ae2743f63341600567", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17245, "upload_time": "2020-03-18T16:57:09", "upload_time_iso_8601": "2020-03-18T16:57:09.814779Z", "url": "https://files.pythonhosted.org/packages/a8/b8/8679af2a5738e517905ff6e7ddc8b36eae34eea2bac37c989c0d90dc58f9/micropy-0.6.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8cf79b8c94e982ae2743f63341600567", "sha256": "635b49f6c6e05da0f877800fea4abb73163ece2f9b55b527946816a00d23f70e" }, "downloads": -1, "filename": "micropy-0.6.2.tar.gz", "has_sig": false, "md5_digest": "8cf79b8c94e982ae2743f63341600567", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17245, "upload_time": "2020-03-18T16:57:09", "upload_time_iso_8601": "2020-03-18T16:57:09.814779Z", "url": "https://files.pythonhosted.org/packages/a8/b8/8679af2a5738e517905ff6e7ddc8b36eae34eea2bac37c989c0d90dc58f9/micropy-0.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }