{ "info": { "author": "Michael Williamson", "author_email": "UNKNOWN", "bugtrack_url": null, "classifiers": [], "description": "whack: compile and run relocatable Linux programs\n=================================================\n\nWhack allows Linux programs such as nginx and the Apache HTTP Server to\nbe installed with a single command. For instance, to install nginx to\n``~/apps/nginx``:\n\n::\n\n whack install git+https://github.com/mwilliamson/whack-package-nginx.git ~/apps/nginx\n\nMost Linux binaries aren't relocatable, meaning that they're compiled\nfor a specific path on your filesystem. This means that if you want to\ninstall exactly the same program to a different path, you'll need to\nrecompile the entire program. Whack allows you to create relocatable\nversions of these programs. On the first installation, the program is\ncompiled and copied to the target directory. On subsequent\ninstallations, a cached version of the application is copied to the\ntarget directory.\n\nInstallation\n------------\n\nBefore you can use Whack, you need to install a utility called\n``whack-run``. You can download\n`whack-run `_ from GitHub:\n\n::\n\n $ curl -L https://github.com/mwilliamson/whack-run/archive/1.0.0.tar.gz > whack-run-1.0.0.tar.gz\n $ tar xzf whack-run-1.0.0.tar.gz\n $ cd whack-run-1.0.0\n $ make\n\nAnd as root:\n\n::\n\n # make install\n\nThis installs the binary ``whack-run`` to ``/usr/local/bin``. Once\n``whack-run`` has been installed, you can install Whack as an ordinary\nPython package:\n\n::\n\n pip install whack\n\nUsage\n-----\n\n::\n\n whack install PACKAGE_SOURCE DESTINATION\n\nFor instance, to install nginx under ``~/apps/nginx``:\n\n::\n\n whack install git+https://github.com/mwilliamson/whack-package-nginx.git ~/apps/nginx\n\nnginx can then be run with the command:\n\n::\n\n ~/apps/sbin/nginx\n\nPackage sources can be git or hg repositories (prefix the repository URL\nwith ``git+`` and ``hg+`` respectively), tarballs fetched over HTTP\n(detected by the ``http://`` prefix), or local paths (detected by one of\nthe prefixes ``/``, ``./``, or ``../``).\n\nYou can pass build parameters using the argument\n``--add-parameter KEY=VALUE``, or with its short alias ``-p KEY=VALUE``.\nThe build parameters that can be set depend on the package. For\ninstance, to install a specific version of nginx:\n\n::\n\n whack install git+https://github.com/mwilliamson/whack-package-nginx.git ~/apps/nginx \\\n -p nginx_version=1.2.7\n\nIf a build parameter isn't set, a package will usually have a sensible\ndefault.\n\nCreating package sources\n------------------------\n\nA package source describes how to go from nothing to an installed\ninstance of a given program. The output directory containing the\ninstalled program is referred to as a package.\n\nThe below gives a fairly thorough description of how a package is built,\nbut it will probably more sense once you take a look at a concrete\nexample. The `nginx source\npackage `_ is a good\nexample since it's relatively straightforward.\n\nThere are normally at least three files in each package source:\n\n- ``whack/whack.json``: a JSON file describing the package source\n- ``whack/downloads``: an executable file that outputs required\n downloads to stdout\n- ``whack/build``: an executable file that is executed to build the\n package\n\nwhack/whack.json\n~~~~~~~~~~~~~~~~\n\n``whack/whack.json`` should be a JSON object containing the following\nproperties:\n\n- ``name``: the name of the package, such as ``nginx``. It should only\n contain lowercase letters, numbers, and hypens.\n- ``sourcePaths`` (optional): the paths in the source package that are\n required to build the package. Defaults to ``[\"whack\"]``.\n- ``defaultParameters`` (optional): an object containing the default\n build parameters for the package.\n\nBuild parameters\n~~~~~~~~~~~~~~~~\n\nWhen executing ``whack/downloads`` and ``whack/build``, any build\nparameters are passed as environment variables. Build parameters are set\naccording to the defaults in ``whack/whack.json``. The build parameters\nexplicitly passed by the user are then added, overriding any default\nparameters. The name of each build parameter is converted to uppercase\nin the environment. For instance, the build parameter \"version\" is\navailable as the environment variable \"VERSION\".\n\nwhack/downloads\n~~~~~~~~~~~~~~~\n\nBefore building the package, ``whack/downloads`` is executed with the\noutput to stdout being captured. The output should be a list of URLs\nthat are required to build the package, separated by new lines.\nDownloads are cached, so if you have an URL where the contents might\nchange (for instance, the latest tarball for a program), you can either:\n\n- Try to find a URL for that specific version\n- Download the file manually in the build step\n\nBuilding the package\n~~~~~~~~~~~~~~~~~~~~\n\nThe following steps are executed to build a package:\n\n- Read ``whack/whack.json`` to get a package description.\n- Set the values of the build parameters based on the defaults set in\n ``whack/whack.json`` and the user-provided parameters.\n- Create a temporary directory, called the build directory.\n- Copy the directories and files in the source package specified by\n ``sourcePaths`` into the build directory.\n- Execute ``whack/downloads`` with the build parameters set as\n environment variables, and download the files into the build\n directory.\n- Execute ``whack/build``:\n- The build parameters are set as environment variables\n- The current working directory is set to the build directory\n- The target directory for the package is passed as a command line\n argument\n\nWhen the package is built, any executable files should be placed in\neither ``.bin`` or ``.sbin`` directories, instead of ``bin`` and\n``sbin``. When the package is installed by Whack, ``bin`` and ``sbin``\nwill contain thin wrappers that set up the filesystem correctly, and\nthen delegate to the equivalent executables in ``.bin`` and ``.sbin``.\nSee the section \"How does Whack work?\" for more details.\n\nExamples of package sources:\n\n- `nginx `_\n- `Apache HTTP\n server `_\n- `Apache HTTP server with\n PHP5 `_\n\nHow does Whack work?\n--------------------\n\nMany Linux applications can be compiled and installed by running the\nfollowing commands, or similar:\n\n::\n\n $ ./configure\n $ make\n $ make install\n\nThis usually installs the application under ``/usr/local``. However,\nsometimes we want to install isolated instances of an application\nwithout being root. For instance, if we're developing a web application\nthat uses Apache, it's helpful to have an isolated installation of\nApache. We can change the installation prefix when running\n``./configure``:\n\n::\n\n $ ./configure --prefix=/home/user/projects/web-app/apache\n $ make\n $ make install\n\nWhile this works, it requires us to re-compile the application whenever\nwe want to install it in a different location. Depending on the\napplication, compilation can take a quite a while.\n\nWhack solves this problem by using ``unshare`` and ``mount`` to change\nthe filesystem for a single process. Each application is compiled with\nits prefix set to ``/usr/local/whack``. Before running the binary for an\napplication, Whack uses the ``unshare`` syscall to create a private\nmount namespace. This means that any ``mount`` calls only have visible\neffects within that process. We then mount the directory that the\napplication was installed in onto ``/usr/local/whack``, and ``exec`` the\nbinary.\n\nFor instance, say we've installed nginx to ``~/web-app/nginx`` by\nrunning\n\n::\n\n whack install git+https://github.com/mwilliamson/whack-package-nginx.git \\\n ~/web-app/nginx\n\nThe actual nginx binary can be found in ``~/web-app/nginx/.sbin`` (note\nthat the binary is in a directory called ``.sbin``, not ``sbin``). If we\ntry to run ``~/web-app/nginx/.sbin/nginx`` directly, we'll get an error:\n\n::\n\n $ ~/web-app/nginx/.sbin/nginx\n nginx: [alert] could not open error log file: open() \"/usr/local/whack/logs/error.log\" failed (2: No such file or directory)\n 2013/02/18 11:25:17 [emerg] 11586#0: open() \"/usr/local/whack/conf/nginx.conf\" failed (2: No such file or directory)\n\nnginx expects to be installed under ``/usr/local/whack``, but it's\nactually installed under ``~/web-app/nginx``. To run nginx successfully,\nwe need to use ``whack-run``:\n\n::\n\n $ whack-run ~/web-app/nginx ~/web-app/nginx/.sbin/nginx\n\nWhen using ``whack-run``, the following happens:\n\n1. ``whack-run`` calls ``unshare(CLONE_NEWNS)``, creating a private\n mount namespace.\n\n2. ``whack-run`` mounts ``~/web-app/nginx`` onto ``/usr/local/whack``.\n Since we called ``unshare`` earlier, this mount is only visible to\n this process.\n\n3. ``whack-run`` drops its user and group privileges. ``whack-run`` is\n installed with the ``setuid`` bit set so it can call ``unshare`` and\n ``mount``.\n\n4. ``whack-run`` calls ``exec`` with the arguments it was passed i.e.\n ``exec ~/web-app/nginx/.sbin/nginx``\n\nUsing ``whack-run`` to run nginx is a bit tedious. However, we can call\n``~/web-app/nginx/sbin/nginx`` directly (instead of\n``~/web-app/nginx/.sbin/nginx``), which will call ``whack-run`` with\nappropriate arguments.\n\nAlthough ``whack-run`` has the ``setuid`` bit set, it only uses root\nprivileges to call ``unshare`` and ``mount``. After that, user and group\nprivileges are dropped.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/mwilliamson/whack", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "whack", "package_url": "https://pypi.org/project/whack/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/whack/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/mwilliamson/whack" }, "release_url": "https://pypi.org/project/whack/0.7.0/", "requires_dist": null, "requires_python": null, "summary": "Utility for installing binaries from source with a single command", "version": "0.7.0" }, "last_serial": 859583, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "67f30d9ab6b420862bc43d46dfed53f8", "sha256": "261b48fd967d006d36a5b033d6ebf3a803c2b4188ba4d99558b45ae25575f87c" }, "downloads": -1, "filename": "whack-0.1.0.tar.gz", "has_sig": false, "md5_digest": "67f30d9ab6b420862bc43d46dfed53f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4014, "upload_time": "2012-11-22T20:19:52", "url": "https://files.pythonhosted.org/packages/5a/d2/e7aa89e30353e3ca54d64ce8609169c73d74acd4c616a6608cf113bac132/whack-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "89f630c0096eea3ba56c1f469effbf29", "sha256": "845972977b379bd448b5cf85246717f248bae84e7ce6751f028da4b6baa4bb92" }, "downloads": -1, "filename": "whack-0.2.0.tar.gz", "has_sig": false, "md5_digest": "89f630c0096eea3ba56c1f469effbf29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4832, "upload_time": "2012-12-14T13:13:48", "url": "https://files.pythonhosted.org/packages/60/fe/be8027f15b9be60f5437e6f29836bc0ea1605d3da513c5d02486ec7706ac/whack-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "2bddd7f5b0d0c834af8ff806955759c3", "sha256": "f6dc68007519b7b0ec25f522c7c74090ea9c190ca9596923c16fd7d542e8b50c" }, "downloads": -1, "filename": "whack-0.2.1.tar.gz", "has_sig": false, "md5_digest": "2bddd7f5b0d0c834af8ff806955759c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6286, "upload_time": "2012-12-15T12:39:57", "url": "https://files.pythonhosted.org/packages/e9/44/761824bcbaccb07e276b6e5f3b7ec8b3ede179763bd679b1ac1862495b0d/whack-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "24380733f8d75d94cc56e1668536be36", "sha256": "66faf18351634399ab0c841525380c775b18adb9b4e98d2b1ae5860ff4e1b51f" }, "downloads": -1, "filename": "whack-0.2.2.tar.gz", "has_sig": false, "md5_digest": "24380733f8d75d94cc56e1668536be36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6256, "upload_time": "2012-12-15T15:45:05", "url": "https://files.pythonhosted.org/packages/b7/ec/e5ce463faeb76ff734985e4bcbaafb4e0624d6730e1349d43e529ce417b9/whack-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "7f0f31025fff859c72342e3957543c8e", "sha256": "c252f99f2f86c5a8a929660b25bbf6a13c852a709243e2229ea1c500a942ee38" }, "downloads": -1, "filename": "whack-0.2.3.tar.gz", "has_sig": false, "md5_digest": "7f0f31025fff859c72342e3957543c8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5420, "upload_time": "2012-12-24T11:45:11", "url": "https://files.pythonhosted.org/packages/5c/07/78e8ef40ce7e3f214b45b08391b11b9a4929850a2159b0dcc62ad28df7d1/whack-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "5e6c9c13d07705723e83ccddb2fdd7d4", "sha256": "425adf54e52f28c94b78455639acfab426ea34928009da48fb998e5c500325a6" }, "downloads": -1, "filename": "whack-0.2.4.tar.gz", "has_sig": false, "md5_digest": "5e6c9c13d07705723e83ccddb2fdd7d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5609, "upload_time": "2012-12-26T18:16:09", "url": "https://files.pythonhosted.org/packages/a9/6e/39149acc0b3ef6c6de889b486df26858571b483ee487e672f397deff3578/whack-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "842cf58d4b365d4431f24fa4bf47e30b", "sha256": "e9733e15b21c06b4372885e48fe92a3feb58f8a613184b734f3c1fc6402a8f4d" }, "downloads": -1, "filename": "whack-0.2.5.tar.gz", "has_sig": false, "md5_digest": "842cf58d4b365d4431f24fa4bf47e30b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5604, "upload_time": "2012-12-26T19:29:44", "url": "https://files.pythonhosted.org/packages/35/66/32587d433a1c7f02296a9cf2008666c2ca323e4e90866aba5e0044d958f6/whack-0.2.5.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "2f5f55b9d5f765e4b258e1ae6fd9b5e4", "sha256": "0fc4a65239a5fdcc0b8141501eb82c32add8875286cf7c4bf1eee62bfb925fc1" }, "downloads": -1, "filename": "whack-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2f5f55b9d5f765e4b258e1ae6fd9b5e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6656, "upload_time": "2013-01-02T15:44:09", "url": "https://files.pythonhosted.org/packages/88/44/55ccd0792cf4fadcb7ee848bec5b83514878ef8955d7ae3d3391b2c457a2/whack-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "569796f87452a593c7ff396336e53b62", "sha256": "668d491e6adf95e1bb9c48408f2d8c98cb422d5250f88100e2b8dfe1b3f93729" }, "downloads": -1, "filename": "whack-0.3.1.tar.gz", "has_sig": false, "md5_digest": "569796f87452a593c7ff396336e53b62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6655, "upload_time": "2013-01-02T16:35:04", "url": "https://files.pythonhosted.org/packages/c5/60/2ab5e1c91b3328f23e16d0ae800c0fd91db4a764c56fc5839d7da6b80401/whack-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "0c32a66424bdf1ae4a16feef2c1f90bf", "sha256": "b76dd938aa93e0c52103877f769dd0ad7bdb33d2d0f2269c0852c7b9c4755f99" }, "downloads": -1, "filename": "whack-0.3.2.tar.gz", "has_sig": false, "md5_digest": "0c32a66424bdf1ae4a16feef2c1f90bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6826, "upload_time": "2013-01-02T22:57:06", "url": "https://files.pythonhosted.org/packages/36/13/6cb0d341aa956162a02e56fb85b013d28700e3f9dfa6e80dd5a4e2315db7/whack-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "f6afd662484e43aba9e41d65d1923275", "sha256": "91238ba1ef7fef4dff7e0e025142c98a4c3ab0d906977b8a3389373b3ff56cab" }, "downloads": -1, "filename": "whack-0.3.3.tar.gz", "has_sig": false, "md5_digest": "f6afd662484e43aba9e41d65d1923275", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6691, "upload_time": "2013-01-02T23:31:33", "url": "https://files.pythonhosted.org/packages/be/81/8d9c5b7a0775d16a8f9bf5f9d0b2835f5bd2b6199adb63ee15355e4caba2/whack-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "babdcb2b67bacfaedda9ffd5a4d3b3c4", "sha256": "2aa778df2996a7d4da90b89bfa26585fa2c041b3730773f0774a2709bdd13f81" }, "downloads": -1, "filename": "whack-0.3.4.tar.gz", "has_sig": false, "md5_digest": "babdcb2b67bacfaedda9ffd5a4d3b3c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6905, "upload_time": "2013-01-03T20:40:38", "url": "https://files.pythonhosted.org/packages/9a/5e/0d554a2fc447403ac072aa17e7927f57bdd875970e2bf5b9c44cbf0f60c4/whack-0.3.4.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "282366c55aca4c0cb4183e96f6e980af", "sha256": "ceac20a58e0212ea279cbc9fa28ece2f554005d554271cbe41917c9161eb7b26" }, "downloads": -1, "filename": "whack-0.4.0.tar.gz", "has_sig": false, "md5_digest": "282366c55aca4c0cb4183e96f6e980af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6152, "upload_time": "2013-02-10T20:42:23", "url": "https://files.pythonhosted.org/packages/02/24/aafa3637620cb56c52399c91f6e947618629d58750c7b5e252e4febc3106/whack-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "a6436c3c972ae14dbd1ba02a17e91c97", "sha256": "1afa7f4847017bc3d153147d5673d21b507be5a88b87ddf896e455b638d977db" }, "downloads": -1, "filename": "whack-0.4.1.tar.gz", "has_sig": false, "md5_digest": "a6436c3c972ae14dbd1ba02a17e91c97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6850, "upload_time": "2013-02-12T19:32:08", "url": "https://files.pythonhosted.org/packages/ad/e2/fe5bf8b81718cae0858ae79ebe38ca315df2b2f9b81d994055596cf9643e/whack-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "5807f041d4071e980b22238b76a0135a", "sha256": "bc1542bd90dde7bf6c164ed0ae9c0bac6975fb1565592792437ea84fc68278be" }, "downloads": -1, "filename": "whack-0.4.2.tar.gz", "has_sig": false, "md5_digest": "5807f041d4071e980b22238b76a0135a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6884, "upload_time": "2013-02-12T21:57:06", "url": "https://files.pythonhosted.org/packages/31/07/f8f773d81691a125c697ee04cb60e4589711de9573ff5d08e898e09cb2fa/whack-0.4.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "30825f23404dbcc9087fcd92291e4ef7", "sha256": "714ab32a97775bee0ab656a683a27b2ab4e964fd72f7b1918c87d21980b11415" }, "downloads": -1, "filename": "whack-0.5.0.tar.gz", "has_sig": false, "md5_digest": "30825f23404dbcc9087fcd92291e4ef7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12470, "upload_time": "2013-02-24T13:37:08", "url": "https://files.pythonhosted.org/packages/39/e9/2f3ae9d3c8ea13018bb13f68d742eeb90f3e32942f52fe8445776d5aaea2/whack-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "be5379d886a8f79b839b7d6a5e36656e", "sha256": "2d2aaafade215325af1001740a23ca53bb0dfde2f89207a0c5707ec5c207c2e9" }, "downloads": -1, "filename": "whack-0.6.0.tar.gz", "has_sig": false, "md5_digest": "be5379d886a8f79b839b7d6a5e36656e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12794, "upload_time": "2013-03-06T19:54:21", "url": "https://files.pythonhosted.org/packages/d9/0e/74af8979227dda3991159160f3fb817e76059f5daeb3fed0d9ad0c21ba66/whack-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "3e9c32f8248de882154e04f48ac5f516", "sha256": "086c6288e497d3b056e420b7df6d809b139ec871a5d8f4d2b7fc0c0bd4e1c9c8" }, "downloads": -1, "filename": "whack-0.6.1.tar.gz", "has_sig": false, "md5_digest": "3e9c32f8248de882154e04f48ac5f516", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12800, "upload_time": "2013-03-07T14:29:53", "url": "https://files.pythonhosted.org/packages/0e/b9/2f52d03349527ba86873c1c444b1a8214383709b4dec84ba90579f076b0b/whack-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "91b76d01874000fe40e8d06559531c06", "sha256": "282563f4647538195c4f9930c7804fe84fa2b4d402642969f9d0764edba600ce" }, "downloads": -1, "filename": "whack-0.6.2.tar.gz", "has_sig": false, "md5_digest": "91b76d01874000fe40e8d06559531c06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12887, "upload_time": "2013-03-07T20:55:30", "url": "https://files.pythonhosted.org/packages/50/60/4ef2d905b941fe709ab66451bc74a8838d302fc7a38ebbc40fa904e132d9/whack-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "c08940dc7a34524a1f4778c7fcfa5e3e", "sha256": "3ca60495dc334848a0e104d07fc3a1dbdd94ff490b6723b8cc962b12f8d09ef8" }, "downloads": -1, "filename": "whack-0.6.3.tar.gz", "has_sig": false, "md5_digest": "c08940dc7a34524a1f4778c7fcfa5e3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12396, "upload_time": "2013-03-24T16:50:33", "url": "https://files.pythonhosted.org/packages/61/eb/53e893044a5744aa2492a26ec17d850f729387f08016659545781475f38a/whack-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "80add349876af2c85c4adc9aa002bd10", "sha256": "7887b3ca9806e92441554390498ef218e306fbed3e57ca7b1d7714ffba5a5310" }, "downloads": -1, "filename": "whack-0.6.4.tar.gz", "has_sig": false, "md5_digest": "80add349876af2c85c4adc9aa002bd10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12377, "upload_time": "2013-03-24T22:42:20", "url": "https://files.pythonhosted.org/packages/3f/e5/ed05d5ad91fa338e74bb1d724e3cddd3a76723e968375a615608ffc3deeb/whack-0.6.4.tar.gz" } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "f84fbf794684d9adc5e93736fb7bcfed", "sha256": "9830fb69a2db77a4c929e391c6a3045b4d1e0b5ddd37b26b1bb6111eb469f843" }, "downloads": -1, "filename": "whack-0.6.5.tar.gz", "has_sig": false, "md5_digest": "f84fbf794684d9adc5e93736fb7bcfed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12672, "upload_time": "2013-03-25T21:29:58", "url": "https://files.pythonhosted.org/packages/d1/d7/2807a757b38e5e7ddf3eb5363788854c4a5429dd0efc271e8f889f346dfe/whack-0.6.5.tar.gz" } ], "0.6.6": [ { "comment_text": "", "digests": { "md5": "32dc12bc453312991ab2be837583b121", "sha256": "230586388ffbffb31e07264159c730197163de6f45e4f05b4c9b6121718ff0b6" }, "downloads": -1, "filename": "whack-0.6.6.tar.gz", "has_sig": false, "md5_digest": "32dc12bc453312991ab2be837583b121", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12993, "upload_time": "2013-04-21T10:04:04", "url": "https://files.pythonhosted.org/packages/08/85/c28d4cf69945c3800478b5f4dd2592afcb28681dbd748cbf0a66840e7ffd/whack-0.6.6.tar.gz" } ], "0.6.7": [ { "comment_text": "", "digests": { "md5": "50ca395ba289ceb641721dee54b74cd4", "sha256": "4792a0b8add4a09a17d40b75de83110bd551865303dd1393b6908ca49335f504" }, "downloads": -1, "filename": "whack-0.6.7.tar.gz", "has_sig": false, "md5_digest": "50ca395ba289ceb641721dee54b74cd4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12788, "upload_time": "2013-04-22T10:21:01", "url": "https://files.pythonhosted.org/packages/3c/d8/dd4ef3b27143f0491e8969d7aa8472437c00d068f7679e1f2c2c5bfe207e/whack-0.6.7.tar.gz" } ], "0.6.8": [ { "comment_text": "", "digests": { "md5": "8e7dd306eda2682fffa73554b06d8b29", "sha256": "e0d7f01fff4f27671d8cd06f6cb7b4f952856198536c0baa0bb2dfbe77e46d5a" }, "downloads": -1, "filename": "whack-0.6.8.tar.gz", "has_sig": false, "md5_digest": "8e7dd306eda2682fffa73554b06d8b29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12800, "upload_time": "2013-04-22T11:07:42", "url": "https://files.pythonhosted.org/packages/79/3d/24adb7a8f2079760a1c64b064c66441459c51449c93cdb7fe76a7f931436/whack-0.6.8.tar.gz" } ], "0.6.9": [ { "comment_text": "", "digests": { "md5": "be5106c6cdf21c56b88832b3995c5530", "sha256": "335be303899f2a35ce2c8275162d831edcaa63a7c66b2152f1ee2f49a5199df3" }, "downloads": -1, "filename": "whack-0.6.9.tar.gz", "has_sig": false, "md5_digest": "be5106c6cdf21c56b88832b3995c5530", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13138, "upload_time": "2013-05-09T20:33:08", "url": "https://files.pythonhosted.org/packages/1f/b7/4b99aafd6b9be6d8647d43dd3b00f9027537e30ba5898f87677fcad8babd/whack-0.6.9.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "851144be76b1f9902e69fc72c145cdfd", "sha256": "ac1ef9c6aecfc8e1611a7a8d367da9303aedb848c22b977dad8437bd93505ecc" }, "downloads": -1, "filename": "whack-0.7.0.tar.gz", "has_sig": false, "md5_digest": "851144be76b1f9902e69fc72c145cdfd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18092, "upload_time": "2013-09-07T16:51:55", "url": "https://files.pythonhosted.org/packages/10/9b/cf69fa8725dbaa73f04f2a4fe1152de2e7c3f885aebb759f439a89ce5968/whack-0.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "851144be76b1f9902e69fc72c145cdfd", "sha256": "ac1ef9c6aecfc8e1611a7a8d367da9303aedb848c22b977dad8437bd93505ecc" }, "downloads": -1, "filename": "whack-0.7.0.tar.gz", "has_sig": false, "md5_digest": "851144be76b1f9902e69fc72c145cdfd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18092, "upload_time": "2013-09-07T16:51:55", "url": "https://files.pythonhosted.org/packages/10/9b/cf69fa8725dbaa73f04f2a4fe1152de2e7c3f885aebb759f439a89ce5968/whack-0.7.0.tar.gz" } ] }