{
"info": {
"author": "J C Lawrence",
"author_email": "claw@kanga.nu",
"bugtrack_url": null,
"classifiers": [],
"description": "cfgtool\n=======\n\nA configuration management tool that provides for self-documenting hosts\nand coherently versioned configurations.\n\nWhat does ``cfgtool`` do?\n-------------------------\n\n``cfgtool`` allows applications to separate their configuration files\nfrom the host specific values that go into those files. These values,\ncalled *beliefs*, can be deployed either by hand or by common\ninfrastructure orchistration tools `SaltStack `__\nor `Ansible `__.\n\nDisclaimer\n----------\n\nWhile ``cfgtool`` shouldn't have any issue running on most Linux\ndistributions, it has only been tested on Debian based Linux systems.\n\nHow do I get it?\n----------------\n\n``cfgtool`` can be installed via ``pip``. It should be included as a\ndependency for each application you install that is expected to have its\nconfiguration managed by it.\n\n::\n\n pip install cfgtool\n\nHow does it work?\n-----------------\n\nUpon installation (assuming with root permissions), ``cfgtool`` creates\nthe following configuration file and directories.\n\n::\n\n /etc/cfgtool/cfgtool.conf\n /etc/cfgtool/module.d/\n /etc/cfgtool/belief.d/\n\n``module.d`` contains a file for each installed application using\n``cfgtool``. This file contains a list of configuration files we expect\n``cfgtool`` to generate for that application. Each of these\nconfiguration files is expected to have a corresponding ``.templ`` file\nat the same directory as it is going to be installed.\n\nExample:\n\n::\n\n /etc/my_application/application.conf\n /etc/my_application/application.conf.templ\n\nThe ``.templ`` file is the template configuration file it will seed with\nbeliefs to generate the actual configuration file.\n\n``belief.d`` contains JSON files, which hold our *beliefs* used in\ngenerating application configurations.\n\nWe can change the locations of our ``module.d`` and ``belief.d``\ndirectory in our ``cfgtool.conf`` file if we wish.\n\n::\n\n belief_dir = \"/my/new/belief/dir/...\"\n module_dir = \"/my/new/module/dir/...\"\n\nAn example\n----------\n\nLet's say we have a Python application called ``reporter``. ``reporter``\nis a program that generates a report every hour about the statistics for\nthe machine it runs on and sends them to a reporting server. Reporter\nhas two configuration files:\n\n``/etc/reporter/reporter.conf`` defines what we want the report of our\nmachine to include.\n\n::\n\n temperature=\n system_load=\n disk_space=\n ...\n\n``/etc/reporter/report_send_init.sh`` defines where we want the report\nto go.\n\n.. code:: bash\n\n export REPORTER_USER=\n export REPORTER_PASS=\n export FTP_SERVER=\n export REPORT_PREFIX=\n\nThis is used in a ``/etc/cron.hourly/reporter`` cron script that runs\nevery hour to generate a report and upload it to an FTP server.\n\n.. code:: bash\n\n #! /bin/bash\n\n . /etc/reporter/report_send_init.sh\n\n filename=\"${REPORT_PREFIX}_$(date +%Y-%m-%d-%H-%M)\"\n reporter -c /etc/reporter/reporter.conf > /tmp/${filename}.txt\n\n ftp -n < [--force]\n\nWe replace ```` with the application we would like to create\nconfiguration files for. ``--force`` means we would *actually* like to\nwrite (to keep it differentiated from non-destructive commands).\n\nLet's create the configuration files for ``reporter``. This command\nneeds to be run on each machine ``reporter`` is installed on and should\nbe part of your deployment process.\n\n.. code:: bash\n\n $ cfgtool write reporter --force\n Module: reporter\n Generate...\n File: /etc/reporter/reporter.conf\n File: /reporter/report_send_init.sh\n\nLet's look at what was produced on machine A:\n\n``/etc/reporter/reporter.conf``\n\n.. code:: bash\n\n temperature=true\n system_load=false\n disk_space=false\n ...\n\n``/etc/reporter/report_send_init.sh``\n\n.. code:: bash\n\n export REPORTER_USER=\"machine_a\"\n export REPORTER_PASS=\"very_secret_password\"\n export FTP_SERVER=\"letters.company.com\"\n export REPORT_PREFIX=\"letters-a\"\n\nWow, each machine is configured and ready to report just like that!\n\nWhat if our configuration changes?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNow it is a safe assumption that our setup will not necessarily stay the\nsame forever. Let's say two years after starting to use ``cfgtool``, a\nnew cooling system is introduced into our letters cluster and more\nmachines are added. We no longer have temperature issues we need to\nmonitor, but system load is now something we need to watch for some\nreason.\n\nA new ``reporter`` beliefs file has been deployed onto this cluster.\n\n``/etc/reporter/belief.d/reporter.json``\n\n.. code:: json\n\n {\n \"reporter\": {\n \"temperature\": false,\n \"system_load\": true,\n \"disk\": false\n }\n }\n\nTo update our configurations, we simply run our ``cfgtool write``\ncommand on the cluster, as we did with the initial installation.\n\n.. code:: bash\n\n $ cfgtool write reporter --force\n\nAnd once again, our configurations are up to date!\n\nWait, what if I made a mistake and want my old configuration back?\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n``cfgtool`` is careful in that it always leaves a time stamped copy of\nwhatever it overwrites behind. Here's what our directory on machine A\nlooks like after running ``cfgtool write`` again.\n\n::\n\n \u251c\u2500\u2500 etc\n \u2502 \u251c\u2500\u2500 reporter\n \u2502 \u2502\u00a0\u00a0 \u251c\u2500\u2500 reporter.conf.templ\n \u2502 \u2502\u00a0\u00a0 \u251c\u2500\u2500 report_send_init.sh.templ\n \u2502 \u2502\u00a0\u00a0 \u251c\u2500\u2500 reporter.conf\n \u2502 \u2502\u00a0\u00a0 \u251c\u2500\u2500 reporter.conf-backup.2016-01-20_0019.23\n \u2502 \u2502\u00a0\u00a0 \u251c\u2500\u2500 report_send_init.sh\n \u2502 \u2502\u00a0\u00a0 \u251c\u2500\u2500 report_send_init.sh-backup.2016-01-20_0019.23\n \u2502 \u2502\u00a0\u00a0 \u251c\u2500\u2500 ...\n\nEventually this may really start to pile up after many consecutive\nredeployments:\n\n::\n\n reporter.conf\n reporter.conf-backup.2016-01-10_0019.23\n reporter.conf-backup.2016-01-11_0112.01\n reporter.conf-backup.2016-01-12_1202.26\n reporter.conf-backup.2016-01-13_0311.04\n reporter.conf-backup.2016-01-14_1049.45\n reporter.conf-backup.2016-01-15_0059.15\n reporter.conf-backup.2016-01-16_5001.02\n reporter.conf-backup.2016-01-17_0019.21\n ...\n\nWe can have ``cfgtool`` toss all of our backups with the ``clean``\ncommand.\n\n::\n\n $ cfgtool clean reporter\n\nAnd now all the backups are gone.\n\n::\n\n reporter.conf\n ...\n\nHmm, I can't recall if I (re)generated my configurations already\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWe can check if our existing configurations files match our beliefs (or\neven exist) by running the ``check`` command.\n\n.. code:: bash\n\n $ cfgtool check reporter\n Module: reporter\n Generate...\n File: /etc/reporter/reporter.conf-check\n File: /reporter/report_send_init.sh-check\n Check...\n File: /etc/reporter/reporter.conf-check\n File: /reporter/report_send_init.sh-check\n\nIf anything is inconsistent, the checks will not pass. Leave out the\nmodule name to do a check for *all* installed applications.\n\nWhat if I want to generate configurations to see what they look like but *not* immediately use them?\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nRun ``cfgtool`` with the ``sample`` command to generate config files\nwith a ``.sample`` extension.\n\n.. code:: bash\n\n $ cfgtool sample reporter\n Module: reporter\n Generate...\n File: /etc/reporter/reporter.conf.sample\n File: /reporter/report_send_init.sh.sample\n\nIf everything looks good, just run ``cfgtool`` with ``write``.\n\nWait a minute, going back to this thing about all the beliefs being combined by ``cfgtool``, doesn't that expose secrets?\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nNow say for example we install another application called ``uploader``\nwhich takes files that our vast client base uploads and puts them in\nAmazon S3. Among its beliefs is an AWS key:\n\n``/etc/cfgtool/belief.d/uploader.json``\n\n.. code:: json\n\n {\n \"uploader\": {\n \"aws_secret_key\": \"...\"\n }\n }\n\nWe don't want tools like ``reporter`` getting access to that information\nby simply putting ``${uploader.aws_secret_key}`` somewhere in their\nconfiguration ``templ`` files. What do we do?\n\nFortunately, ``cfgtool`` is smart enough to realize who should know\nwhat. As long as there is a top level belief called ``uploader``,\n``cfgtool`` will realize it should only be seen by the ``uploader``\napplication and hide it.\n\nWe can confirm this by checking the beliefs that are exposed to\n``reporter`` after installing ``uploader`` with the ``belief``\n``cfgtool`` command in machine A.\n\n.. code:: bash\n\n $ cfgtool belief db_reports\n Module: db_reports\n {\n \"master\": {\n \"domain\": \"letters.company.com\",\n \"username\": \"machine_a\",\n \"password\": \"very_secret_password\"\n },\n \"host\": {\n \"name\": \"letters-a\",\n \"address\": \"lettersa.company.com\"\n },\n \"reporter\": {\n \"temperature\": false,\n \"system_load\": true,\n \"disk\": true\n }\n }\n\nThe beliefs of ``uploader`` have not been exposed. You can be assured\nyour ``cfgtool`` utilizing apps only know what they are supposed to\nknow!\n\nWhat's next?\n------------\n\nThis page summarizes the major functionality of ``cfgtool``. To learn\nmore about other features of ``cfgtool``, check out the help section via\nyour terminal.\n\n.. code:: bash\n\n $ cfgtool -help",
"description_content_type": null,
"docs_url": null,
"download_url": "UNKNOWN",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://pypi.python.org/pypi/cfgtool",
"keywords": "configuration management",
"license": "LGPL v3.0",
"maintainer": null,
"maintainer_email": null,
"name": "cfgtool",
"package_url": "https://pypi.org/project/cfgtool/",
"platform": "UNKNOWN",
"project_url": "https://pypi.org/project/cfgtool/",
"project_urls": {
"Download": "UNKNOWN",
"Homepage": "https://pypi.python.org/pypi/cfgtool"
},
"release_url": "https://pypi.org/project/cfgtool/0.3.post6/",
"requires_dist": null,
"requires_python": null,
"summary": "Cfgtool configuration management",
"version": "0.3.post6"
},
"last_serial": 2190595,
"releases": {
"0.1.17": [
{
"comment_text": "",
"digests": {
"md5": "92244525dc10df5aaec75f917081f052",
"sha256": "448f1277a4de75ab1b123096d8fbc9e0c0b2d0d0804c8f54782cb5e67a96ff9c"
},
"downloads": -1,
"filename": "cfgtool-0.1.17.tar.gz",
"has_sig": false,
"md5_digest": "92244525dc10df5aaec75f917081f052",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6633,
"upload_time": "2015-07-26T23:07:55",
"url": "https://files.pythonhosted.org/packages/ee/87/ff8ffb60a91909d5d765cd7bd84262107ebad218dfc37eb07537c1974679/cfgtool-0.1.17.tar.gz"
}
],
"0.1.18": [
{
"comment_text": "",
"digests": {
"md5": "f3df5a83bdc29f7fcfa13ccc382c9318",
"sha256": "4ef78afb01295468b0f5484cadf9f6bc96470b477f4984a0322064d2df22ad91"
},
"downloads": -1,
"filename": "cfgtool-0.1.18.tar.gz",
"has_sig": false,
"md5_digest": "f3df5a83bdc29f7fcfa13ccc382c9318",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8841,
"upload_time": "2015-08-02T05:32:09",
"url": "https://files.pythonhosted.org/packages/d1/7c/035a3a5898232d499b3d3ac5b001693f79f60a2c143c6ba18bea66e03566/cfgtool-0.1.18.tar.gz"
}
],
"0.1.19": [
{
"comment_text": "",
"digests": {
"md5": "991bcb288c82e8400cc5a1e750029175",
"sha256": "852bd385724a6cf76ef2c6eb1049eb11f3a2998baa6fad0699a0847fdbf6cb1d"
},
"downloads": -1,
"filename": "cfgtool-0.1.19.tar.gz",
"has_sig": false,
"md5_digest": "991bcb288c82e8400cc5a1e750029175",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10076,
"upload_time": "2015-08-03T22:33:30",
"url": "https://files.pythonhosted.org/packages/5d/20/29bf43c469c43df975991811bb7ec1cabec17b2147f7b08996f7a52a609f/cfgtool-0.1.19.tar.gz"
}
],
"0.1.21": [
{
"comment_text": "",
"digests": {
"md5": "7fbfd12d6afc4e60a08856ab6de9a682",
"sha256": "e5eb3dc8d1df41c3f47c03a12751a60612b03a6cc411de03d9a7e63b3fde67a4"
},
"downloads": -1,
"filename": "cfgtool-0.1.21.tar.gz",
"has_sig": false,
"md5_digest": "7fbfd12d6afc4e60a08856ab6de9a682",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10272,
"upload_time": "2015-08-11T01:29:09",
"url": "https://files.pythonhosted.org/packages/da/e9/7310e041c014769a96d391b7bee45b49ef6f46a0456292382959f369d36c/cfgtool-0.1.21.tar.gz"
}
],
"0.1.post40": [
{
"comment_text": "",
"digests": {
"md5": "d7b0ee625e5fe308ce8251aa0b82a8f8",
"sha256": "84b1989749c0917a3ba93cbe5c0129a648aefd1fa8eac0ad4953d449b2210033"
},
"downloads": -1,
"filename": "cfgtool-0.1.post40.tar.gz",
"has_sig": false,
"md5_digest": "d7b0ee625e5fe308ce8251aa0b82a8f8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 25248,
"upload_time": "2016-01-23T05:11:43",
"url": "https://files.pythonhosted.org/packages/44/fa/069c51c94fdd5c7d8e9169b531b360abc16ae753732f2d90e60ef4897e13/cfgtool-0.1.post40.tar.gz"
}
],
"0.1.post41": [
{
"comment_text": "",
"digests": {
"md5": "bdb2180e1d25010bcbba0ff7c9d59634",
"sha256": "7588721e3c1ec9958a89b99730ef6f147bd45cce9b55b6df14d9cadb28f3fa0d"
},
"downloads": -1,
"filename": "cfgtool-0.1.post41.tar.gz",
"has_sig": false,
"md5_digest": "bdb2180e1d25010bcbba0ff7c9d59634",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 25627,
"upload_time": "2016-01-23T09:06:17",
"url": "https://files.pythonhosted.org/packages/00/83/de8df61d649189b07b4e8a8d9fa4b07870af7c2c0c90320e3d173e19ed71/cfgtool-0.1.post41.tar.gz"
}
],
"0.1.post43": [
{
"comment_text": "",
"digests": {
"md5": "e448aa5e868e62ddfc36b03e1637d5a4",
"sha256": "c059844d226dacb86325d1bc981647a09d43238e6a8ddbcd0321cef70e4360b2"
},
"downloads": -1,
"filename": "cfgtool-0.1.post43.tar.gz",
"has_sig": false,
"md5_digest": "e448aa5e868e62ddfc36b03e1637d5a4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 25631,
"upload_time": "2016-01-23T09:53:24",
"url": "https://files.pythonhosted.org/packages/37/b8/70082f14c979ee30f826e2a39581027f07919e6601821b20451f144ce41e/cfgtool-0.1.post43.tar.gz"
}
],
"0.2.post10": [
{
"comment_text": "",
"digests": {
"md5": "fff1d60fbf6d0fccf808321f4f6ddb28",
"sha256": "48e92f56f655d2be44aeff812bf909448a594cac7401d03389da29ca02c53fac"
},
"downloads": -1,
"filename": "cfgtool-0.2.post10.tar.gz",
"has_sig": false,
"md5_digest": "fff1d60fbf6d0fccf808321f4f6ddb28",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26637,
"upload_time": "2015-10-13T21:34:23",
"url": "https://files.pythonhosted.org/packages/fa/8d/8f2d87066e3aa3cb7be8acd59c351add68876d6b8176eed248890acb5d80/cfgtool-0.2.post10.tar.gz"
}
],
"0.2.post11": [
{
"comment_text": "",
"digests": {
"md5": "c65a762acf17e11d385cba462d0a4487",
"sha256": "98531b32966a867fc7f3a230d0d39397d8322d1713f20faa6b22973b147c282f"
},
"downloads": -1,
"filename": "cfgtool-0.2.post11.tar.gz",
"has_sig": false,
"md5_digest": "c65a762acf17e11d385cba462d0a4487",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26642,
"upload_time": "2015-10-13T21:35:28",
"url": "https://files.pythonhosted.org/packages/62/df/f31b17250645d3d5a2186a5109425120abb7bdc155bf1d53cd377dca2564/cfgtool-0.2.post11.tar.gz"
}
],
"0.2.post12": [
{
"comment_text": "",
"digests": {
"md5": "cee99ef6f5468c4d9380a4a0aa8e0a2e",
"sha256": "21094ff34f7a34d6a00447a04e43c9fdb24dc834f68deba51452fa93125b6939"
},
"downloads": -1,
"filename": "cfgtool-0.2.post12.tar.gz",
"has_sig": false,
"md5_digest": "cee99ef6f5468c4d9380a4a0aa8e0a2e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26630,
"upload_time": "2015-10-13T21:36:12",
"url": "https://files.pythonhosted.org/packages/3a/90/cf1ea6a7a71eb3d0f20094b88e710fc436f8519f76650ee5d1087e2d1179/cfgtool-0.2.post12.tar.gz"
}
],
"0.2.post13": [
{
"comment_text": "",
"digests": {
"md5": "0f08d86b2595d73a49c5abb8dc36fae8",
"sha256": "ca5d0004793c7cae1e605f2d289d4444cdad7de08887765e1767becbae085381"
},
"downloads": -1,
"filename": "cfgtool-0.2.post13.tar.gz",
"has_sig": false,
"md5_digest": "0f08d86b2595d73a49c5abb8dc36fae8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26640,
"upload_time": "2015-10-14T00:26:30",
"url": "https://files.pythonhosted.org/packages/b8/b7/8383dd986c8f11a96fdb79bd10026c173f241383a0b3347fa9c3b95170ba/cfgtool-0.2.post13.tar.gz"
}
],
"0.2.post16": [
{
"comment_text": "",
"digests": {
"md5": "5e708fc54dafea297a713c788efa64e9",
"sha256": "aab56ff209ba73d7b62f109a98d46e5eedb9fe2f479a5eee0a044c50e7281f35"
},
"downloads": -1,
"filename": "cfgtool-0.2.post16.tar.gz",
"has_sig": false,
"md5_digest": "5e708fc54dafea297a713c788efa64e9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26687,
"upload_time": "2015-12-12T01:30:19",
"url": "https://files.pythonhosted.org/packages/b0/56/6b94b70207d5289df5f6dab62bc5154e5ed00d1c3a67d5f9bf10ae27a6d7/cfgtool-0.2.post16.tar.gz"
}
],
"0.2.post17": [
{
"comment_text": "",
"digests": {
"md5": "1475cfd538d333452cef375c9ec9de1b",
"sha256": "5e143c27b46febdaf2bb770ebfb9452a4fbdf74d06754ed2c11a48ccccf13fa6"
},
"downloads": -1,
"filename": "cfgtool-0.2.post17.tar.gz",
"has_sig": false,
"md5_digest": "1475cfd538d333452cef375c9ec9de1b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26706,
"upload_time": "2015-12-12T01:35:28",
"url": "https://files.pythonhosted.org/packages/be/48/527e53cd144a2cc5d96770f191194a890c8ef1c41c4c59226082cdd1f66c/cfgtool-0.2.post17.tar.gz"
}
],
"0.2.post22": [
{
"comment_text": "",
"digests": {
"md5": "25c1649b613392d34e7acbcc0735648f",
"sha256": "5fa8a1424d6deb9877ced3da30578cec4a94e4ca858da06ffa0cfe6a7fc003f1"
},
"downloads": -1,
"filename": "cfgtool-0.2.post22.tar.gz",
"has_sig": false,
"md5_digest": "25c1649b613392d34e7acbcc0735648f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 27299,
"upload_time": "2016-01-29T00:22:06",
"url": "https://files.pythonhosted.org/packages/30/d5/858a65dff317a7bca5983cb9d509b7fe1840d847bc5f952bf7d079d29a7e/cfgtool-0.2.post22.tar.gz"
}
],
"0.2.post28": [
{
"comment_text": "",
"digests": {
"md5": "e0f27e0b1a6c0d5c4eec6cf0c629be65",
"sha256": "3125d25d523b7248408d637032d2fab598534a6e532bf4ace9f3be856a4ca129"
},
"downloads": -1,
"filename": "cfgtool-0.2.post28.tar.gz",
"has_sig": false,
"md5_digest": "e0f27e0b1a6c0d5c4eec6cf0c629be65",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 35847,
"upload_time": "2016-02-09T02:30:36",
"url": "https://files.pythonhosted.org/packages/56/1f/2f16f6169f6060095fb9dc52cfccc3400c503e44ee5de3993520d28bf9bb/cfgtool-0.2.post28.tar.gz"
}
],
"0.2.post29": [
{
"comment_text": "",
"digests": {
"md5": "f3c7bf4b3617cab0ae8fbaa8d01efb10",
"sha256": "6a3ae7e7f1e0ce4afb9107891ad183d3e4df21b06d97f29a33cb330e7a5d6d16"
},
"downloads": -1,
"filename": "cfgtool-0.2.post29.tar.gz",
"has_sig": false,
"md5_digest": "f3c7bf4b3617cab0ae8fbaa8d01efb10",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 35878,
"upload_time": "2016-02-09T03:24:41",
"url": "https://files.pythonhosted.org/packages/a6/17/cdbaa467203e2a638b0c1c32f9da5ad8493a6e93bc94dfa9c041a1933bc9/cfgtool-0.2.post29.tar.gz"
}
],
"0.2.post4": [
{
"comment_text": "",
"digests": {
"md5": "13e5792cc4cd454bd9cf4d309627b6d6",
"sha256": "4594c5ba883b2dd145097678991db8e95cadc9365b0f463584e47e20fdded412"
},
"downloads": -1,
"filename": "cfgtool-0.2.post4.tar.gz",
"has_sig": false,
"md5_digest": "13e5792cc4cd454bd9cf4d309627b6d6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26240,
"upload_time": "2015-08-11T01:35:17",
"url": "https://files.pythonhosted.org/packages/ad/b1/13abcf781fcb8baf82fd73a6b65c942ee122b3b7cab20c45773574764c7a/cfgtool-0.2.post4.tar.gz"
}
],
"0.2.post7": [
{
"comment_text": "",
"digests": {
"md5": "df0b99352834ecac96905fcf37d739e0",
"sha256": "2550bb1cb858fae4270fd90a18db4edef9465ae08cbfc3bc16509a5dff7d88c0"
},
"downloads": -1,
"filename": "cfgtool-0.2.post7.tar.gz",
"has_sig": false,
"md5_digest": "df0b99352834ecac96905fcf37d739e0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26618,
"upload_time": "2015-10-06T01:01:15",
"url": "https://files.pythonhosted.org/packages/15/6d/170031dbbeab5df4d0066a201436dd987c5c935fb350568f3d7558bc7e6c/cfgtool-0.2.post7.tar.gz"
}
],
"0.2.post8": [
{
"comment_text": "",
"digests": {
"md5": "37afe6260871e50923783e6a8681f1ad",
"sha256": "d2ed1e054888c4abff705d43be122f5505402cc99141530488b100c295fc4c26"
},
"downloads": -1,
"filename": "cfgtool-0.2.post8.tar.gz",
"has_sig": false,
"md5_digest": "37afe6260871e50923783e6a8681f1ad",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26626,
"upload_time": "2015-10-13T20:42:59",
"url": "https://files.pythonhosted.org/packages/39/ad/3b521e2f21abaf7a3da7e1e7ace2498c07857d48661b83d13eb55980e83a/cfgtool-0.2.post8.tar.gz"
}
],
"0.2.post9": [
{
"comment_text": "",
"digests": {
"md5": "69833d65be9b46062596c10bca4f4187",
"sha256": "be6efe54ab1a836d61df37f3adb2be338bebb2c69be6459f5f1cb11901b9bfa3"
},
"downloads": -1,
"filename": "cfgtool-0.2.post9.tar.gz",
"has_sig": false,
"md5_digest": "69833d65be9b46062596c10bca4f4187",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 26626,
"upload_time": "2015-10-13T21:16:18",
"url": "https://files.pythonhosted.org/packages/ae/b2/1d11eaa5f087825830208cb28891649cb79004587f5b41c5fadabb4f4c74/cfgtool-0.2.post9.tar.gz"
}
],
"0.3.post2": [
{
"comment_text": "",
"digests": {
"md5": "e4d6d7a258492a4140deda3efde2d6a8",
"sha256": "c14b954fe0372c0d627f18f1220f1afafbb68e1b2514ea8803476f27abc0771f"
},
"downloads": -1,
"filename": "cfgtool-0.3.post2.tar.gz",
"has_sig": false,
"md5_digest": "e4d6d7a258492a4140deda3efde2d6a8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 37463,
"upload_time": "2016-02-09T22:57:04",
"url": "https://files.pythonhosted.org/packages/46/db/055acde950869bdf300426d9e8652e0e80bfe90aebf899182be30bb5402e/cfgtool-0.3.post2.tar.gz"
}
],
"0.3.post4": [
{
"comment_text": "",
"digests": {
"md5": "7ebaac58021a52c31175c004f68dbce3",
"sha256": "820fdbd37835ab02ed53a4a6020b86dc5c4d44f314fee340944b0f65d3538fdd"
},
"downloads": -1,
"filename": "cfgtool-0.3.post4.tar.gz",
"has_sig": false,
"md5_digest": "7ebaac58021a52c31175c004f68dbce3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 37669,
"upload_time": "2016-05-05T23:27:51",
"url": "https://files.pythonhosted.org/packages/76/d0/8a9b803342824b11f91919b3d1c160bcaf48a67b2487846880aadc34048a/cfgtool-0.3.post4.tar.gz"
}
],
"0.3.post6": [
{
"comment_text": "",
"digests": {
"md5": "357d5490a33363ce36a74e4c0cc6ca0b",
"sha256": "327d4711b6b3f4cf1f79d593cc3a6857df2d393556c9778ce1e25c71e12be026"
},
"downloads": -1,
"filename": "cfgtool-0.3.post6.tar.gz",
"has_sig": false,
"md5_digest": "357d5490a33363ce36a74e4c0cc6ca0b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 104967,
"upload_time": "2016-06-28T00:24:34",
"url": "https://files.pythonhosted.org/packages/4b/2c/a9a2fe1465fe49c92b483cca7fdb5c063ccb1794b2379bf4b8c14861d634/cfgtool-0.3.post6.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "357d5490a33363ce36a74e4c0cc6ca0b",
"sha256": "327d4711b6b3f4cf1f79d593cc3a6857df2d393556c9778ce1e25c71e12be026"
},
"downloads": -1,
"filename": "cfgtool-0.3.post6.tar.gz",
"has_sig": false,
"md5_digest": "357d5490a33363ce36a74e4c0cc6ca0b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 104967,
"upload_time": "2016-06-28T00:24:34",
"url": "https://files.pythonhosted.org/packages/4b/2c/a9a2fe1465fe49c92b483cca7fdb5c063ccb1794b2379bf4b8c14861d634/cfgtool-0.3.post6.tar.gz"
}
]
}