{ "info": { "author": "Jonathan Goren", "author_email": "jonagn@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Security", "Topic :: Utilities" ], "description": "# rupy\n\nRandom Useful Python stuff\n\n## What's inside?\nA collection of utilities I find useful.\n\n### `buf`\nA bytearray-derived class with many useful methods, supporting bitwise operations and much more.\n\n```python\n>>> buf(10)\nbuf(hex='00000000000000000000')\n\n>>> str(buf(b'hello'))\n'hello'\n\n>>> buf([1,2,3,4])\nbuf(hex='01020304')\n\n>>> buf(hex=\"deadbeef\")\nbuf(hex='deadbeef')\n\n>>> print(buf.random(100).hexdump())\n#000000| 6568 15de cf7a ce7e fb66 d9f3 cad4 d144 |eh...z.~.f.....D|\n#000010| bc0b c4fd 05c0 5fb5 eca1 870c 94e6 5b73 |......_.......[s|\n#000020| 3a86 322c 0ede de2e dd4b d1a6 331d 3c1b |:.2,.....K..3.<.|\n#000030| 6eb2 27c4 3246 1526 56a8 85a6 8c06 2d91 |n.'.2F.&V.....-.|\n#000040| a8fc 821d f806 a442 93ff 3503 27fe b3dd |.......B..5.'...|\n#000050| 1a8e 0aef da63 8eba 8d4f 6da5 fd44 8634 |.....c...Om..D.4|\n#000060| 3a6e 2395 |:n#. |\n\n>>> b = buf(b\"hello\")\n>>> s = b.to_stream()\n>>> s.seek(0, 2)\n>>> s.write(b\" world\")\n>>> print(b)\nhello world\n```\n\nAlso available: `hexdump`, which produces nice hexdumps.\n\n### `bitview`\nAllows for bit addressing and manipulation in-memory.\n\n```python\n>>> b = buf(hex='aa55')\n>>> print(b.bits)\n1010101001010101\n>>> print(b.bits[4:-4])\n10100101\n>>> b.bits.invert()\n>>> b\nbuf(hex='55aa')\n>>> b.bits[:8].set()\n>>> b\nbuf(hex='ffaa')\n```\n\n### `fields`\nA small binary structure manipulation library, integrated nicely with the `buf` structure, allowing for stuff like:\n\n```python\n>>> b = buf(hex='deadbeef12345678aabb1337')\n>>> f = b.fields('a: u32 b: u16 c: Bytes[6]')\n>>> print(hex(f.a), hex(f.b), repr(f.c))\n0xefbeadde 0x3412 buf(hex='5678aabb1337')\n```\n\n### `Range`\nEnhanced range(); a class that behaves like a normal range() but also enables slicing, infinite ranges, \nseries notation (e.g: `Range[1, 2, ..., 100]` is like `Range(1, 101)`) and more.\n\nRange is similar to builtin range() functions, except it also supports:\n * Sub-slicing\n * Unbounded ranges\n * Series notation using ellipsis\n * Arithmetic operations on ranges\n * And much more!\n\nAll this goodness is with negligible overhead, since Range() uses builtin types for the actual\niteration, such as xrange()/range() and itertools.count().\n\nUsage examples:\n\n```python\n>>> print(Range(10))\nRange[0, 1, ..., 9]\n\n>>> print(Range(None))\nRange[0, 1, 2, ...]\n\n>>> print(Range(step=-1))\nRange[0, -1, -2, ...]\n\n>>> for i in Range[1, 2, ..., 10]:\n... print(i)\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n\n>>> 1024 in Range[2:32768:2]\nTrue\n\n>>> for i in Range[1, 2, ...]:\n... if i == 2**16:\n... print(\"No more!\")\n... break\nNo more!\n\n>>> print(Range[0, ...][2:12:2])\nRange[2, 4, ..., 10]\n```\n\n### `Stream`\nA stream wrapper that allows blockwise iteration as well as slicing and single-byte indexing.\n\n```python\n>>> s = Stream.open(\"foo.bin\", \"rb\")\n>>> x = s[10:30]\n>>> x\n\n>>> buf(x)\nbuf(hex='63a7349ca38cc6319f3430c72e9659e8aca27705')\n>>> s[:1000].copy(open('/tmp/bar.bi', 'wb')) # Write stream data to other stream (buffered)\n```\n\n## Compatibility\nThis package is compatible with Python versions 2.7 and 3.3+.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/rekodah/rupy", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "rupy", "package_url": "https://pypi.org/project/rupy/", "platform": "", "project_url": "https://pypi.org/project/rupy/", "project_urls": { "Homepage": "https://gitlab.com/rekodah/rupy" }, "release_url": "https://pypi.org/project/rupy/0.3a1/", "requires_dist": null, "requires_python": "", "summary": "Random Useful Python utilities and stuff (Definitely not a backronym)", "version": "0.3a1" }, "last_serial": 5266932, "releases": { "0.2a0": [ { "comment_text": "", "digests": { "md5": "df4927d497718fd0ebb5df793d8bbb96", "sha256": "c304483cbc0d2991c5c0232331e9479875864db89724bffbce562add34666257" }, "downloads": -1, "filename": "rupy-0.2a0-py2-none-any.whl", "has_sig": false, "md5_digest": "df4927d497718fd0ebb5df793d8bbb96", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 23129, "upload_time": "2018-05-24T08:45:51", "url": "https://files.pythonhosted.org/packages/2c/b9/0b1282963bb5da0e9d8a37a5fe933bc9ab104374365af62d0251a84e12e2/rupy-0.2a0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c9aac2f32a91ca14ec22868ee8448d17", "sha256": "237c9b55677d9dda0dc540b34e0c6b2686fa21ac226f318dc6390c7a8367cedf" }, "downloads": -1, "filename": "rupy-0.2a0-py3-none-any.whl", "has_sig": false, "md5_digest": "c9aac2f32a91ca14ec22868ee8448d17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23129, "upload_time": "2018-05-24T08:45:52", "url": "https://files.pythonhosted.org/packages/22/a0/20c71de1277c15725e53150df97501fdee1dd68baea0d16337087449c229/rupy-0.2a0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1c2451fc1aefaf6a4c86449c58f63c22", "sha256": "e60c4969561a3ba8e4425c032fe6d93e648097eef74216bfc13ffa3668980d77" }, "downloads": -1, "filename": "rupy-0.2a0.tar.gz", "has_sig": false, "md5_digest": "1c2451fc1aefaf6a4c86449c58f63c22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20465, "upload_time": "2018-05-24T08:45:53", "url": "https://files.pythonhosted.org/packages/5c/f1/1272b693bc3184e2c2e476d29ded51fe3975f2e999640fbd6c43f446f60a/rupy-0.2a0.tar.gz" } ], "0.2a1": [ { "comment_text": "", "digests": { "md5": "e50f61d96803ad85ac2aea6b934793b6", "sha256": "bd6ec9cdc0cd41e0e6c0cb15103d0e248c8d93b43882d14fe220da41921ebf35" }, "downloads": -1, "filename": "rupy-0.2a1-py2-none-any.whl", "has_sig": false, "md5_digest": "e50f61d96803ad85ac2aea6b934793b6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 25373, "upload_time": "2018-05-27T15:31:43", "url": "https://files.pythonhosted.org/packages/fa/46/7a96bd675121fe5a0e77ab0fe2e68da2c0a37aacc61417c643fb7f097bac/rupy-0.2a1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f1bf6417f5276ab8a51f8ae9c63682ab", "sha256": "8049cb197ee8105a351b18d82ccf0ff028e30b9084433ed0ef7823498c08a8f8" }, "downloads": -1, "filename": "rupy-0.2a1-py3-none-any.whl", "has_sig": false, "md5_digest": "f1bf6417f5276ab8a51f8ae9c63682ab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25376, "upload_time": "2018-05-27T15:31:44", "url": "https://files.pythonhosted.org/packages/8d/70/9949f22fbd25f8ed8653d867010da8f03a3f15b88db11f7a4c9106b18dfd/rupy-0.2a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "749ae74e847de2105298cb674e76a410", "sha256": "3588afb76658372268821e41bdd6d10a13b36929c9d624353d7a9842752efb87" }, "downloads": -1, "filename": "rupy-0.2a1.tar.gz", "has_sig": false, "md5_digest": "749ae74e847de2105298cb674e76a410", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22375, "upload_time": "2018-05-27T15:31:47", "url": "https://files.pythonhosted.org/packages/1f/b1/8edc8220c577e94f1bdd9d01e63f37f425649636c3ee690cc8efc518ac01/rupy-0.2a1.tar.gz" } ], "0.2a2": [ { "comment_text": "", "digests": { "md5": "2e876a43f68330b199aa7d17dae4ad7a", "sha256": "3c541c061cedbf87883951cf825cdfa88dd8f646032d0a6191e3d67045b961a2" }, "downloads": -1, "filename": "rupy-0.2a2-py2-none-any.whl", "has_sig": false, "md5_digest": "2e876a43f68330b199aa7d17dae4ad7a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26840, "upload_time": "2018-06-28T11:03:43", "url": "https://files.pythonhosted.org/packages/18/bc/6037258a5964eec3b4d75711c9da9cc05581143f4c2887a3bfb928c28b10/rupy-0.2a2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84e31b54afa7c26a1a610a52ff6aa311", "sha256": "e49c5d6b0b7dfbc1f5847b9c3e8a3017a4fc6a20f436d017af1d9864dfeca2a8" }, "downloads": -1, "filename": "rupy-0.2a2-py3-none-any.whl", "has_sig": false, "md5_digest": "84e31b54afa7c26a1a610a52ff6aa311", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26840, "upload_time": "2018-06-28T11:03:44", "url": "https://files.pythonhosted.org/packages/4a/e7/237023254b14b56338d928aabb89c1b70bb6133aafee4b5d1437565da1fa/rupy-0.2a2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26e7f5e69122fd972ad56d2295c7cc65", "sha256": "25fbfbffe6cd5e32e983439959a603b9458d6d035aa6241b2ee94708fb8aaa16" }, "downloads": -1, "filename": "rupy-0.2a2.tar.gz", "has_sig": false, "md5_digest": "26e7f5e69122fd972ad56d2295c7cc65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23042, "upload_time": "2018-06-28T11:03:45", "url": "https://files.pythonhosted.org/packages/b1/71/04371eb1a9d8d79e9ddc7b11cfaba4bc12ddb2f3f46070d8c3bb7af9baa5/rupy-0.2a2.tar.gz" } ], "0.3a1": [ { "comment_text": "", "digests": { "md5": "e629bcf8faf7b13bb983bc3a95a1c76d", "sha256": "df0b465efec29c9210ff915f181bfcc7ca7a4b9fd948eb3bffe3cdf2ef063f01" }, "downloads": -1, "filename": "rupy-0.3a1.tar.gz", "has_sig": false, "md5_digest": "e629bcf8faf7b13bb983bc3a95a1c76d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23397, "upload_time": "2019-05-14T11:31:32", "url": "https://files.pythonhosted.org/packages/78/2c/0b53fe74d91adda2109cbedb20192d3436d75918e4ac867e5845d86bb3df/rupy-0.3a1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e629bcf8faf7b13bb983bc3a95a1c76d", "sha256": "df0b465efec29c9210ff915f181bfcc7ca7a4b9fd948eb3bffe3cdf2ef063f01" }, "downloads": -1, "filename": "rupy-0.3a1.tar.gz", "has_sig": false, "md5_digest": "e629bcf8faf7b13bb983bc3a95a1c76d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23397, "upload_time": "2019-05-14T11:31:32", "url": "https://files.pythonhosted.org/packages/78/2c/0b53fe74d91adda2109cbedb20192d3436d75918e4ac867e5845d86bb3df/rupy-0.3a1.tar.gz" } ] }