{ "info": { "author": "Fabio Espinosa", "author_email": "f.e@cern.ch", "bugtrack_url": null, "classifiers": [], "description": "[![Build Status](https://travis-ci.org/fabioespinosa/runregistry_api_client.svg?branch=master)](https://travis-ci.org/fabioespinosa/runregistry_api_client)\n\n# Run Registry Client\n\nPython client to retrieve and query data from [CMS Run Registry](https://cmsrunregistry.web.cern.ch).\n\n## Installation\n\n```bash\npip install runregistry\n```\n\n## Python version and Virtual env\n\nPython version>=3.6 is required for this package.\n\nTo use python 3.6 in lxplus: https://cern.service-now.com/service-portal/article.do?n=KB0000730\nA virtual environment is also required, if you are in lxplus you should run the following commands:\n\n```bash\nvirtualenv venv\nsource venv/bin/activate\n```\n\n## Authentication (Prerequisite)\n\nYou must provide a way for the client to access a [Grid user certificate](https://ca.cern.ch/ca/).\n\nYou can either do this in 3 possible ways:\n\n1. Provide the certificate manually (explained below).\n2. providing a **passwordless** user certificate in the conventional path (first `~/private/` and second `~/.globus/`) (explained below).\n3. Setting your own path where you store the certificate in an environment variable: `CERN_CERTIFICATE_PATH`\n\n### Provide the certificate manually\n\n1. Download a grid user certificate from [here](https://ca.cern.ch/ca/).\n2. Convert it into public and private key (**The certificates have to be passwordless**.\n ):\n\n```bash\nmkdir -p ~/private\n# For next commands Import Password is blank, PEM passphrase needs to be set\nopenssl pkcs12 -clcerts -nokeys -in myCertificate.p12 -out ~/private/usercert.pem\nopenssl pkcs12 -nocerts -in myCertificate.p12 -out ~/private/userkey.tmp.pem\nopenssl rsa -in ~/private/userkey.tmp.pem -out ~/private/userkey.pem\n```\n\nIf you are in lxplus, everything should be done at this point since the package will first look for `~/private/` and the above commands will set up the certificate in `~/private/`.\n\nIf you want to continue providing the certificate manually, you will have to modify the commands above with -out into a folder you remember.\n\nThen use the client in the following way:\n\n```python\nimport runregistry\nrun = runregistry.get_run(run_number=328762, cert=(cert, key) )\n```\n\nwhere cert and key are paths to the usercert.pem and userkey.pem generated above.\n\n## Usage\n\n### Get a single run (get_run):\n\n```python\nimport runregistry\nrun = runregistry.get_run(run_number=328762)\n```\n\n### Query several runs (get_runs):\n\n```python\nimport runregistry\nruns = runregistry.get_runs(run_number={\n 'or': [328762, 323555, 323444]\n})\n```\n\nApply a custom filter (run_numbers between 309000 and 310000 which had at least one GOOD dt lumisection)\n\n```python\nimport runregistry\nruns = runregistry.get_runs(\n filter={\n 'run_number': {\n 'and':[\n {'>': 309000},\n {'<': 310000}\n ]\n },\n 'dt-dt': 'GOOD'\n }\n)\n```\n\nDo note that we use dt-dt ('dt' twice) this is due to the fact that there are multiple workspaces, the first 'dt' states we are in dt workspace, the second 'dt' states we want column 'dt'. So the syntax for status flags is {workspace}-{column}. If we wanted runs with the strip column from tracker workspace to have at least 1 lumisection GOOD, the query would look like this:\n\n```python\nimport runregistry\nruns = runregistry.get_runs(\n filter={\n 'run_number': {\n 'and':[\n {'>': 309000},\n {'<': 310000}\n ]\n },\n 'tracker-strip': 'GOOD'\n }\n)\n```\n\nDepending on the attribute you can use different operators:\n\n#### Operators\n\n| Attribute | Supported operators |\n| --------- | :-----------------------------: |\n| number | '=', '>', '<', '>=', '<=', '<>' |\n| String | =, like, notlike |\n| Boolean | = (true, false) |\n| date | '=', '>', '<', '>=', '<=', '<>' |\n\nWhen using 'like' or 'notlike' operator, you must surround your query with percentage signs, see example below.\n\nWhen filtering for triplet attributes (anything that is GOOD/BAD/STANDBY...) you must not use any String values, the only value allowed is strict equality '=' and is set by default. The values allowed are GOOD, BAD, STANDBY, NOTSET, EXCLUDED and EMPTY.\n\nYou can combine the filters as well:\n\n```python\nimport runregistry\nruns = runregistry.get_runs(\n filter={\n 'run_number': {\n 'and':[\n {'>': 309000},\n {'<': 310000}\n ]\n },\n 'hlt_key': {\n 'like': '%commissioning2018%'\n }\n 'significant': {\n '=': True\n }\n }\n)\n```\n\nIf by observing the Network Requests in RR web application, you want to use the same filters observed by the network request. Just passs `ignore_filter_transformation=True` to any query.\n\nExample (run_numbers between 309000 and 310000 which had at least one GOOD dt lumisection):\n\n```python\nimport runregistry\nruns = runregistry.get_runs(\n filter={\n 'run_number': {\n 'and':[\n {'>': 309000},\n {'<': 310000}\n ]\n },\n 'oms_attributes.hlt_key': {\n 'like': '%commissioning2018%'\n },\n 'triplet_summary.dt-dt.GOOD': {\n '>': 0\n }\n },\n ignore_filter_transformation=True\n)\n```\n\nAlso, if by observing the Network Requests in RR web application, you want to obtain the data as it is seen in the network requests. Just `compress_attributes=False`, for example:\n\n```python\nimport runregistry\nruns = runregistry.get_runs(\n filter={\n 'run_number': {\n 'and':[\n {'>': 309000},\n {'<': 310000}\n ]\n },\n 'dt': 'GOOD'\n },\n compress_attributes=False\n)\n```\n\nquerying by comments and cause is not yet possible\n\n### Get dataset\n\n```python\nimport runregistry\ndataset = runregistry.get_dataset(\n run_number=327604,\n dataset_name=\"/PromptReco/HICosmics18A/DQM\"\n )\n```\n\n### Get datasets\n\n```python\nimport runregistry\ndatasets = runregistry.get_datasets(\n filter={\n 'run_number': {\n 'and':[\n {'>': 309000},\n {'<': 310000}\n ]\n }\n }\n)\n```\n\n### Get Lumisections\n\n#### Get the array of lumisections\n\nYou can query the lumisections of a run (or dataset), you will need the run number and the dataset name (when querying for a run, the dataset name must be 'online')\n\n```python\nimport runregistry\n# lumisections = runregistry.get_lumisections(run_number, dataset_name)\nlumisections = runregistry.get_lumisections(327743, \"/PromptReco/HICosmics18A/DQM\")\n```\n\nThe response will be an array of lumisections which will contain {workspace}-{column}: {\"status\":\"Either GOOD/BAD/STANDBY...\", \"comment\": \"a comment made for the range\", \"cause\":\"a common repeated cause\"}\n\nTo get OMS data: use the OMS API. You should only use Run Registry for data that RR is responsible for.\nHowever if you still want to access OMS lumisections, you can do so like this:\n\nPrevious Run Registry allowed you to change OMS (in that time WBM) attributes per dataset, if you need certain dataset lumisections you can provide the name of the RR dataset in the second argument:\n\n```python\nimport runregistry\n# oms_lumisections = runregistry.get_oms_lumisections(run_number, dataset_name)\noms_lumisections = get_oms_lumisections(327743, 'online')\n# If you want to get particular dataset that is not online for OMS lumisections:\ndataset_oms_lumisections = get_oms_lumisections(327743, '/PromptReco/HICosmics18A/DQM')\n```\n\n#### Get lumisection ranges\n\nUsually there will be runs/datasets which contain an enormous amount of lumisections (some even more than 5000), therefore it can be heavy on the API to query for these type of lumisections.\n\nA query to retrieve ranges is also possible, you can do it like this:\n\n```python\nimport runregistry\n# lumisections = runregistry.get_lumisection_ranges(run_number, dataset_name)\nlumisections = runregistry.get_lumisection_ranges(327743, \"/PromptReco/HICosmics18A/DQM\")\n```\n\nYou will receive an array of ranges, that apart from stating the triplets (comment, status and cause) for each column, the array will consist of two more attributes called **start** (lumisection where range starts) and **end** (lumisection where range ends).\n\n### Handling the response\n\nWhen filtering runs, the attributes from the response get divided into those belonging to OMS and those belonging to RR (to see which belong to which, see the tables below, or go through a response).\n\nThose that belong to OMS are inside \"oms_attributes\".\n\nThose that belong to RR are inside \"rr_attributes\".\n\n### Attributes available to query\n\nAccording to the type of attribute (number, string, boolean), see the Operator table above to see which types of operators can be applied to querying\n\nOms Attributes:\n\n| Attribute | Type | Belongs to |\n| ------------------------------------------------------------------------------------------ | :-----: | :--------: |\n| run_number | number | OMS |\n| energy | number | OMS |\n| l1_key | string | OMS |\n| b_field | number | OMS |\n| hlt_key | string | OMS |\n| l1_menu | string | OMS |\n| l1_rate | number | OMS |\n| duration | number | OMS |\n| end_lumi | number | OMS |\n| end_time | date | OMS |\n| sequence | string | OMS |\n| init_lumi | number | OMS |\n| clock_type | string | OMS |\n| start_time | date | OMS |\n| fill_number | number | OMS |\n| l1_hlt_mode | string | OMS |\n| last_update | date | OMS |\n| ls_duration | number | OMS |\n| stable_beam | boolean | OMS |\n| trigger_mode | string | OMS |\n| cmssw_version | string | OMS |\n| recorded_lumi | number | OMS |\n| delivered_lumi | number | OMS |\n| tier0_transfer | boolean | OMS |\n| l1_key_stripped | string | OMS |\n| fill_type_party1 | string | OMS |\n| fill_type_party2 | string | OMS |\n| hlt_physics_rate | number | OMS |\n| hlt_physics_size | number | OMS |\n| fill_type_runtime | string | OMS |\n| hlt_physics_counter | number | OMS |\n| l1_triggers_counter | number | OMS |\n| l1_hlt_mode_stripped | string | OMS |\n| hlt_physics_throughput | number | OMS |\n| initial_prescale_index | number | OMS |\n| beams_present_and_stable | boolean | OMS |\n| es_included | boolean | OMS |\n| hf_included | boolean | OMS |\n| daq_included | boolean | OMS |\n| dcs_included | boolean | OMS |\n| dqm_included | boolean | OMS |\n| gem_included | boolean | OMS |\n| trg_included | boolean | OMS |\n| hcal_included | boolean | OMS |\n| tcds_included | boolean | OMS |\n| pixel_included | boolean | OMS |\n| tracker_included | boolean | OMS |\n| \\*\\_included (be sure to add it to the validation runregistry/attributes if it's not here) | boolean | OMS |\n\nRR Run Attributes:\n\n| Attribute | Type | Belongs to |\n| ----------- | :-----: | :--------: |\n| class | string | RR |\n| state | string | RR |\n| significant | boolean | RR |\n| stop_reason | string | RR |\n\nRR Dataset Attributes:\n\n| Attribute | Type | Belongs to |\n| ------------- | :----: | :--------: |\n| dataset_name | string | RR |\n| dt_state | string | RR |\n| csc_state | string | RR |\n| hlt_state | string | RR |\n| l1t_state | string | RR |\n| rpc_state | string | RR |\n| tau_state | string | RR |\n| btag_state | string | RR |\n| ecal_state | string | RR |\n| hcal_state | string | RR |\n| lumi_state | string | RR |\n| muon_state | string | RR |\n| ctpps_state | string | RR |\n| castor_state | string | RR |\n| egamma_state | string | RR |\n| global_state | string | RR |\n| jetmet_state | string | RR |\n| tracker_state | string | RR |\n\nThe dt_state, csc_state and so on, are the workspace OFFLINE states of the datasets, they can be either OPEN, SIGNOFF or COMPLETED.\n\nFor Offline and Online status flags, filtering is also available. The Attribute is composed by {workspace}-{column}. So for example if we want to query for GOOD tracker-strip datasets of runs between 309000 and 310000, we would do it like this:\n\n```python\nimport runregistry\ndatasets = runregistry.get_datasets(filter={\n 'tracker-strip':'GOOD'\n 'run_number': {'and': [{'>': 309000}, {'<': 310000}]},\n})\n```\n\n## Generating JSONs\n\nIn order to generate JSONs (like the golden json) you must send the configuration of the attributes you wish the generated json to satisfy (in json-logic) TODO: make manual.\n\nThe json logic below generates a json file for all datasets that belong to era A,B, C, D, E, F, G, H, I from year 2018, and also\n\n```python\nimport runregistry\njson_logic = {\n \"and\": [\n {\n \"or\": [\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018A/DQM\"]},\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018B/DQM\"]},\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018C/DQM\"]},\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018D/DQM\"]},\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018E/DQM\"]},\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018F/DQM\"]},\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018G/DQM\"]},\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018H/DQM\"]},\n {\"==\": [{\"var\": \"dataset.name\"}, \"/PromptReco/Collisions2018I/DQM\"]}\n ]\n },\n { \">=\": [{ \"var\": \"run.oms.energy\" }, 6000] },\n { \"<=\": [{ \"var\": \"run.oms.energy\" }, 7000] },\n { \">=\": [{ \"var\": \"run.oms.b_field\" }, 3.7] },\n { \"in\": [ \"25ns\", { \"var\": \"run.oms.injection_scheme\" }] },\n { \"==\": [{ \"in\": [ \"WMass\", { \"var\": \"run.oms.hlt_key\" }] }, False] },\n\n { \"==\": [{ \"var\": \"lumisection.rr.dt-dt\" }, \"GOOD\"] },\n { \"==\": [{ \"var\": \"lumisection.rr.csc-csc\" }, \"GOOD\"] },\n { \"==\": [{ \"var\": \"lumisection.rr.l1t-l1tmu\" }, \"GOOD\"] },\n { \"==\": [{ \"var\": \"lumisection.rr.l1t-l1tcalo\" }, \"GOOD\"] },\n { \"==\": [{ \"var\": \"lumisection.rr.hlt-hlt\" }, \"GOOD\"] },\n\n { \"==\": [{ \"var\": \"lumisection.oms.bpix_ready\" }, True] }\n ]\n}\ngenerated_json = runregistry.generate_json(json_logic)\n\n\n## Running Tests\n\n```\n\npytest --cov .\n\n````\n\n## Troubleshooting\n\n## Support\n\nIf you have any questions, or the client is not working properly feel free to drop me an email at [f.e@cern.ch](mailto:f.e@cern.ch). Or through skype at fabioe24, i'm also available in mattermost.\n\n## To update PIP package\n\n```bash\npython setup.py sdist bdist_wheel\ntwine upload --repository-url https://test.pypi.org/legacy/ dist/*\n````\n\n## FAQ\n\n### Does this work with Python 2.7?\n\nNo.\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/fabioespinosa/runregistryclient", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "runregistry", "package_url": "https://pypi.org/project/runregistry/", "platform": "", "project_url": "https://pypi.org/project/runregistry/", "project_urls": { "Homepage": "https://github.com/fabioespinosa/runregistryclient" }, "release_url": "https://pypi.org/project/runregistry/0.2.1/", "requires_dist": [ "requests", "cernrequests" ], "requires_python": "", "summary": "CMS Run Registry client", "version": "0.2.1" }, "last_serial": 5825725, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "fa9ee9a5700e2d521440c189ca1487d2", "sha256": "e39392c9814811b0d2784dbbc35b47f6a4c584088a08d488784138bec255fa1a" }, "downloads": -1, "filename": "runregistry-0.1.1.tar.gz", "has_sig": false, "md5_digest": "fa9ee9a5700e2d521440c189ca1487d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6689, "upload_time": "2019-05-03T12:38:32", "url": "https://files.pythonhosted.org/packages/bc/b4/e95247a499f852bfd6a2fd38e8a749260189e69659c5794d80efde59b529/runregistry-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "7da7457c541c7afcd4719bab0d71290a", "sha256": "09cb6ceb1b3069af57c9891faddcc5f74cb6b236972043163987744aeac03899" }, "downloads": -1, "filename": "runregistry-0.1.2.tar.gz", "has_sig": false, "md5_digest": "7da7457c541c7afcd4719bab0d71290a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8088, "upload_time": "2019-05-06T18:37:35", "url": "https://files.pythonhosted.org/packages/47/c2/e4f1490ce4690e52e214a2b5844cb3c82ae8b5f9159d95e2a2adadefbb4d/runregistry-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "829986806d32f5cf1b8363255f3942fb", "sha256": "aaaed4baf7cfd289a885f6995d63e25cf99ba168126e400e3f577d07fe86807a" }, "downloads": -1, "filename": "runregistry-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "829986806d32f5cf1b8363255f3942fb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11579, "upload_time": "2019-06-03T12:04:18", "url": "https://files.pythonhosted.org/packages/c4/3e/d05aca175dcabba99058e370601d7cd7036622475d37b12fd4aee736dd80/runregistry-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c83a9bd33d2b61ee2ec72bccdbb4d913", "sha256": "b290582e30f4c84b25ebbcaeab577c9a6bfae649e5b8b4e8ae5302b5b6ebfb53" }, "downloads": -1, "filename": "runregistry-0.1.3.tar.gz", "has_sig": false, "md5_digest": "c83a9bd33d2b61ee2ec72bccdbb4d913", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8963, "upload_time": "2019-07-09T10:06:52", "url": "https://files.pythonhosted.org/packages/67/4a/139ceec63af49d580094c29f6951d3653ad795c6a5291a5d834ae8bb1990/runregistry-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "c996ca4ba4c424fdea3d20616669d0a2", "sha256": "73e7802f50f05533e6f858148e88b740ec015066ce93f49951bef9737420c903" }, "downloads": -1, "filename": "runregistry-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "c996ca4ba4c424fdea3d20616669d0a2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13292, "upload_time": "2019-07-09T10:02:30", "url": "https://files.pythonhosted.org/packages/9b/d3/bab1069243af240b33f30329e5ecfe65d6f3ca3e3fa036d945cef2d27df3/runregistry-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb67ce2bd4f7e39379d8cc5ecbe73365", "sha256": "bd5474d67318dbeae8bd96c376df841eea5ec5f9d274eb596942ad007502f3f4" }, "downloads": -1, "filename": "runregistry-0.1.4.tar.gz", "has_sig": false, "md5_digest": "bb67ce2bd4f7e39379d8cc5ecbe73365", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11693, "upload_time": "2019-07-09T10:06:54", "url": "https://files.pythonhosted.org/packages/52/67/aa46d2122a135ec21016431c75a74a8d4ca5590726ee05dc87949a4693df/runregistry-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "7faffb8b8915cc5c9a784563ea84b79d", "sha256": "6a94cdf1191c33b09f444baaa9ab47965f356ea08b23b2e79eb08cf85fc269b7" }, "downloads": -1, "filename": "runregistry-0.1.5.tar.gz", "has_sig": false, "md5_digest": "7faffb8b8915cc5c9a784563ea84b79d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11697, "upload_time": "2019-07-09T10:06:55", "url": "https://files.pythonhosted.org/packages/cf/d4/9d4a0bb02b3cf2f77ce50cf68663e8f72f360bd3c1537be93d8f80257b59/runregistry-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "ea32459d5e00e95e3aac014b8d18ac07", "sha256": "551f8a8fc8301c197eebfc801091a13f3fe20735dfd69d5fb07f0a6cba7ff3bb" }, "downloads": -1, "filename": "runregistry-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "ea32459d5e00e95e3aac014b8d18ac07", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14382, "upload_time": "2019-07-09T10:26:01", "url": "https://files.pythonhosted.org/packages/1c/de/47d7863657373cdb6894a1aa63b5450565abade0aa975275e2a040bcaaff/runregistry-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "87ed7de5c06a31d6de54545943b5ec1e", "sha256": "999bc0bc67bb1c419d79ca6a173fe972a59e701447f851515adbb3208adb4cb7" }, "downloads": -1, "filename": "runregistry-0.1.6.tar.gz", "has_sig": false, "md5_digest": "87ed7de5c06a31d6de54545943b5ec1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11701, "upload_time": "2019-07-09T10:27:07", "url": "https://files.pythonhosted.org/packages/66/db/d1563099444d50ff757c37246e003b723dc317c8a1a1694e82b56c6c9d52/runregistry-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "de9b996289ab0c2d7ad29dc194a5f5c9", "sha256": "4986bbd49cba0a834a2a01b6aeaa0347614f207cf97a8fb43e524a5d2aa4d342" }, "downloads": -1, "filename": "runregistry-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "de9b996289ab0c2d7ad29dc194a5f5c9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14383, "upload_time": "2019-07-09T10:26:02", "url": "https://files.pythonhosted.org/packages/ad/73/8ce5212a084b76d133cc2eb0b17e4cbf15c8b172cde4e300060ad363795b/runregistry-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "042b4d714c3b218a6e3dd2bfa91af0e0", "sha256": "d96ed461ffc0199bc25460dd880e523591d2aeedb5b7e577d3a160bf6b29ced7" }, "downloads": -1, "filename": "runregistry-0.1.7.tar.gz", "has_sig": false, "md5_digest": "042b4d714c3b218a6e3dd2bfa91af0e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11697, "upload_time": "2019-07-09T10:27:09", "url": "https://files.pythonhosted.org/packages/cc/66/84dba0b5eae60a9f2ecb1f07d2e927d8babd3cd123efab7d781ff053a9d5/runregistry-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "1507950848ee8a5618205ffbfe671050", "sha256": "65e166f979942ab112113cb471772f56385eb25b86d3eb1df2352e0957fbbf3b" }, "downloads": -1, "filename": "runregistry-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "1507950848ee8a5618205ffbfe671050", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14516, "upload_time": "2019-07-10T14:05:56", "url": "https://files.pythonhosted.org/packages/1a/95/966b345e0605bd20a0f80159f54b38cefdc0db12a65ea3e62cd1f032a12c/runregistry-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e007ae065cf17ee18be05a9105db7be5", "sha256": "3b484d405cd14c1e34cc1b2f15aba9152ec29d7a1212e1572f9cd3973d102152" }, "downloads": -1, "filename": "runregistry-0.1.8.tar.gz", "has_sig": false, "md5_digest": "e007ae065cf17ee18be05a9105db7be5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11833, "upload_time": "2019-07-10T14:05:58", "url": "https://files.pythonhosted.org/packages/a2/65/693128f276b31b3b327516ca8cc21e52c0fc39f46831a9ce0fe601cfa7f6/runregistry-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "ec7bffb532037fb76801a18184ee76b3", "sha256": "5b6bb2822a54b31395a35389b868583caa79adab41c09288477755a577093036" }, "downloads": -1, "filename": "runregistry-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "ec7bffb532037fb76801a18184ee76b3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14512, "upload_time": "2019-07-17T10:37:57", "url": "https://files.pythonhosted.org/packages/8d/02/875863537af7dcb1cc262e4b087a93af907391e0eedf627406476b52cb35/runregistry-0.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ed6708b1619c3f6c8218bbd464da3cb1", "sha256": "fa2db9e77d71452f60e0a4e46b59f13a076f56da7b9fcecfd5e6b1d2d103a4c1" }, "downloads": -1, "filename": "runregistry-0.1.9.tar.gz", "has_sig": false, "md5_digest": "ed6708b1619c3f6c8218bbd464da3cb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11829, "upload_time": "2019-07-17T10:37:59", "url": "https://files.pythonhosted.org/packages/c4/fd/c822f2ae5e8078be099de4d722606fe002457de25be144d340de186895d1/runregistry-0.1.9.tar.gz" } ], "0.1.91": [ { "comment_text": "", "digests": { "md5": "d92eb4ebdfd6a394bf86ee99b75bc1bd", "sha256": "2c803b3d4af9722ebc11b82aa6a04801da7e7c2ded3c7b8fc8fd89d6406bafa8" }, "downloads": -1, "filename": "runregistry-0.1.91-py3-none-any.whl", "has_sig": false, "md5_digest": "d92eb4ebdfd6a394bf86ee99b75bc1bd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18284, "upload_time": "2019-09-10T16:09:02", "url": "https://files.pythonhosted.org/packages/b5/53/0d2e896cba748e6f72cf983d0cb2647e6bad700b96f99cdf381ef62f400c/runregistry-0.1.91-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4f467180e65888b4e358f1428907df0", "sha256": "3b1781c079994f64a2bb9aa2a0b34fcb71910dcf3b93ffafa4fac977d6dae24c" }, "downloads": -1, "filename": "runregistry-0.1.91.tar.gz", "has_sig": false, "md5_digest": "a4f467180e65888b4e358f1428907df0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12334, "upload_time": "2019-09-10T16:09:04", "url": "https://files.pythonhosted.org/packages/cb/f1/893be560711c84fb03bf58a04d45b2837af8e9c128f74690ba07fc9c1db2/runregistry-0.1.91.tar.gz" } ], "0.1.911": [ { "comment_text": "", "digests": { "md5": "ddfabb9546b56e1858caa7c7d9bbb8c6", "sha256": "fe086040a3cc1e16574f57541d9038e9d05bf30a8014bbccb952b5dd696af5d9" }, "downloads": -1, "filename": "runregistry-0.1.911-py3-none-any.whl", "has_sig": false, "md5_digest": "ddfabb9546b56e1858caa7c7d9bbb8c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18814, "upload_time": "2019-09-10T16:37:06", "url": "https://files.pythonhosted.org/packages/13/d5/5706b0daebe5857ec31576c50a17e3b46dfdf58cb9388a9a97a6ff0ff147/runregistry-0.1.911-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fec1a321331ea88114d27d02d1529c84", "sha256": "c457464390dfacc5a60c826e0cc915441988469b296fd1b2fa58d5755954bb5f" }, "downloads": -1, "filename": "runregistry-0.1.911.tar.gz", "has_sig": false, "md5_digest": "fec1a321331ea88114d27d02d1529c84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12801, "upload_time": "2019-09-10T16:37:08", "url": "https://files.pythonhosted.org/packages/7b/f1/11651dbf89161f55dc27469c80da9fc97c1c73ddb5a417990fa28559f2f5/runregistry-0.1.911.tar.gz" } ], "0.1.912": [ { "comment_text": "", "digests": { "md5": "78c3ce69888cb19c5686697fd1a32596", "sha256": "f34896ae81c75a991ee6e57537be6f0bd1b42368003cfc37005e77a12516f957" }, "downloads": -1, "filename": "runregistry-0.1.912-py3-none-any.whl", "has_sig": false, "md5_digest": "78c3ce69888cb19c5686697fd1a32596", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18844, "upload_time": "2019-09-10T16:57:50", "url": "https://files.pythonhosted.org/packages/1c/68/7e47fa51610bc454799510c69bda752c79d2e035ecf9df59e17c2f179746/runregistry-0.1.912-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5533868f3008d33772ba41b467f290bc", "sha256": "be9d674e51924e94c3bd5193be84f11728c48f07a1564cbcdb9c6bfd3e7d835e" }, "downloads": -1, "filename": "runregistry-0.1.912.tar.gz", "has_sig": false, "md5_digest": "5533868f3008d33772ba41b467f290bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12829, "upload_time": "2019-09-10T16:57:52", "url": "https://files.pythonhosted.org/packages/cb/57/8dd915443a85fd097c62696038106111a9732f09556aa016c0f37eab5eb5/runregistry-0.1.912.tar.gz" } ], "0.1.92": [ { "comment_text": "", "digests": { "md5": "515686bcb8b012f1c1fa396a59cbaad4", "sha256": "378ff1cb3a82189fbe59dc45ed72d7013a89e0361418f0da4cf07b79e0a8298c" }, "downloads": -1, "filename": "runregistry-0.1.92-py3-none-any.whl", "has_sig": false, "md5_digest": "515686bcb8b012f1c1fa396a59cbaad4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19041, "upload_time": "2019-09-12T15:39:10", "url": "https://files.pythonhosted.org/packages/1a/43/17f0e0ae3e35d7b6ba0f2be0c28d5dd4334103e67251245c267cd52f969f/runregistry-0.1.92-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66f75f343e00beb3ad8877db00956af6", "sha256": "f93ca8f705a508e475b8400b9bb8ddd17a6b77528c141993d5745737495c6f6b" }, "downloads": -1, "filename": "runregistry-0.1.92.tar.gz", "has_sig": false, "md5_digest": "66f75f343e00beb3ad8877db00956af6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13093, "upload_time": "2019-09-12T15:39:13", "url": "https://files.pythonhosted.org/packages/a1/52/1c7195c6b7c6b9b31a30224dde97103fccfe4ee2cd556b5468136ab4c14b/runregistry-0.1.92.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7ff0363d2467902a0fdc09dc6517a71d", "sha256": "066f851204cebc0d79b332766f9e510785fae90b51dbf2bb690e9f0e4c25a32b" }, "downloads": -1, "filename": "runregistry-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7ff0363d2467902a0fdc09dc6517a71d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19029, "upload_time": "2019-09-12T15:44:52", "url": "https://files.pythonhosted.org/packages/0d/a4/af6eb3253a92e49ebfd8a5c1dd63fed3c7e8bde7ed00122e4c3ca475285e/runregistry-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f54a1ed3f229ba053fd0df129d32683e", "sha256": "199e2d745f4ed6f53561e2d2e7e94ffb894d5c14d0b3c3e198d9ef54384f5a49" }, "downloads": -1, "filename": "runregistry-0.2.0.tar.gz", "has_sig": false, "md5_digest": "f54a1ed3f229ba053fd0df129d32683e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13090, "upload_time": "2019-09-12T15:44:55", "url": "https://files.pythonhosted.org/packages/32/74/958a92e3e9ec71516d142027edd9f47cc8d4edc8aa65bc963b652bae2943/runregistry-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "6bb472d027078d23d4efa3a21cfcf464", "sha256": "58513959d85e4dab2f8e04a3f73d68f4146d43197dbd40f08e5abe73c7526586" }, "downloads": -1, "filename": "runregistry-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6bb472d027078d23d4efa3a21cfcf464", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19028, "upload_time": "2019-09-13T13:50:12", "url": "https://files.pythonhosted.org/packages/fd/95/a66b0ae6ec5340747253d0a612c5453bde573904475226570e30fa2e8e3d/runregistry-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a65d9fd3fad2a7ea502a3433371e735", "sha256": "3973b620746c1da45e64024ed6abb406408a74bd5e939ecd9905496242f5677b" }, "downloads": -1, "filename": "runregistry-0.2.1.tar.gz", "has_sig": false, "md5_digest": "7a65d9fd3fad2a7ea502a3433371e735", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13088, "upload_time": "2019-09-13T13:50:15", "url": "https://files.pythonhosted.org/packages/68/48/98f730ea2e01f430f4502295607a4f03f02a9c9cbbc8e8cc2d95b0d15572/runregistry-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6bb472d027078d23d4efa3a21cfcf464", "sha256": "58513959d85e4dab2f8e04a3f73d68f4146d43197dbd40f08e5abe73c7526586" }, "downloads": -1, "filename": "runregistry-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6bb472d027078d23d4efa3a21cfcf464", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19028, "upload_time": "2019-09-13T13:50:12", "url": "https://files.pythonhosted.org/packages/fd/95/a66b0ae6ec5340747253d0a612c5453bde573904475226570e30fa2e8e3d/runregistry-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a65d9fd3fad2a7ea502a3433371e735", "sha256": "3973b620746c1da45e64024ed6abb406408a74bd5e939ecd9905496242f5677b" }, "downloads": -1, "filename": "runregistry-0.2.1.tar.gz", "has_sig": false, "md5_digest": "7a65d9fd3fad2a7ea502a3433371e735", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13088, "upload_time": "2019-09-13T13:50:15", "url": "https://files.pythonhosted.org/packages/68/48/98f730ea2e01f430f4502295607a4f03f02a9c9cbbc8e8cc2d95b0d15572/runregistry-0.2.1.tar.gz" } ] }