{ "info": { "author": "Martin Aspeli", "author_email": "optilude@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "JIRA Cycle Data extract utility\n===============================\n\nThis utility helps extract data from JIRA for processing with the\nActionableAgile\u2122 Analytics tool (https://www.actionableagile.com/analytics-tools/),\nas well as ad-hoc analysis using Excel.\n\nIt will produce a CSV file with one row for each JIRA issue matching a set of\nfilter criteria, containing basic information about the issue as well as the\ndate the issue entered each step in the main cycle workflow.\n\nThis data can be used to produce a Cumulative Flow Diagram, a cycle time\nscatterplot, a cycle time histogram, and other analytics based on cycle time.\n\nTo make it easier to draw these diagrams, the tool can also be used to output\nCSV files with pre-calculated values for charting in e.g. Excel.\n\nFinally, if you have the right dependencies installed, it can output basic\ncharts as images.\n\nInstallation\n------------\n\nInstall Python 2.7 and pip. See http://pip.readthedocs.org/en/stable/installing/.\n\nInstall using `pip`::\n\n $ pip install jira-cycle-extract\n\nIf you get errors, try to install `numpy` and `pandas` separately first::\n\n $ pip install numpy pandas\n $ pip install jira-cycle-extract\n\nThis will install a binary called `jira-cycle-extract`. You can test that it was\ncorrectly installed using::\n\n $ jira-cycle-extract --help\n\nIf this doesn't work, check the output of `pip install jira-cycle-extract` to\nsee where it may have installed the binary.\n\nTo use the built-in charting capabilities, you need to install Seaborn\n(which in turn installs Matplotlib and SciPy) and Statsmodels. You can get\nthese with the `charting` extra::\n\n $ pip install jira-cycle-extract[charting]\n\nThese dependencies are not installed by default because they can sometimes\nbe a bit tricky to install.\n\nUsing Docker\n------------\n\nIf you have Docker installed, you can run `jira-cycle-extract` as a docker image::\n\n $ docker run --rm -it -v \"$PWD\":/data optilude/jira-cycle-extract:latest --help\n\nThis will map the working directory (`/data`) of the containerised\napplication to the current working directory (`$PWD`). Any files you\nspecify on the command line (without any further path prefixes) will be\nread from or output to the current directory, e.g::\n\n $ docker run --rm -it -v \"$PWD\":/data optilude/jira-cycle-extract:latest config.yml cycle.csv\n\nConfiguration\n-------------\n\nWrite a YAML configuration file like so, calling it e.g. `config.yaml`::\n\n # How to connect to JIRA?\n Connection:\n Domain: https://myserver.atlassian.net\n Username: myusername # If missing, you will be prompted at runtime\n Password: secret # If missing, you will be prompted at runtime\n\n # What to search for?\n Criteria:\n Project: ABC # JIRA project key to search\n Issue types: # Which issue types to include\n - Story\n - Defect\n Valid resolutions: # Which resolution statuses to include (unresolved is always included)\n - Done\n - Closed\n JQL: labels != \"Spike\" # Additional filter as raw JQL, optional\n\n # Describe the workflow. Each step can be mapped to either a single JIRA\n # status, or a list of statuses that will be treated as equivalent\n Workflow:\n Open: Open\n Analysis IP: Analysis in Progress\n Analysis Done: Analysis Done\n Development IP: Development in Progress\n Development Done: Development Done\n Test IP: Test in Progress\n Test Done: Test Done\n Done:\n - Closed\n - Done\n\n # Map field names to additional attributes to extract\n Attributes:\n Components: Component/s\n Priority: Priority\n Release: Fix version/s\n\nIf you are unfamiliar with YAML, remember that:\n\n* Comments start with `#`\n* Sections are defined with a name followed by a colon, and then an indented\n block underneath. `Connection`, `Criteria`, `Workflow` and `Attributes` area\n all sections in the example above.\n* Indentation has to use spaces, not tabs!\n* Single values can be set using `Key: value` pairs. For example,\n `Project: ABC` above sets the key `Project` to the value `ABC`.\n* Lists of values can be set by indenting a new block and placing a `-` in front\n of each list value. In the example above, the `Issue types` list contains\n the values `Story` and `Defect`.\n\nThe sections for `Connection`, `Criteria` and `Workflow` are required.\n\nUnder `Conection`, only `Domain` is required. If not specified, the script will\nprompt for both or either of username and password when run.\n\nUnder `Criteria`, all fields are technically optional, but you should specify\nat least some of them to avoid an unbounded query. `Issue types` and\n`Valid resolutions` can be set to either single values or lists.\n\nUnder `Workflow`, at least two steps are required. Specify the steps in order.\nYou may either specify a single workflow value or a list (as shown for `Done`\nabove), in which case multiple JIRA statuses will be collapsed into a single\nstate for analytics purposes.\n\nThe file, and values for things like workflow statuses and attributes, are case\ninsensitive.\n\nWhen specifying attributes, use the *name* of the field (as rendered on screen\nin JIRA), not its id (as you might do in JQL), so e.g. use `Component/s` not\n`components`.\n\nThe attributes `Type` (issue type), `Status` and `Resolution` are always\nincluded.\n\nWhen specifying fields like `Component/s` or `Fix version/s` that may have\nlists of values, only the first value set will be used.\n\nMultiple queries\n----------------\n\nIf it is difficult to construct a single set of criteria that returns all\nrequired issues, multiple `Criteria` sections can be wrapped into a `Queries`\nblock, like so::\n\n Queries:\n Attribute: Team\n Criteria:\n - Value: Team 1\n Project: ABC\n Issue types:\n - Story\n - Bug\n Valid resolutions:\n - Done\n - Closed\n JQL: Component = \"Team 1\"\n\n - Value: Team 2\n Project: ABC\n Issue types:\n - Story\n - Bug\n Valid resolutions:\n - Done\n - Closed\n JQL: Component = \"Team 2\"\n\nIn this example, the `Component` field in JIRA is being used to signify the team\ndelivering the work, but may also be used for other things. Two JIRA queries\nwill be run, corresponding to the two `Criteria` blocks.\n\nIn addition, a new column called `Team` will be added to the output, as\nspecified by the `Attribute` field under `Queries`. For all items returned by\nthe first query, the value will be `Team 1` as per the `Value` field, and for\nall items returned by the second query, it will be `Team 2`.\n\nMulti-valued fields\n-------------------\n\nSome fields in JIRA can contain multiple values, e.g. `fixVersion`. By default,\nthe extractor will use the first value in such a field if one is specified in\nthe `Attributes` block. However, you may want to extract only specific values.\n\nTo do so, add a block like the following::\n\n Attributes:\n Release: Fix version/s\n\n Known values:\n Release:\n - \"R01\"\n - \"R02\"\n - \"R03\"\n\nThe extractor will pick the first \"known value\" found for the field. If none of\nthe known values match, the cell will be empty.\n\nRunning\n-------\n\nTo produce the basic cycle time data, run `jira-cycle-extract` passing the name\nof the YAML configuration file and the name of the output CSV file::\n\n $ jira-cycle-extract config.yaml data.csv\n\nThis will extract a CSV file called `data.csv` with cycle data based on the\nconfiguration in `config.yaml`, in a format compatible with the\nActionableAgile toolset.\n\nIf you prefer Excel files for manual analysis::\n\n $ jira-cycle-extract --format=xlsx config.yaml data.xlsx\n\nIf you prefer JSON::\n\n $ jira-cycle-extract --format=json config.yaml data.json\n\nThe JSON format can be loaded by the Actionable Agile Analytics tool if you\nself-host it and the single-page HTML file for the AAA tool and the JSON file\nare accessible from the same web server, via a URL parameter::\n\n http://myserver/analytics.html?url=data.json\n\nYou can specify a path or full URL, but due to same-origin request restrictions,\nyour browser is unlikely to let you load anything not served from the same\ndomain as the analytics web app itself.\n\n**Note:** When the `--format` is set, it applies to all files written, not\njust the main cyle data file (see other options below). It is important to be\nconsistent with the file extensions. In particular, if you are using the `xlsx`\nformat you should also make sure all output files use a `.xlsx` extension.\n\nThere are lots more options. See::\n\n $ jira-cycle-extract --help\n\nUse the `-v` option to print more information during the extract process.\n\nUse the `-n` option to limit the number of items fetched from JIRA, based on\nthe most recently updated issues. This is useful for testing the configuration\nwithout waiting for long downloads::\n\n $ jira-cycle-extract -v -n 10 config.yaml data.csv\n\nTo produce **Cumulative Flow Diagram statistics**, use the `--cfd` option::\n\n $ jira-cycle-extract --cfd cfd.csv config.yaml data.csv\n\nThis will yield a `cfd.csv` file with one row for each date, one column for each\nstep in the workflow, and a count of the number of issues in that workflow state\non that day. To plot a CFD, chart this data as a (non-stacked) area chart. You\nshould technically exclude the series in the first column if it represents the\nbacklog!\n\nTo produce **cycle time scatter plot statistics**, use the `--scatterplot` option::\n\n $ jira-cycle-extract --scatterplot scatterplot.csv config.yaml data.csv\n\nThis will yield a `scatterplot.csv` file with one row for each item that was\ncompleted (i.e. it reached the last workflow state), with columns giving the\ncompletion date and the number of days elapsed from the item entering the first\nactive state (i.e. the second step in the workflow, on the basis that the first\nitem represents a backlog or intake queue) to the item entering the completed\nstate. These two columns can be plotted as an X/Y scatter plot. Further columns\ncontain the dates of entry into each workflow state and the various issue\nmetadata to allow further filtering.\n\nTo be able to easily draw a **histogram** of the cycle time values, use the\n`--histogram` option::\n\n $ jira-cycle-extract --histogram histogram.csv config.yaml data.csv\n\nThis will yield a `histogram.csv` file with two columns: bin ranges and the\nnumber of items with cycle times falling within each bin. These can be charted\nas a column or bar chart.\n\nTo find out the 30th, 50th, 70th, 85th and 95th **percentile cycle time** values,\npass the `--percentiles` option::\n\n $ jira-cycle-extract --percentiles percentiles.csv config.yaml data.csv\n\nTo calculate different percentiles use the `--quantiles` option::\n\n $ jira-cycle-extract --percentiles percentiles.csv --quantiles=0.3,0.5,0.8 config.yaml data.csv\n\nNote that there should not be spaces between the commas!\n\nTo find out the **daily throughput** for the last 60 days, use the\n`--throughput` option::\n\n $ jira-cycle-extract --throughput throughput.csv config.yaml data.csv\n\nTo use a different time window, e.g. the last 90 days::\n\n $ jira-cycle-extract --throughput throughput.csv --throughput-window=90 config.yaml data.csv\n\nThe various options can be used in combination, and it is technically OK to\nskip the second positional (`data.csv`) parameter (in which case the file will\nnot be written).\n\nIf you have charting dependencies installed (see above), there are various\noptions available to allow you to draw **charts**, for example::\n\n $ jira-cycle-extract --charts-scatterplot=scatterplot.png config.yaml data.csv\n\nThe available charts are:\n\n* `--charts-scatterplot` to draw a **scatterplot** of cycle times, with percentile lines\n* `--charts-histogram` to draw a **histogram** of cycle times, with percentile lines\n* `--charts-cfd` to draw a **Cumulative Flow Diagram**\n* `--charts-throughput` to draw a daily **throughput bar chart**\n* `--charts-burnup` to draw a simple **burn-up** chart (completed item count vs. time)\n* `--charts-burnup-forecast` to draw a **burn-up chart with a Monte Carlo simulation**\n showing paths towards a completion target. The completion target will by default\n be the number of items in the backlog, but can be set explicitly with the\n `--charts-burnup-forecast-target` options. The simluation by default uses\n 100 trials. The number of trials can be set with the\n `--charts-burnup-forecast-trials` option. You can set a deadline marker with the\n `--charts-burnup-forecast-deadline` option, which should be set to a date. If\n you also set `--charts-burnup-forecast-deadline-confidence` to a fraction (e.g.\n `0.85`) it will be used to find a confidence interval in the simulation to which\n the deadline will be compared.\n* `--charts-wip` to draw a **WIP boxplot** showing min, max, median and mean WIP\n by week. By default, this will show the last 5 or 6 weeks' of data (depending\n on the weekday). You can change this with the `--charts-wip-window` parameter,\n set to a number of weeks.\n* `--charts-ageing-wip` to draw an **ageing WIP chart**: a scatter plot of current\n cycle time against state in the cycle, i.e. how items are trending towards completion.\n* `--charts-net-flow` to show a bar chart of the **weekly net flow**:\n departures - arrivals. By default, this will show the last 5 or 6 weeks' of\n data (depending on the weekday). You can change this with the\n `--charts-net-flow-window` parameter, set to a number of weeks.\n\nAlso note: all the `--charts-*` options have a corresponding `--charts-*-title`\noption that can be used to set a title for the chart.\n\nFinally, to limit the date range of the data shown in the charts, you can use the\noptions `--charts-from` and `--charts-to` to specify a starting and/or ending \ndate (inclusive). Both are optional.\n\nTroubleshooting\n---------------\n\n* If Excel complains about a `SYLK` format error, ignore it. Click OK. See\n https://support.microsoft.com/en-us/kb/215591.\n* JIRA error messages may be printed out as HTML in the console. The error is\n in there somewhere, but may be difficult to see. Most likely, this is either\n an authentication failure (incorrect username/password or blocked account),\n or an error in the `Criteria` section resulting in invalid JQL.\n* If you aren't getting the issues you expected to see, use the `-v` option to\n see the JQL being sent to JIRA. Paste this into the JIRA issue filter search\n box (\"Advanced mode\") to see how JIRA evaluates it.\n* Old workflow states can still be part of an issue's history after a workflow\n has been modified. Use the `-v` option to find out about workflow states that\n haven't been mapped.\n* Excel sometimes picks funny formats for data in CSV files. Just set them to\n whatever makes sense.\n* If you are on a Mac and you get an error about Python not being installed as\n a framework, try to create a file `~/.matplotlib/matplotlibrc` with the\n following contents::\n\n backend : Agg\n* To install the charting dependencies on a Mac, you probably need to install a\n `gfortran` compiler for `scipy`. Use Homebrew (http://brew.sh) and install the\n `gcc` brew.\n\nAd-hoc analysis\n---------------\n\nSometimes, you may want to perform more exploratory, ad-hoc analysis of the\ncycle data. `jira-cycle-extract` uses Python Pandas (http://pandas.pydata.org)\nto do most of its heavy lifting, and Pandas provides a rich environment for\ndata science.\n\nThe Jupyter Notebook (http://jupyter.org) is a popular way to conduct\ninteractive, ad-hoc analysis using Pandas (and more!).\n\nIf you have this running, here's an example of a notebook that uses\n`jira-cycle-extract` to query JIRA with a given YAML file configuration and\nmakes the data available for further analysis::\n\n import getpass\n import datetime\n\n import pandas as pd\n import numpy as np\n import matplotlib.pyplot as plt\n import matplotlib as mpl\n import seaborn as sns\n\n from jira import JIRA\n from jira_cycle_extract import cycletime, config\n\n # Print charts in the notebook, using retina graphics\n %matplotlib inline\n %config InlineBackend.figure_format = 'retina'\n sns.set_context(\"talk\")\n\n # Prompt for JIRA username, password and config file:\n username = raw_input(\"Username:\")\n password = getpass.getpass(\"Password:\")\n config_filename = raw_input(\"Config file:\")\n\n # Parse options\n options = {}\n with open(config_filename) as config_file:\n options = config.config_to_options(config_file.read())\n\n # Connect to JIRA\n jira = JIRA(options={'server': options['connection']['domain']}, basic_auth=(username, password))\n\n # Fetch issues and calculate cycle data as a Pandas DataFrame\n q = cycletime.CycleTimeQueries(jira, **options['settings'])\n cycle_data = q.cycle_data(verbose=False)\n\n # Calculate other DataFrames for CFD, scatterplot, histogram, percentile and throughput data\n cfd_data = q.cfd(cycle_data)\n scatter_data = q.scatterplot(cycle_data)\n histogram_data = q.histogram(cycle_data)\n percentile_data = q.percentiles(cycle_data, percentiles=quantiles)\n daily_throughput_data = q.throughput_data(cycle_data[cycle_data])\n\nYou can now do all kinds of analysis on the DataFrames (`cycle_data`, `cfd_data`\nand so on).\n\nChangelog\n---------\n\n0.10 - June 8 2016\n * Added title options for all charts\n * Added deadline option for burnup forecast chart\n\n0.9 - May 31 2016\n * Add Docker documentation\n\n0.8 - May 30 2016\n * Fixed a bug with calculating the CFD when statuses are skipped\n * Added --throughput output\n * Percentiles are now saved to file, not printed, when using --percentiles\n * Adding charting output (with optional dependencies - see above)\n\n0.7 - January 22 2016\n * Add support for `--format=json`\n * Output all dates in ISO format (YYYY-MM-DD)\n\n0.6 - January 20 2016\n * Add support for `Queries` and `Known values`.\n\n0.5 - November 8 2015\n * When an issues moves between two JIRA states that are mapped to the same\n workflow step, record the *earliest* date, not the most recent\n * When an issue moves backwards in the flow as defined by the sequence of\n workflow steps, retain the *earliest* date the issue entered the given\n step (and erase any dates recorded for all subsequent steps)\n\n0.4 - October 31 2015\n * Fix encoding errors when summary contains non-ASCII characters\n\n0.3 - October 11 2015\n * Add proper support for `--cfd`, `--scatterplot`, `--percentiles` and\n `--histogram`\n * Fix some typing issues with the main cycle data extract.\n\n0.2 - October 10 2015\n * Fix documentation errors\n\n0.1 - October 10 2015\n * Initial release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/optilude/jira-cycle-extract", "keywords": "agile jira analytics", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "jira-cycle-extract", "package_url": "https://pypi.org/project/jira-cycle-extract/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/jira-cycle-extract/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/optilude/jira-cycle-extract" }, "release_url": "https://pypi.org/project/jira-cycle-extract/0.10/", "requires_dist": null, "requires_python": null, "summary": "Extract cycle time analytics data from JIRA", "version": "0.10" }, "last_serial": 2157679, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "eb0c346d33c6b12b02c0cb017e98a000", "sha256": "1979e25f586017693bbd27c43265fbf2b6291892d9dd89eb1715e7d78ae8f50e" }, "downloads": -1, "filename": "jira-cycle-extract-0.1.tar.gz", "has_sig": false, "md5_digest": "eb0c346d33c6b12b02c0cb017e98a000", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8959, "upload_time": "2015-10-10T22:50:40", "url": "https://files.pythonhosted.org/packages/fa/26/771172b59a106616b57a00332e4793ec88a19626d974af87df3334f91dff/jira-cycle-extract-0.1.tar.gz" } ], "0.10": [ { "comment_text": "", "digests": { "md5": "75c0a18e7c200bbbb95f93aa55924237", "sha256": "4d166db381e5de52ac495b6e2cfb43ccf62fc397154621dd5eb250ee8a2aeef6" }, "downloads": -1, "filename": "jira-cycle-extract-0.10.tar.gz", "has_sig": false, "md5_digest": "75c0a18e7c200bbbb95f93aa55924237", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29089, "upload_time": "2016-06-08T21:27:28", "url": "https://files.pythonhosted.org/packages/1b/34/d2e4ae802dc60f91d8bd653d6f4d45e1f6e9429d1d3f1dc1c8309c6ec35b/jira-cycle-extract-0.10.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "c9f40439338a753d9d81f287eb096f5c", "sha256": "546bea35fe0bf1404cf954ae68b3448797d0da00baa0c1d0712fae22e3f7fbb5" }, "downloads": -1, "filename": "jira-cycle-extract-0.2.tar.gz", "has_sig": false, "md5_digest": "c9f40439338a753d9d81f287eb096f5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8951, "upload_time": "2015-10-10T22:55:18", "url": "https://files.pythonhosted.org/packages/b1/91/09851dfc56a9039729c6288e6fec8e880f4e2e8f9038d24126edb2728123/jira-cycle-extract-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "913ac6325f0cc7a424405f6e8db560fa", "sha256": "81ac7a2f030f12c964100fee1013cadc3d0aa787dbe4d35627836f7268b3fcdc" }, "downloads": -1, "filename": "jira-cycle-extract-0.3.tar.gz", "has_sig": false, "md5_digest": "913ac6325f0cc7a424405f6e8db560fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11380, "upload_time": "2015-10-11T21:40:53", "url": "https://files.pythonhosted.org/packages/fa/cd/2fffd6ac9d06dc516ad9d33a22e4a55118e51b6a4063727c6a3a5f277394/jira-cycle-extract-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "a3376552afdcfd2c1a5d3f066f28ce40", "sha256": "070ab331953252ed0ef83ff2c1412a469d75ea51e9557c2934a6069c3e316c0c" }, "downloads": -1, "filename": "jira-cycle-extract-0.4.tar.gz", "has_sig": false, "md5_digest": "a3376552afdcfd2c1a5d3f066f28ce40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11443, "upload_time": "2015-10-31T20:28:12", "url": "https://files.pythonhosted.org/packages/02/dc/70026b7908da2066b72ae750ba34cce894f74ba232852504158a9b8614c4/jira-cycle-extract-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "f35b85c99b527185299da3d3e345424a", "sha256": "cac2208e84556e6d92a0934cb0eedd600ec3bd87117b45151ac68dbcf90bee17" }, "downloads": -1, "filename": "jira-cycle-extract-0.5.tar.gz", "has_sig": false, "md5_digest": "f35b85c99b527185299da3d3e345424a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11721, "upload_time": "2015-11-08T23:06:38", "url": "https://files.pythonhosted.org/packages/22/ea/f247b06ef0b2fd33e0acd8624b835c18d0967886c12f3ffd694554113d20/jira-cycle-extract-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "e83a69ad2bd89eb0f6b89953cb0f415f", "sha256": "1fdb95c9569bcbeb8f79d737ca98a7a4a2b0cfe05090a0ce7a44d20e49cd303e" }, "downloads": -1, "filename": "jira-cycle-extract-0.6.tar.gz", "has_sig": false, "md5_digest": "e83a69ad2bd89eb0f6b89953cb0f415f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12851, "upload_time": "2016-01-20T14:20:21", "url": "https://files.pythonhosted.org/packages/ce/12/4b5bf78b5596c4141c4f17deef232e2bc404cb2e015ab5e7a9569de80aa0/jira-cycle-extract-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "4387a0d1ca4d39c90c98c9f7865a2c28", "sha256": "30eee5d69ec0c50e11f62b89cb5cc35be4b8170aa4278f6a317e868c8e9204df" }, "downloads": -1, "filename": "jira-cycle-extract-0.7.tar.gz", "has_sig": false, "md5_digest": "4387a0d1ca4d39c90c98c9f7865a2c28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13545, "upload_time": "2016-01-22T23:07:38", "url": "https://files.pythonhosted.org/packages/e1/41/919a0c967940c9c1d811eaadaa5ad1d4c46bf3ab798f44cbced54c15a10e/jira-cycle-extract-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "fc69f33a9c9dfb6fb7f1a3333c0d8903", "sha256": "bfc92428d55129efe75cf4783e87396568e1ed2aaa24b5656ab9627c20d2a9b6" }, "downloads": -1, "filename": "jira-cycle-extract-0.8.tar.gz", "has_sig": false, "md5_digest": "fc69f33a9c9dfb6fb7f1a3333c0d8903", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20989, "upload_time": "2016-05-30T22:08:58", "url": "https://files.pythonhosted.org/packages/63/3b/bc200f6f2bb3692c8de05461b5fe63810fff221d1fafdafdfee26f9c120a/jira-cycle-extract-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "418373dd09238e0d037fcfa7db6efa26", "sha256": "5eeeec62197bdb7e0c53e32f1ae4011ebc3fabee3be5d45f05aa15719750c204" }, "downloads": -1, "filename": "jira-cycle-extract-0.9.tar.gz", "has_sig": false, "md5_digest": "418373dd09238e0d037fcfa7db6efa26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27240, "upload_time": "2016-05-31T21:27:35", "url": "https://files.pythonhosted.org/packages/93/99/797b4017d7255d190bcc5c83c4dcd17a52ae584b4d90da1ffd57b9b8952f/jira-cycle-extract-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "75c0a18e7c200bbbb95f93aa55924237", "sha256": "4d166db381e5de52ac495b6e2cfb43ccf62fc397154621dd5eb250ee8a2aeef6" }, "downloads": -1, "filename": "jira-cycle-extract-0.10.tar.gz", "has_sig": false, "md5_digest": "75c0a18e7c200bbbb95f93aa55924237", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29089, "upload_time": "2016-06-08T21:27:28", "url": "https://files.pythonhosted.org/packages/1b/34/d2e4ae802dc60f91d8bd653d6f4d45e1f6e9429d1d3f1dc1c8309c6ec35b/jira-cycle-extract-0.10.tar.gz" } ] }