{ "info": { "author": "Justin Engel", "author_email": "jtengel08@gmail.com", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3" ], "description": "# bitflags\nBit flags implementation using a C Union. This library removes the need to use ctypes and helps you quickly access what \nbits are toggled.\n\nThis class is built off of the Bit Manipulation guide found at https://wiki.python.org/moin/BitManipulation under the \nBit fields section.\n\nThis library includes a class based approach to bit flags (BitFlags) and a one time dynamic bit flags object (bitflags).\n\nThe individual bits can always be accessed with 'flag.bit_0', 'flag.bit_1', 'flag.bit_2', ...\n\n## Example - BitFlags\nThis is the class based approach.\n\n```python\nfrom bitflags import BitFlags\n\n\nclass MyFlags(BitFlags):\n options = {0: \"flag1\", 1: \"flag2\", 2: \"flag3\", 3: \"flag4\", 4: \"Something Happened\"}\n \n \nf = MyFlags(0)\n\nassert f.value == 0\nassert int(f) == 0\n\nf.value = 0b101 # 5 - bin(5) shows the bit values (0b101)\nassert f.value == 0b101\n\n# You can always access the bit value with 'bit_X'\n# Access all of the bits (The number of bits can be changed by setting the class attribute nbits or nbytes\nprint(f.bit_7, f.bit_6, f.bit_5, f.bit_4, f.bit_3, f.bit_2, f.bit_1, f.bit_0)\n# 0 0 0 0 0 1 0 1\n\n# Access the custom flags as attributes\nassert f.flag1 == 1\nassert f.flag2 == 0\nassert f.flag3 == 1\nassert f.flag4 == 0\nassert f.something_happened == 0\n\n# Get a list of flag options\nassert f.get_flags() == ['flag1', 'flag3']\n\n# Convert to use the data types\nassert str(f) == 'flag1, flag3'\nassert int(f) == 5\nassert bytes(f) == b'\\x05'\n```\n\nThis class was made to be flexible if you want the attributes to be different from the display options.\n\n ```python\nfrom bitflags import BitFlags\n\n\nclass MyFlags(BitFlags):\n options = {0: \"Failure\", 1: \"Warning\", 2: \"System 2% Overloaded\"}\n \nf = MyFlags(0b111)\nassert hasattr(f, 'failure')\nassert hasattr(f, 'warning')\nassert hasattr(f, 'system_2_overloaded')\n\nassert f.get_flags() == ['Failure', 'Warning', 'System 2% Overloaded']\n\n\nclass SpecialFlags(BitFlags):\n options = {0: \"2% System Failure\", # Note: variable name cannot start with a number!\n 1: \"System Overloaded\",\n 2: \"System Safe\"}\n fields = {'system_failure': 0, 'system_overload': 1, 'safe': 2} # Custom variables to access the bits\n \ns = SpecialFlags(7)\n\nassert s.system_failure == 1\nassert s.system_overload == 1\nassert s.safe == 1\n\nassert s.get_flags() == [\"2% System Failure\", \"System Overloaded\", \"System Safe\"]\n\n\ns2 = SpecialFlags(1)\nassert s.get_flags() == [\"2% System Failure\"]\n```\n\nYou can also make a pattern for options.\n\n```python\nfrom bitflags import BitFlags\n\n\nclass MyFlags(BitFlags):\n pattern = '%i'\n\nf = MyFlags()\nf.value = 0b101 # 5 - bin(5) shows the bit values (0b101)\nassert f.value == 0b101\n\n# Get a list of flag options\nassert f.get_flags() == ['0', '2']\n\n# Convert to use the data types\nassert str(f) == '0, 2'\nassert int(f) == 5\nassert bytes(f) == b'\\x05'\n```\n\n\n## Example - bitflags\nThe one time object bit flags. This is basically the same thing as BitFlags only the instance constructor allows you \nto set the options, fields, and number of bits/bytes.\n\n```python\nfrom bitflags import bitflags\n\nf = bitflags(flag1=1, flag3=1, options={0: \"flag1\", 1: \"flag2\", 2: \"flag3\", 3: \"flag4\", 4: \"Something Happened\"})\n\nassert f.value == 0b101\n\nassert f.flag1 == 1\nassert f.flag2 == 0\nassert f.flag3 == 1\nassert f.flag4 == 0\nassert f.something_happened == 0\n\n# Change the fields that access the bits.\nf.set_fields({'a': 0, 'b': 1, 'c': 2, 'd': 3})\n\nassert f.a == f.bit_0\nassert f.b == f.bit_1\nassert f.c == f.bit_2\nassert f.d == f.bit_3\n```\n\nThe bitflags constructor uses type to create a new BitFlags class. This class isn't really re-usable unless you access \nthat class from the object that was created.\n\n```python\nfrom bitflags import bitflags\n\nf = bitflags(flag1=1, flag3=1, options={0: \"flag1\", 1: \"flag2\", 2: \"flag3\", 3: \"flag4\", 4: \"Something Happened\"})\n\nassert f.value == 0b101\n\nf2 = type(f)(0b1)\nassert f2.flag1 == 1\nassert f2.value == 1\nassert f.value == 0b101\n\nf3 = f.__class__(0b10)\nassert f3.flag1 == 0\nassert f3.flag2 == 1\nassert f3.value == 2\nassert f2.value == 1\nassert f.value == 0b101\n```\n\nIf you want to use multiple bit flag objects that have the same fields then it is better to use BitFlags class \ninheritance.", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/justengel/bitflags/archive/v1.0.6.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/justengel/bitflags", "keywords": "bit,flags,Union,bitflags", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "bitflags", "package_url": "https://pypi.org/project/bitflags/", "platform": "any", "project_url": "https://pypi.org/project/bitflags/", "project_urls": { "Download": "https://github.com/justengel/bitflags/archive/v1.0.6.tar.gz", "Homepage": "https://github.com/justengel/bitflags" }, "release_url": "https://pypi.org/project/bitflags/1.0.6/", "requires_dist": null, "requires_python": "", "summary": "Bit flags implementation using a C Union. This library removes the need to use ctypes and helps you quickly access what bits are toggled.", "version": "1.0.6" }, "last_serial": 3974818, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "4969b7d3f7d3ca148874a75c2396ae42", "sha256": "3abbe67a1d788dc6b2aab0037408b512c837e6d559cf9e68ec11fa975b877bb6" }, "downloads": -1, "filename": "bitflags-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4969b7d3f7d3ca148874a75c2396ae42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9135, "upload_time": "2018-06-08T14:29:56", "url": "https://files.pythonhosted.org/packages/2c/78/2a6c2d9df6fc57478f7fb409cff681342615463262bfa47034e2a4e401ec/bitflags-0.1.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "90a81d59e8669fced9d9185f1c306b2b", "sha256": "856b44d5f3213c936770a83e318b40f499d54517693dcca595157407359be5e1" }, "downloads": -1, "filename": "bitflags-1.0.0.tar.gz", "has_sig": false, "md5_digest": "90a81d59e8669fced9d9185f1c306b2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9176, "upload_time": "2018-06-08T14:47:50", "url": "https://files.pythonhosted.org/packages/68/0d/79eda581ce1e6fe1f82b85d79a1cde24a0360905da5d89b7ce9ca135a663/bitflags-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "c0744f8420b07f1429ce88a04e156176", "sha256": "2887ac23879719814f5f794c1dad016b819aa8fc95fdc9b6b5bff1093d865ee4" }, "downloads": -1, "filename": "bitflags-1.0.1.tar.gz", "has_sig": false, "md5_digest": "c0744f8420b07f1429ce88a04e156176", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9553, "upload_time": "2018-06-11T12:48:53", "url": "https://files.pythonhosted.org/packages/47/57/7ea2d5b5cd142d032bbf46ce5deaf221bd9f5967a9d03f0a05bd19deeabb/bitflags-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "4bfe9cd42a999d614606cbcf588545bd", "sha256": "70b0f26a370bbc238d43e8c1e5aaa588aebc1472c35d7e76c293e2e5c12a8f65" }, "downloads": -1, "filename": "bitflags-1.0.2.tar.gz", "has_sig": false, "md5_digest": "4bfe9cd42a999d614606cbcf588545bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9699, "upload_time": "2018-06-11T13:39:18", "url": "https://files.pythonhosted.org/packages/b9/80/3de7642ffa4eb9387870fa628cd064244a3f186fa3595fbb1d9ed0058943/bitflags-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "5d020f71657c01f3a778221126e28dc2", "sha256": "863a90f0bb78e5af3564d81d7fd8d8b4110a82d16326498549d83ddb1999576e" }, "downloads": -1, "filename": "bitflags-1.0.3.tar.gz", "has_sig": false, "md5_digest": "5d020f71657c01f3a778221126e28dc2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9890, "upload_time": "2018-06-11T14:25:07", "url": "https://files.pythonhosted.org/packages/5c/b9/00712f5e1ae18be29e0cb35b5b62e6bf9f70467556935312dbeb56a5e0b0/bitflags-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "218baa3ec3a39e0ee9f6a63dd2a53532", "sha256": "985fefb95b956fd02f2e08937eb837fe30e667ae65b2c793fac22fcbdfd8def8" }, "downloads": -1, "filename": "bitflags-1.0.4.tar.gz", "has_sig": false, "md5_digest": "218baa3ec3a39e0ee9f6a63dd2a53532", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9929, "upload_time": "2018-06-11T14:51:47", "url": "https://files.pythonhosted.org/packages/0e/6b/24149bb92e7b6019f4b1922f95dc808a077232ed05d24c0cec12afe27fd3/bitflags-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "06b879bc2e7112f6b8ed337790c6f524", "sha256": "834b1e4c116b4be1c22e8a9a07633fb837a537f27e0417d107c37aa3fb05200a" }, "downloads": -1, "filename": "bitflags-1.0.5.tar.gz", "has_sig": false, "md5_digest": "06b879bc2e7112f6b8ed337790c6f524", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9939, "upload_time": "2018-06-12T19:25:35", "url": "https://files.pythonhosted.org/packages/a3/6b/2f9bfed5e45b2039dd4eb3911ad767ded3465857e699f238dec4a8b61acf/bitflags-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "e6b58181f3ce0ea99c12f4ac935c6868", "sha256": "68b894705c65289d699eb05a05d4d3bd01f4b8143af62a9c5e2fc18e08d04c87" }, "downloads": -1, "filename": "bitflags-1.0.6.tar.gz", "has_sig": false, "md5_digest": "e6b58181f3ce0ea99c12f4ac935c6868", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9938, "upload_time": "2018-06-12T19:39:22", "url": "https://files.pythonhosted.org/packages/04/75/703052251b080d2d2bec987efdaa84dc2df33d504ad8e4a55956d6a6eaca/bitflags-1.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e6b58181f3ce0ea99c12f4ac935c6868", "sha256": "68b894705c65289d699eb05a05d4d3bd01f4b8143af62a9c5e2fc18e08d04c87" }, "downloads": -1, "filename": "bitflags-1.0.6.tar.gz", "has_sig": false, "md5_digest": "e6b58181f3ce0ea99c12f4ac935c6868", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9938, "upload_time": "2018-06-12T19:39:22", "url": "https://files.pythonhosted.org/packages/04/75/703052251b080d2d2bec987efdaa84dc2df33d504ad8e4a55956d6a6eaca/bitflags-1.0.6.tar.gz" } ] }