{ "info": { "author": "djosix", "author_email": "toregenerate@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3" ], "description": "# bites\n\nThis package provides a useful class: `Bs` (Bytes), to help you do several operations on bytes without writing a lot of stupid codes.\n\n\n- [bites](#bites)\n - [Install](#install)\n - [Why?](#why)\n - [When you want to conduct a simple xor](#when-you-want-to-conduct-a-simple-xor)\n - [When you need a simple encryption](#when-you-need-a-simple-encryption)\n - [Usage](#usage)\n - [Creating Bs](#creating-bs)\n - [Using the constructor](#using-the-constructor)\n - [From integer](#from-integer)\n - [From hex string](#from-hex-string)\n - [From bit string](#from-bit-string)\n - [From file](#from-file)\n - [From base64 encoded bytes](#from-base64-encoded-bytes)\n - [Random](#random)\n - [Basic Operations](#basic-operations)\n - [Slicing](#slicing)\n - [Setting values for slice of Bs](#setting-values-for-slice-of-bs)\n - [Other useful methods](#other-useful-methods)\n - [Bytewise Operations](#bytewise-operations)\n - [Eamples](#eamples)\n - [Binary operations with other types](#binary-operations-with-other-types)\n - [Other useful methods](#other-useful-methods)\n - [Bitwise Operations](#bitwise-operations)\n - [Basic properties](#basic-properties)\n - [Logical operations](#logical-operations)\n - [Shifting over all bits](#shifting-over-all-bits)\n - [Other useful methods](#other-useful-methods)\n - [Convertions](#convertions)\n - [To integer](#to-integer)\n - [To string](#to-string)\n - [Other](#other)\n - [Base64 encode](#base64-encode)\n - [Hashing](#hashing)\n\n\n## Install\n\n```shell\npython3 -m pip install -U bites\n```\n\n## Why?\n\nAren't you mad?\n\n#### When you want to conduct a simple xor\n\n```python\na = b'deadbeef'\nb = b'faceb00k'\n\n# Standard\nc = bytes(i ^ j for i, j in zip(a, b))\n\n# NumPy\nimport numpy as np\nc = (np.array([*a]) ^ np.array([*b])).astype(np.uint8).tobytes()\n\n# Using this package\nfrom bites import Bs\nc = bytes(Bs(a) ^ b)\n```\n\n#### When you need a simple encryption\n\n```python\nm = 'the_plain_text_you_wanna_encrypt'\ne = 'the_secret_key'\n\n# Standard\nmb = m.encode()\neb = e.encode()\nmbl = len(mb)\nebl = len(eb)\nl = max(mbl, ebl)\ncb = bytes([mb[i % mbl] ^ eb[i % ebl] for i in range(l)])\n\n# NumPy\nimport numpy as np\nmb = np.array(list(m.encode()))\neb = np.array(list(e.encode()))\nprint('You should repeat these arrays to the same length to use xor, '\n \"and you gived up just because you don't know which method to use.\\n\"\n 'You start googling then write down this code:')\neb_ = np.tile(eb, mb.size // eb.size + 1)[:mb.size]\ncb = (mb ^ eb_).astype(np.uint8).tobytes() # elegant!\n\n# After you found this package:\nfrom bites import Bs\ncb = bytes(Bs(m) ^ e)\n\n# Or, if you don't want auto-repeating / padding, use n()\ncb = bytes(Bs(m) ^ Bs(e).n()) # error!!!\ncb = bytes(Bs(m) ^ Bs(e).r()) # repeat e to fit the length of m\ncb = bytes(Bs(m) ^ Bs(e).p(0)) # pad e with 0s to fit the length of m\n```\n\n- `Bs` by default uses auto-repeating.\n- `bs.r()` explicitly specifies using auto-repeating.\n- `bs.p(c)` returns a `Bs` that pads `c` to fit the other longer operands by default.\n- `bs.n()` returns a `Bs` object that will not change its length automatically.\n\n## Usage\n\n```python\nfrom bites import Bs\n\nbs = Bs(1, 2, 3, 4)\nbs # \n```\n\n### Creating Bs\n\n#### Using the constructor\n\nThese lines create the same thing, the input parameters will be flattened and automatically converted to ints in `range(0, 256)`.\n\n```python\n# These all create ``\nBs(1, 2, 3, 4)\nBs([1, 2, 3, 4])\nBs([[1], [2], [3, [4]]])\nBs(256+1, 256+2, 256+3, 256+4)\nBs(1-256, 2-256, 3-256, 4-256)\nBs(bytes([1, 2]), 3, 4)\nBs('\\x01', b'\\x02', 3, [4])\nBs(Bs(1, 2), [3], 4)\nBs(Bs(1, Bs(2)), Bs([3, Bs(4)]))\n```\n\nSimple rules\n\n- `int` will be replaced with its remainder of 256.\n- `str` will be encoded into `bytes` (UTF-8).\n- `Iterable` will be flattened.\n\n```python\n>>> Bs(range(5))\n\n\n>>> Bs([i for i in range(256) if i % 3 == i % 7 == 0 ])\n\n\n>>> Bs(map(lambda n: n + 3, range(5)))\n\n\n>>> Bs(range(0, 3), range(10, 13))\n\n```\n\n#### From integer\n\n```python\n# Integers will be considered as little endien\n>>> Bs.from_int(8192)\n\n>>> Bs.from_int(0x102030)\n\n\n# Simply call `bs.rev()` if you want big endian\n>>> Bs.from_int(8192).rev()\n\n```\n\n#### From hex string\n\n```python\n# 'DE' is the first byte\n>>> Bs.from_hex('DEADBEEF')\n\n\n# If the string starts with '0x', 'EF' will be the first byte\n>>> Bs.from_hex('0xDEADBEEF')\n\n>>> Bs.from_int(int('0xDEADBEEF', 16))\n\n```\n\n#### From bit string\n\n```python\n# The first bit is LSB\n>>> Bs.from_bin('00001111')\n\n\n# If the string starts with '0b', the first bit in the string is MSB\n>>> Bs.from_bin('0b00001111')\n\n>>> Bs.from_int(int('0b00001111', 2))\n\n\n# Notice that this will not be '00001111'\n>>> Bs.from_bin('0b00001111').bin()\n'11110000'\n```\n\n#### From file\n\n```python\nprint(Bs.load('/etc/passwd').str())\n```\n\n#### From base64 encoded bytes\n\n```python\nBs.from_base64('ZnVjaw==')\n```\n\n#### Random\n\n```python\n>>> import string\n\n>>> Bs.rand(8, cs=(string.ascii_lowercase + '0123456')).str()\n'c4u0epdn'\n\n>>> Bs.rand(8, cs=range(100)).hex()\n'4a334519435d1103'\n\n>>> Bs.rand(8, cs=string.hexdigits).str()\n'cb41fA41'\n```\n\n### Basic Operations\n\n#### Slicing\n\n```python\n>>> bs = Bs(1, 2, 3, 4)\n>>> bs\n\n\n>>> bs[:2]\n\n\n>>> bs[2]\n\n\n>>> bs[-1]\n\n\n>>> bs[::-1]\n\n\n>>> bs[::2]\n\n```\n\n#### Setting values for slice of Bs\n\n```python\n>>> bs = Bs(1, 2, 3, 4)\n>>> bs\n\n\n>>> bs[:2] = 0\n>>> bs\n\n\n>>> bs[:] = 0\n>>> bs\n\n\n>>> bs[:] = '1234'\n>>> bs\n\n\n>>> bs[:] = '123'\n>>> bs\n\n\n>>> bs[:] = '12345'\n>>> bs\n\n\n>>> bs[:] = Bs('12').n()\n# Error: cannot set values to range(0, 4): r=False, p=None, l=2\n\n>>> bs[:] = Bs('12').p(0)\n\n>>> bs\n\n```\n\n#### Other useful methods\n\n```python\n>>> bs = Bs('dead')\n>>> bs\n\n\n# Repeat n times\n>>> bs.rep(2)\n\n\n# Repeat to length\n>>> bs.repto(6)\n\n\n# Pad to length\n>>> bs.padto(6, 0)\n\n\n# Append or concatenate\n>>> bs @ 'beef'\n\n\n# Extend to length automatically\n>>> bs.extto(6)\n\n\n# Explicit automatic repeating\n>>> bs.r().extto(6)\n\n\n# Use automatic padding\n>>> bs.p(0).extto(6)\n\n\n# Disable automatic extension\n>>> bs.n().extto(6) # Error\n```\n\n### Bytewise Operations\n\nOperands with `Bs` objects will first be converted into `Bs`. If the lengths don't match, the shorter one will call `shorter_bs.extto(len(longer_bs))` to fit the longer operand's length.\n\n#### Eamples\n\n```python\n>>> a = Bs.from_int(0x0a00)\n>>> a\n\n\n>>> b = Bs.from_int(0x0b)\n>>> b\n\n\n>>> a + b # b will be unrolled to \n\n\n>>> a + b.n()\n# Error: length not matched: (2, 1)\n\n>>> a - b\n\n\n>>> a * b\n\n\n>>> a / b\n\n\n>>> a // b\n\n\n>>> a ** b\n\n\n>>> a % b\n\n```\n\n#### Binary operations with other types\n\nThe other operand will first be converted into `Bs` as well, with automatic repeating to fit the length of our `Bs`.\n\n```python\n>>> cafe = Bs.from_hex('c01dcafe')\n>>> cafe\n\n\n>>> cafe + 1\n\n\n>>> 1 + cafe\n\n\n>>> cafe + '\u7cd6'\n\n\n>>> cafe + b'cafe'\n\n\n>>> cafe + b'sugar'\n\n\n>>> cafe + [1, 2, 3, 4]\n\n\n>>> cafe + range(5)\n\n\n>>> cafe.p(0) + [0] * 6\n\n\n>>> cafe.bin()\n'00000011101110000101001101111111'\n\n>>> (cafe >> 1).bin() # for each byte\n'00000110011100001010011011111110'\n\n>>> (cafe << 1).bin() # for each byte\n'00000001010111000010100100111111'\n```\n\n#### Other useful methods\n\n```python\n>>> bs = Bs(range(7))\n>>> bs\n\n\n# Reverse\n>>> bs.rev()\n\n\n# Roll\n>>> bs.roll(1)\n\n\n>>> bs.roll(-1)\n\n\n>>> bs.rjust(10, 0xff)\n\n\n>>> bs.ljust(10, 0xff)\n\n\n# Iterate over every n bytes\n>>> bs.every()\n[, , , , , , ]\n\n>>> bs.every(n=3)\n[, , ]\n\n>>> bs.every(n=3, m=list) # map\n[[0, 1, 2], [3, 4, 5], [6]]\n\n>>> bs.every(n=3, m=int)\n[131328, 328707, 6]\n\n>>> bs.every(n=4, m=lambda i: i.asint(32)) # with map\n[50462976, 394500]\n\n>>> bs.every(4, list, lambda i: 2 in i) # filter before map\n[[0, 1, 2, 3]]\n\n>>> bs.every(4, f=lambda i: 2 in i) # only filter\n[]\n```\n\n### Bitwise Operations\n\nOperating over bits.\n\n#### Basic properties \n\n```python\n# v MSB v LSB\n>>> bs = Bs.from_bin('0b1111000011001100')\n\n>>> bs.bin()\n'0011001100001111'\n\n>>> bin(bs)\n'0b1111000011001100'\n\n>>> bs\n\n\n>>> bs.int()\n61644\n\n# v LSB v MSB\n>>> bs = Bs.from_bin('1111000011001100')\n\n>>> bs.bin()\n'1111000011001100'\n\n>>> bin(bs)\n'0b11001100001111'\n\n>>> bs\n\n\n>>> bs.int()\n13071\n```\n\n#### Logical operations\n\n```python\n>>> x = Bs.from_bin('1111000010101010')\n\n>>> (~x).bin()\n'0000111101010101'\n\n>>> y = Bs.from_bin('1' * 16)\n\n>>> (x & y).bin()\n'1111000010101010'\n\n>>> (x | y).bin()\n'1111111111111111'\n\n>>> (x ^ y).bin()\n'0000111101010101'\n```\n\n#### Shifting over all bits\n\n```python\n>>> bs = Bs.from_bin('1100000000000001')\n\n>>> bs.shift(1).bin()\n'0110000000000000'\n\n>>> bs.shift(-1).bin()\n'1000000000000010'\n\n>>> bs.asint()\n-32765\n\n>>> bs.shift(-1, a=True).bin() # arithmetic\n'1000000000000011'\n\n>>> bs.shift(-2, a=True).bin()\n'0000000000000111'\n\n>>> bs.shift(-5, a=True).bin()\n'0000000000111111'\n\n>>> bs.shift(-100, a=True).bin()\n'1111111111111111'\n\n>>> bs = Bs.from_bin('0000000000000010')\n\n>>> bs.asint()\n16384\n\n>>> bs.shift(1, a=True).bin()\n'0000000000000000'\n\n>>> bs.shift(1, a=True).asint()\n0\n\n>>> bs.shift(-1, a=True).bin()\n'0000000000000100'\n\n>>> bs.shift(-1, a=True).asint()\n8192\n\n>>> bs.shift(-5, a=True).bin()\n'0000000001000000'\n\n>>> bs.shift(-5, a=True).asint()\n512\n\n>>> bs.shift(-100, a=True).bin()\n'0000000000000000'\n\n>>> bs.shift(-100, a=True).asint()\n0\n```\n\n#### Other useful methods\n\n```python\n>>> bs = Bs.from_bin('1100000000000001')\n\n>>> bs.revbits().bin()\n'1000000000000011'\n\n>>> bs.rollbits(1).bin()\n'1110000000000000'\n\n>>> bs.rollbits(-1).bin()\n'1000000000000011'\n\n>>> bs.bits()\n['1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1']\n\n>>> bs.bits(every=3)\n['110', '000', '000', '000', '000', '1']\n\n>>> [b for b in bs.bits(every=3) if len(b) == 3]\n['110', '000', '000', '000', '000']\n```\n\n\n### Convertions\n\n#### To integer\n\n```python\n>>> bs = Bs(0, 0b10000000)\n>>> bs\n\n\n>>> bs.int()\n32768\n\n>>> int(bs)\n32768\n\n>>> bs.asint()\n-32768\n\n>>> bs.asint(8)\n0\n\n>>> bs.asint(16)\n-32768\n\n>>> bs.asint(32)\n32768\n\n>>> bs.asuint()\n32768\n\n>>> bs.asuint(8)\n0\n\n>>> bs = Bs.rand(32)\n>>> bs\n\n\n>>> bs.asints(32)\n[-592827823, -2079586173, 1549746960, 395828955, -212973227, 54899593, -59270975, 1800453520]\n\n>>> bs.asuints(32)\n[3702139473, 2215381123, 1549746960, 395828955, 4081994069, 54899593, 4235696321, 1800453520]\n```\n\n#### To string\n\n```python\n>>> bs = Bs('las vegas')\n>>> bs\n\n\n>>> bs.str()\n'las vegas'\n\n>>> str(bs)\n'las vegas'\n\n>>> bs.hex()\n'6c6173207665676173'\n\n>>> hex(bs)\n'0x73616765762073616c'\n\n>>> oct(bs)\n'0o346605473127304034660554'\n\n>>> bs.bin()\n'001101101000011011001110000001000110111010100110111001101000011011001110'\n\n>>> bin(bs)\n'0b11100110110000101100111011001010111011000100000011100110110000101101100'\n```\n\n### Other\n\n#### Base64 encode\n\n```python\n\n>>> Bs('Las Vegas').base64()\n'TGFzIFZlZ2Fz'\n```\n\n#### Hashing\n\n```python\n>>> bs = Bs('Las Vegas')\n\n>>> bs.hash('md5')\n\n\n>>> bs.hash('md5').hex()\n'05c27bf00932572de28bf65a0539ba97'\n\n>>> bs.hash('sha256')\n\n\n>>> bs.hash('sha256').hex()\n'2bd25cd960aba8b706e2b67f2bb38b750ee5384b0e9883053ebc3b89ef4ddef9'\n\n# See what's available\n>>> import hashlib\n>>> hashlib.algorithms_guaranteed\n{'sha384', 'shake_128', 'sha3_256', 'sha3_512', 'md5', 'sha512', 'shake_256', 'sha3_384', 'sha1', 'sha3_224', 'blake2b', 'blake2s', 'sha256', 'sha224'}\n```\n\n#### Command pipe\n\n```python\n>>> Bs('stdin input').pipe('tr a-z A-Z').str()\n'STDIN INPUT'\n\n>>> Bs('stdin input').pipe('base64').pipe('tee /dev/stderr').pipe('base64 --decode').str()\nc3RkaW4gaW5wdXQ=\n'stdin input'\n\n>>> print(Bs().pipe('ls').str())\nLICENSE\nREADME.md\nbites\nbites.egg-info\nbuild\ndist\nsetup.py\n\n```\n\n#### IPv4\n\n```python\n>>> ip = Bs.from_ip4('192.168.1.1/16')\n>>> ip\n\n\n>>> ip.every(1, int)\n[0, 0, 168, 192]\n\n>>> ip.ip4()\n'192.168.0.0'\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/djosix/bites", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "bites", "package_url": "https://pypi.org/project/bites/", "platform": "", "project_url": "https://pypi.org/project/bites/", "project_urls": { "Homepage": "https://github.com/djosix/bites" }, "release_url": "https://pypi.org/project/bites/0.0.10/", "requires_dist": null, "requires_python": "", "summary": "Operating bytes made easy", "version": "0.0.10" }, "last_serial": 4447898, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "446e01efc27f7701c979fa10778ec845", "sha256": "6e90466c009c3743544154cb90df64487d77e12a6e971f809c0194e2883c7c76" }, "downloads": -1, "filename": "bites-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "446e01efc27f7701c979fa10778ec845", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2923, "upload_time": "2018-09-28T20:35:36", "url": "https://files.pythonhosted.org/packages/79/78/7acbcb1351e2fc91fd23c0e0e57c2319748f50e21f96a9890cfa6d4ad6f9/bites-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83e2806ea4c0f25a740f63c533b9d327", "sha256": "e3ec1ae94657a35b36c6a5ec0855f7703c5f6725337c88b03c29e25384664100" }, "downloads": -1, "filename": "bites-0.0.1.tar.gz", "has_sig": false, "md5_digest": "83e2806ea4c0f25a740f63c533b9d327", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2469, "upload_time": "2018-09-28T20:35:37", "url": "https://files.pythonhosted.org/packages/22/f1/9795541fc49f4aaed7a624bf4564044256fc368dd0bbd9ce078ffe72eef6/bites-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "037bd71302882ed218aedb49ce129b47", "sha256": "aa802fafebf37796df4858cbc3f860609461cc6647f8af6be60f00b2914b2db4" }, "downloads": -1, "filename": "bites-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "037bd71302882ed218aedb49ce129b47", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10478, "upload_time": "2018-11-03T17:50:39", "url": "https://files.pythonhosted.org/packages/bf/3f/359a33ffebc3b50c50bdd485b2b9969c95334a5b5d55eaea85eae423c424/bites-0.0.10-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "e4e11667247b178530db0b2b076024d3", "sha256": "ce47cd98fc2dfa9c11c5c5e13a85289627e05e86d12a09f5b7d34a00f76cac56" }, "downloads": -1, "filename": "bites-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e4e11667247b178530db0b2b076024d3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2948, "upload_time": "2018-09-28T21:01:04", "url": "https://files.pythonhosted.org/packages/e3/33/3fa7e843f56c845f5ed7e9d79dd685cccde47bd5aacecba68bee9130b3bd/bites-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5041dbbc9ae7fa9223d39848fed14100", "sha256": "5c4fedc4d0c2b935f65fdbf898f5188a90a4667a1ba52a75450108e76c989210" }, "downloads": -1, "filename": "bites-0.0.2.tar.gz", "has_sig": false, "md5_digest": "5041dbbc9ae7fa9223d39848fed14100", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2497, "upload_time": "2018-09-28T21:01:06", "url": "https://files.pythonhosted.org/packages/c7/5c/a915c5a8a84e40024c19bf4eeff9915f18e6b58cb9d526033edfe74639e3/bites-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "f7db0bff5624dc3d0c047d939f4cb2ef", "sha256": "f1c90dca501f3279cae45002d631396e72d6f8549efaa8a0c7200c78e5ed4a3e" }, "downloads": -1, "filename": "bites-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f7db0bff5624dc3d0c047d939f4cb2ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3191, "upload_time": "2018-09-28T22:02:42", "url": "https://files.pythonhosted.org/packages/d5/bd/4cc5990ba903ade0ae3eda68a8b1378791fe53ae7d062a6be539bbe477eb/bites-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fbdd0da7bdc0d2b04e26216b4080dbd", "sha256": "a18131df97e22e12873b86cc45384c96fc0ed1a9ae958b7f0f26e8ecfd2c4b2c" }, "downloads": -1, "filename": "bites-0.0.3.tar.gz", "has_sig": false, "md5_digest": "0fbdd0da7bdc0d2b04e26216b4080dbd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2733, "upload_time": "2018-09-28T22:02:43", "url": "https://files.pythonhosted.org/packages/34/42/7458d6aaaf713531262f5163f37dd7fc174ae0e60d49c48ec0684904b8f9/bites-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "8ce350e369599de47136f623dc0e4ef7", "sha256": "550398cd1ba7e66aa16ef4904c36a4ca9632ddc16fd3b595333f139f81dba9c2" }, "downloads": -1, "filename": "bites-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "8ce350e369599de47136f623dc0e4ef7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3254, "upload_time": "2018-09-28T22:14:22", "url": "https://files.pythonhosted.org/packages/cb/76/be24d048871a0dfb6bcf7947d411b05e06c79b00228a1aff7447ad50a373/bites-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "404bc41b5f8731deddb157209a72fcd0", "sha256": "40bf1fc7c77f1d54b6ece83ffea6da86798ddf24ac90188013c8ba362443b403" }, "downloads": -1, "filename": "bites-0.0.4.tar.gz", "has_sig": false, "md5_digest": "404bc41b5f8731deddb157209a72fcd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2782, "upload_time": "2018-09-28T22:14:29", "url": "https://files.pythonhosted.org/packages/36/63/12f5faa3162f19e35892c7fc4516e2c654db49a64ebc7784d6aa0a2c776f/bites-0.0.4.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "ce89591467ae19a40a5569e9c85c6457", "sha256": "ee1fcd3b7c332ce447dc48c7325a09d978f37bfc6ee3a428878ff6fb7245627c" }, "downloads": -1, "filename": "bites-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "ce89591467ae19a40a5569e9c85c6457", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10058, "upload_time": "2018-09-30T20:08:12", "url": "https://files.pythonhosted.org/packages/78/e5/f3a269a5a3a9ea1e4b1bd4434b561e6e14a9c0beba220a806b3cb733aa75/bites-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d8576f643131d32d24cf59b654ab6fef", "sha256": "26d9a83356b696616778b83eb88542b5f134877edcd64c1834ac23f0308b11e3" }, "downloads": -1, "filename": "bites-0.0.6.tar.gz", "has_sig": false, "md5_digest": "d8576f643131d32d24cf59b654ab6fef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9277, "upload_time": "2018-09-30T20:08:13", "url": "https://files.pythonhosted.org/packages/28/29/30249a52ad1a2e50390ff981ce6661aed24ae6b7c6aa9fd554d64b80c041/bites-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "e1b57cbddf72dbb2de67daa85ffe335c", "sha256": "95fd8f98781af37df21957cbfd21876c7965ca892cc0c5b6982253dd36fa6b6a" }, "downloads": -1, "filename": "bites-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "e1b57cbddf72dbb2de67daa85ffe335c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10785, "upload_time": "2018-09-30T20:51:18", "url": "https://files.pythonhosted.org/packages/c1/24/e797dab6b3b20dce2b628608a34c74fe7c578503a0895bbc5df45d101241/bites-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4791212b545fffe8e2a24cf4c5b6000d", "sha256": "56d01bda38e039c2824d3c836ea7c7cf39cefa4580867437f86f3dd517bd4d30" }, "downloads": -1, "filename": "bites-0.0.7.tar.gz", "has_sig": false, "md5_digest": "4791212b545fffe8e2a24cf4c5b6000d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10283, "upload_time": "2018-09-30T20:51:19", "url": "https://files.pythonhosted.org/packages/f9/1e/e9584ea2f86837ed0dc5455a2edaf86152c03b1e571e5225903c4188b2d9/bites-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "94d3e0c834315956f18d04bac850e7d1", "sha256": "f6f1f5ec851120257780ce0ecaf2c81969189f4950288d32cca86842df520df1" }, "downloads": -1, "filename": "bites-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "94d3e0c834315956f18d04bac850e7d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10997, "upload_time": "2018-10-08T04:25:16", "url": "https://files.pythonhosted.org/packages/81/7d/a57174b99916d7a944820925e105083316aa4f5bde3b044635ebf53cdc7d/bites-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe14d9a462d067f4f1ef753b49e5e7c1", "sha256": "a435a5ce77d087e02aa37855b3d8548334da613e004754355408beb824e4eebd" }, "downloads": -1, "filename": "bites-0.0.8.tar.gz", "has_sig": false, "md5_digest": "fe14d9a462d067f4f1ef753b49e5e7c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10503, "upload_time": "2018-10-08T04:25:18", "url": "https://files.pythonhosted.org/packages/b0/cb/6c7f25284a93d7a90fb4fdf47d83a908979b98916ab14c9f7f0f26d4a81d/bites-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "71301fb176d8bbaac6afe794ca94d145", "sha256": "9846acde75874acfa0f451d7503110904472da9506d4bc1e494902492fe10798" }, "downloads": -1, "filename": "bites-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "71301fb176d8bbaac6afe794ca94d145", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11436, "upload_time": "2018-10-11T13:48:14", "url": "https://files.pythonhosted.org/packages/2e/cd/4e46f7c4154de05a4cea843dea01bb7b3f155f7bd45d04aa1ea5e26477de/bites-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a682bb8aff11d15497daad1982baafb", "sha256": "f77c66a136ad97231a099a8e09dc4b5f64c9de9e61541953f7eb58465b9440ed" }, "downloads": -1, "filename": "bites-0.0.9.tar.gz", "has_sig": false, "md5_digest": "5a682bb8aff11d15497daad1982baafb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10975, "upload_time": "2018-10-11T13:48:16", "url": "https://files.pythonhosted.org/packages/46/b6/2a420f95cef487681005baf9083b29a858454e0f67278f957f7326e11b43/bites-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "037bd71302882ed218aedb49ce129b47", "sha256": "aa802fafebf37796df4858cbc3f860609461cc6647f8af6be60f00b2914b2db4" }, "downloads": -1, "filename": "bites-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "037bd71302882ed218aedb49ce129b47", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10478, "upload_time": "2018-11-03T17:50:39", "url": "https://files.pythonhosted.org/packages/bf/3f/359a33ffebc3b50c50bdd485b2b9969c95334a5b5d55eaea85eae423c424/bites-0.0.10-py3-none-any.whl" } ] }