{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "==============\nsocorro-siggen\n==============\n\nThis is an experimental extraction of the Socorro signature generation code.\n\n:Code: https://github.com/willkg/socorro-siggen\n:Documentation: Check the ``README.rst`` file\n:Changelog: Check the ``HISTORY.rst`` file\n:Issue tracker: https://github.com/willkg/socorro-siggen/issues\n:License: MPLv2\n:Status: Alpha\n:Community Participation Guidelines: `Guidelines `_\n\n\nInstalling\n==========\n\nsocorro-siggen is available on `PyPI `_. You can install it\nwith::\n\n $ pip install siggen\n\n\nBasic use\n=========\n\nYou can use socorro-siggen as a command line::\n\n $ signify \n SIGNATURE HERE\n\n\nAlternatively::\n\n $ cat | signify\n\n\nYou can use socorro-siggen as a library::\n\n from siggen.generator import SignatureGenerator\n\n generator = SignatureGenerator()\n\n crash_data = {\n ...\n }\n\n ret = generator.generate(crash_data)\n print(ret['signature'])\n\n\nThings to know\n==============\n\nThings to know about siggen:\n\n1. Make sure to use the latest version of siggen and update frequently.\n We use semantic versioning, so the API will not change for MINOR\n and PATCH releases. Feel free to restrict on the MAJOR version.\n\n2. Signatures generated will change between siggen versions. The API\n may be stable, but bug fixes and changes to the siglist files will\n affect signature generation output. Hopefully for the better!\n\n3. If you have problems, please open up an issue. Please include the\n version of siggen.\n\n When using siggen, you can find the version like this::\n\n import siggen\n print(siggen.__version__)\n\n\nCrash data schema\n=================\n\nThis is the schema for the crash data structure::\n\n {\n crashing_thread: , // Optional, The index of the crashing thread in threads.\n // This defaults to None which indicates there was no\n // crashing thread identified in the crash report.\n\n threads: [ // Optional, list of stack traces for c/c++/rust code.\n {\n frames: [ // List of one or more frames.\n {\n function: , // Optional, The name of the function.\n // If this is ``None`` or not in the frame, then signature\n // generation will calculate something using other data in\n // the frame.\n\n module: , // Optional, name of the module\n file: , // Optional, name of the file\n line: , // Optional, line in the file\n module_offset: , // Optional, offset in hex in the module for this frame\n offset: // Optional, offset in hex for this frame\n\n // Signature parts are computed using frame data in this\n // order:\n\n // 1. if there's a function (and optionally line)--use\n // that\n // 2. if there's a file and a line--use that\n // 3. if there's an offset and no module/module_offset--use\n // that\n // 4. use module/module_offset\n }\n // ... additional frames\n ],\n\n thread_name: , // Optional, The name of the thread.\n // This isn't used, yet, but might be in the future for\n // debugging purposes.\n\n frame_count: // Optional, This is the total number of frames. This\n // isn't used.\n },\n // ... additional threads\n ],\n\n java_stack_trace: , // Optional, If the crash is a Java crash, then this will\n // be the Java traceback as a single string. Signature\n // generation will split this string into lines and then\n // extract frame information from it to generate the\n // signature.\n\n // FIXME(willkg): Write up better description of this.\n\n oom_allocation_size: , // Optional, The allocation size that triggered an\n // out-of-memory error. This will get added to the\n // signature if one of the indicator functions appears in\n // the stack of the crashing thread.\n\n abort_message: , // Optional, The abort message for the crash, if there is\n // one. This is added to the beginning of the signature.\n\n hang_type: , // Optional.\n // 1 here indicates this is a chrome hang and we look at\n // thread 0 for generation.\n // -1 indicates another kind of hang.\n\n async_shutdown_timeout: , // Optional, This is a text field encoded in JSON with\n // \"phase\" and \"conditions\" keys.\n // FIXME(willkg): Document this structure better.\n\n jit_category: , // Optional, If there's a JIT classification in the\n // crash, then that will override the signature\n\n ipc_channel_error: , // Optional, If there is an IPC channel error, it\n // replaces the signature.\n\n ipc_message_name: , // Optional, This gets added to the signature if there\n // was an IPC message name in the crash.\n\n additional_minidumps: , // Optional, A crash report can contain multiple minidumps.\n // This is a comma-delimited list of minidumps other than\n // the main one that the crash had.\n\n // Example: \"browser,flash1,flash2,content\"\n\n mdsw_status_string: , // Optional, Socorro-generated\n // This is the minidump-stackwalk status string. This\n // gets generated when the Socorro processor runs the\n // minidump through minidump-stackwalk. If you're not\n // using minidump-stackwalk, you can ignore this.\n\n moz_crash_reason: , // Optional, This is the MOZ_CRASH_REASON value. This\n // doesn't affect anything unless the value is\n // \"MOZ_RELEASE_ASSERT(parentBuildID == childBuildID)\".\n\n os: , // Optional, The name of the operating system. This\n // doesn't affect anything unless the name is \"Windows\n // NT\" in which case it will lowercase module names when\n // iterating through frames to build the signature.\n }\n\n\nMissing keys in the structure are treated as ``None``, so you can pass in a\nminimal structure with just the parts you define.\n\n\nExamples\n========\n\nExample almost minimal, somewhat nonsense ``crash_data.json``::\n\n {\n \"os\": \"Linux\",\n \"crashing_thread\": 0,\n \"threads\": [\n {\n \"frames\": [\n {\n \"frame\": 0,\n \"function\": \"SomeFunc\",\n \"line\": 20,\n \"file\": \"somefile.cpp\",\n \"module\": \"foo.so.5.15.0\",\n \"module_offset\": \"0x37a92\",\n \"offset\": \"0x7fc641052a92\"\n },\n {\n \"frame\": 1,\n \"function\": \"SomeOtherFunc\",\n \"line\": 444,\n \"file\": \"someotherfile.cpp\",\n \"module\": \"bar.so\",\n \"module_offset\": \"0x39a55\",\n \"offset\": \"0x7fc641044a55\"\n }\n ]\n }\n ]\n }\n\n\nThat produces this output::\n\n $ cat crash_data.json | signify\n {\n \"notes\": [],\n \"proto_signature\": \"SomeFunc | SomeOtherFunc\",\n \"signature\": \"SomeFunc\"\n }\n\n\nRelease process\n===============\n\n1. Create branch\n2. Update version and release date in ``siggen/__init__.py``\n3. Update ``HISTORY.rst``\n4. Push the branch, create a PR, review it, merge it\n5. Create a signed tag, push to github::\n\n git tag -s v0.1.0\n git push --tags [REMOTE] master\n\n6. Build::\n\n python setup.py sdist bdist_wheel\n\n7. Upload to PyPI::\n\n twine upload dist/*\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/willkg/socorro-siggen", "keywords": "", "license": "Mozilla Public License v2", "maintainer": "Will Kahn-Greene", "maintainer_email": "willkg@mozilla.com", "name": "siggen", "package_url": "https://pypi.org/project/siggen/", "platform": "", "project_url": "https://pypi.org/project/siggen/", "project_urls": { "Homepage": "https://github.com/willkg/socorro-siggen" }, "release_url": "https://pypi.org/project/siggen/1.0.0/", "requires_dist": [ "glom", "requests", "six", "ujson" ], "requires_python": ">=3.5", "summary": "Experimental extraction of Socorro signature generation", "version": "1.0.0" }, "last_serial": 5309386, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "cf181ba12af5cd70ee8ead74550c8e11", "sha256": "3cba8a7f0338eb698f1b998f9f2cba26e424a2d80187472aba9473b98e304aef" }, "downloads": -1, "filename": "siggen-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "cf181ba12af5cd70ee8ead74550c8e11", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 36135, "upload_time": "2018-06-27T19:51:33", "url": "https://files.pythonhosted.org/packages/1f/d4/ee7aefd43d03353be1fd55c69d75df679c4b815e2073fbfcb79fdce2b9c3/siggen-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "31d6013fb1fc3f3a75c3801d650f26b9", "sha256": "dbd58352cce6de05eb7d6a4edca2e8617e93eac9a0522963b9a3999f7635f6d7" }, "downloads": -1, "filename": "siggen-0.1.0.tar.gz", "has_sig": false, "md5_digest": "31d6013fb1fc3f3a75c3801d650f26b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35643, "upload_time": "2018-06-27T19:51:34", "url": "https://files.pythonhosted.org/packages/0e/0e/4637cdf6d1f07e3af9956f45433ff0eb84f3c2d7868b6c5616f1341ddddc/siggen-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7685a914ab73c99cfd432f5cadd5ef80", "sha256": "390b3cca4e9d6dd68f71d670e9003c29c1ccb7e6346703c8ff00f871276d84e0" }, "downloads": -1, "filename": "siggen-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "7685a914ab73c99cfd432f5cadd5ef80", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 36244, "upload_time": "2018-06-28T15:32:36", "url": "https://files.pythonhosted.org/packages/cb/92/ceacf71c7e91782cddde8d1f7c878b454d784e39a7a477eb6b6e93abadfb/siggen-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "962ca887c0590d92473fafdaf771b0ef", "sha256": "fab7c46c100b764854d2e9870c19b20463123744f151250cfede6af3d9b4d815" }, "downloads": -1, "filename": "siggen-0.1.1.tar.gz", "has_sig": false, "md5_digest": "962ca887c0590d92473fafdaf771b0ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35992, "upload_time": "2018-06-28T15:32:37", "url": "https://files.pythonhosted.org/packages/db/ff/36e8a24918188ac711226628572c73009839f0f687f645d15b880ce2342d/siggen-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "14153dda4bf0b540b2385e9dff8a6408", "sha256": "b32ff8b6b106876ca3210c0e80ee6dd73004758be60a3c8cb5f3835536995cee" }, "downloads": -1, "filename": "siggen-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "14153dda4bf0b540b2385e9dff8a6408", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 36760, "upload_time": "2018-07-26T15:15:37", "url": "https://files.pythonhosted.org/packages/26/12/98b51ff3653861733d1f70e42924eff0f2fc31b701ab0691b773cfba47ee/siggen-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f2bed8d5aa3db0664e4a2842ae9f982b", "sha256": "776f9452676befe5fa22617044735c185d950c41804e6d8575273e05a7ab4602" }, "downloads": -1, "filename": "siggen-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f2bed8d5aa3db0664e4a2842ae9f982b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36628, "upload_time": "2018-07-26T15:15:38", "url": "https://files.pythonhosted.org/packages/e1/cc/ed7187806e6f3f5a2aa06ce974700642f40d4c95801bc533188e088218b1/siggen-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "afe5714ac0ad371bd010d1c21d7e6d2b", "sha256": "15ef7198f92227fdd6cb4f62a1127fafaa5ea27fb29b0ee408df7c5675ea5149" }, "downloads": -1, "filename": "siggen-0.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "afe5714ac0ad371bd010d1c21d7e6d2b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 40980, "upload_time": "2018-08-03T17:50:29", "url": "https://files.pythonhosted.org/packages/25/ab/d4c51869e045e6e97b9a2343e96ec1c144a63cb57c78d299a616fe3f6b6b/siggen-0.1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a17e68bbcca9f83fb55e53af053e687d", "sha256": "4febe41eaf90c4b4d77cfe26da4603f9110f025e3770e0b41cab0e45820091fb" }, "downloads": -1, "filename": "siggen-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a17e68bbcca9f83fb55e53af053e687d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39241, "upload_time": "2018-08-03T17:50:30", "url": "https://files.pythonhosted.org/packages/34/86/4691cdc311235c8738791b5d955b8c501cc59bad87c1d2d6b91c12fb3248/siggen-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "48cbddb1882cc4a8b3ba8e88b8bd101d", "sha256": "4024e7360d48ce12c852eb3e4d6ad634853b9e5f65df187d18e695a34de83f03" }, "downloads": -1, "filename": "siggen-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "48cbddb1882cc4a8b3ba8e88b8bd101d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52102, "upload_time": "2018-08-29T21:23:15", "url": "https://files.pythonhosted.org/packages/a9/c9/18a69e82f263d57d384cdf19556b799804c78e41ff791cbff98f628bf4d9/siggen-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7b250eeb2c621dbe37856d31c7a6648", "sha256": "4a59e52e93fff8965775565d1193c47a5d94aa6e403f519e86b09244e01de7eb" }, "downloads": -1, "filename": "siggen-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d7b250eeb2c621dbe37856d31c7a6648", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45708, "upload_time": "2018-08-29T21:23:16", "url": "https://files.pythonhosted.org/packages/3e/ad/16bf0738934293f43d7fc837f21e052c582408857af57c71a11ee28bb45f/siggen-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "6e59b98837d075521387a981d9f77554", "sha256": "64ef0b722695e16fb9d77e3e870974550727692af4641678f8030b5830636435" }, "downloads": -1, "filename": "siggen-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "6e59b98837d075521387a981d9f77554", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 49462, "upload_time": "2019-01-04T23:19:16", "url": "https://files.pythonhosted.org/packages/46/16/f61f9bbd66854006f5f411461b982ce4965f797da4514dcf0ad1f68a225f/siggen-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "86b4b82d5a2c1b469d71413f7e6f0c5c", "sha256": "ee79a40d5fad6ce31d90621c1f7b50743361526edb1a0d761cdbc7109435fa58" }, "downloads": -1, "filename": "siggen-0.2.1.tar.gz", "has_sig": false, "md5_digest": "86b4b82d5a2c1b469d71413f7e6f0c5c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 47309, "upload_time": "2019-01-04T23:19:18", "url": "https://files.pythonhosted.org/packages/6f/28/1abdc784f91410a2b5a0d943064da8a37ac6c5381050d09f1a3fcd38bc98/siggen-0.2.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "e423e6f7a4acad32abedb6796fe2683e", "sha256": "3ffd8b7f1b53f3ac980c0b103070a1ec82ee123aec1bb86a85d68cbae75d2e37" }, "downloads": -1, "filename": "siggen-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "e423e6f7a4acad32abedb6796fe2683e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.5", "size": 50680, "upload_time": "2019-05-23T20:26:06", "url": "https://files.pythonhosted.org/packages/b4/4e/4a278b1de6e96cdd22a72910f5924d4a617d618de5f1fea9785361b8884a/siggen-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "422ba0befc80113d05b600c1eb774847", "sha256": "99792f0f9b1b3704b8948ec5d5dbf0122278af4d6f7db3b3b4e642a1b284ee46" }, "downloads": -1, "filename": "siggen-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "422ba0befc80113d05b600c1eb774847", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 56095, "upload_time": "2019-05-23T20:34:51", "url": "https://files.pythonhosted.org/packages/d8/34/5e52c07695a783b1caf13fb5add3b5b6ee521eb9fc51105a79471deace07/siggen-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19c21e62745a07b9d9407edc35f88dda", "sha256": "db0da75c41750428d60f984bb8416de00127f7683c6805609a8a28efadb3c83d" }, "downloads": -1, "filename": "siggen-1.0.0.tar.gz", "has_sig": false, "md5_digest": "19c21e62745a07b9d9407edc35f88dda", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 48890, "upload_time": "2019-05-23T20:26:08", "url": "https://files.pythonhosted.org/packages/4d/22/f65e85e1fed84478e490b73319e3bcbf6846efd12c613dfff226bae6f05d/siggen-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e423e6f7a4acad32abedb6796fe2683e", "sha256": "3ffd8b7f1b53f3ac980c0b103070a1ec82ee123aec1bb86a85d68cbae75d2e37" }, "downloads": -1, "filename": "siggen-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "e423e6f7a4acad32abedb6796fe2683e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3.5", "size": 50680, "upload_time": "2019-05-23T20:26:06", "url": "https://files.pythonhosted.org/packages/b4/4e/4a278b1de6e96cdd22a72910f5924d4a617d618de5f1fea9785361b8884a/siggen-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "422ba0befc80113d05b600c1eb774847", "sha256": "99792f0f9b1b3704b8948ec5d5dbf0122278af4d6f7db3b3b4e642a1b284ee46" }, "downloads": -1, "filename": "siggen-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "422ba0befc80113d05b600c1eb774847", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 56095, "upload_time": "2019-05-23T20:34:51", "url": "https://files.pythonhosted.org/packages/d8/34/5e52c07695a783b1caf13fb5add3b5b6ee521eb9fc51105a79471deace07/siggen-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19c21e62745a07b9d9407edc35f88dda", "sha256": "db0da75c41750428d60f984bb8416de00127f7683c6805609a8a28efadb3c83d" }, "downloads": -1, "filename": "siggen-1.0.0.tar.gz", "has_sig": false, "md5_digest": "19c21e62745a07b9d9407edc35f88dda", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 48890, "upload_time": "2019-05-23T20:26:08", "url": "https://files.pythonhosted.org/packages/4d/22/f65e85e1fed84478e490b73319e3bcbf6846efd12c613dfff226bae6f05d/siggen-1.0.0.tar.gz" } ] }