{ "info": { "author": "Will Weiss", "author_email": "will.weiss1230@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "caine\n=====\n\nsupporting actors process queues concurrently\n\nContact/Contribute\n~~~~~~~\n\nEmail: will.weiss1230@gmail.com\nGitHub: https://github.com/will-weiss/caine\n\nInstall\n~~~~~~~\n\npip install caine\n\nUsage\n~~~~~\n\nfrom caine import SupportingActor\n\n# Print the name attribute of the instance and the message\ndef deliver(message, instance_attributes):\n print '%s says, \"%s\"' %(instance_attributes['name'], message)\n\n# Print end scene\ndef end_scene(instance_attributes):\n print \"End scene.\"\n\n# Create my_actor which executes deliver using messages in its inbox \n# and executes end_scene on successful completion\nmy_actor = SupportingActor(receive = deliver, callback = end_scene, name = 'Michael')\n\n# Begin receiving messages\nmy_actor()\n\n# Put messages in inbox of my_actor.\nmy_actor.inbox.put(\"You were only supposed to blow the bloody doors off!\")\nmy_actor.inbox.put(\"She was only sixteen years old!\")\nmy_actor.inbox.put(\"Not many people know that!\")\n\n# Tell my_actor that it is complete when its inbox is empty.\nmy_actor.cut()\n\n# Output\n# ------\n# Michael says, \"You were only supposed to blow the bloody doors off!\"\n# Michael says, \"She was only sixteen years old!\"\n# Michael says, \"Not many people know that!\"\n# End scene.\n\nMore Horsepower\n~~~~~~~~~~~~~~~\n\nfrom caine import SupportingCast\nimport time\nimport random\n\n# SupportingCast will have 3 actors\nnum_actors = 3 \n\n# Wait a random number of seconds, then print stuff\ndef wait_rand_deliver(message, actor_attributes):\n wait_secs = random.randint(1,5)\n time.sleep(wait_secs)\n print 'Actor #%s waited %s seconds to say, \"%s\"' %(actor_attributes['actor_id'], wait_secs, message)\n\n# Create my_cast with 3 actors\nmy_cast = SupportingCast(receive = wait_rand_deliver, callback = end_scene, num = num_actors)\n\nmy_cast()\n\nfor i in xrange(10):\n my_cast.inbox.put(\"I got message #%s.\" %(i))\n\nmy_cast.cut()\n\n# Output\n# ------\n# Actor #0 waited 2 seconds to say, \"I got message #0.\"\n# Actor #0 waited 1 seconds to say, \"I got message #3.\"\n# Actor #1 waited 5 seconds to say, \"I got message #1.\"\n# Actor #2 waited 5 seconds to say, \"I got message #2.\"\n# Actor #0 waited 3 seconds to say, \"I got message #4.\"\n# Actor #1 waited 2 seconds to say, \"I got message #5.\"\n# Actor #2 waited 2 seconds to say, \"I got message #6.\"\n# Actor #0 waited 3 seconds to say, \"I got message #7.\"\n# Actor #2 waited 2 seconds to say, \"I got message #9.\"\n# Actor #1 waited 2 seconds to say, \"I got message #8.\"\n# End scene.\n\nCollecting Messages\n~~~~~~~~~~~~~~~~~~~\n\nfrom caine import Collector\n\n# A function which synthesizes a new message and prior messages\ndef print_even_collect_odd(new_number, collected_odds, instance_attributes):\n \n # Initially there are no prior messages so set collected_odds to be an empty list if collected_odds is None\n if collected_odds is None:\n collected_odds = []\n \n # Print even numbers\n if new_number % 2 == 0: \n print \"I got the even number: %s\" %(new_number)\n \n # Append odd numbers to collected_odds\n else: \n collected_odds.append(new_number)\n \n # Return collected_odds\n return collected_odds\n\n# A function called on completion\ndef print_collected(instance_attributes):\n print \"I collected these odd numbers: %s\" %(instance_attributes['collected'])\n\n# Create my_collector which collects messages using print_even_collect_odd\n# and executes print_collected on successful completion\nmy_collector = Collector(collect = print_even_collect_odd, callback = print_collected)\n\nmy_collector()\n\nfor i in xrange(10):\n my_collector.inbox.put(i)\n\nmy_collector.cut()\n\n# Output\n# ------\n# I got the even number: 0\n# I got the even number: 2\n# I got the even number: 4\n# I got the even number: 6\n# I got the even number: 8\n# I collected these odd numbers: [1, 3, 5, 7, 9]\n\nOther Functions\n~~~~~~~~~~~~~~~\n\n# Immediate Cut\n\n# maximum number of seconds an actor will wait before delivering a message\nmax_wait = 5\n\ndef wait_rand_deliver(message, actor_attributes):\n wait_secs = random.randint(1,max_wait)\n time.sleep(wait_secs)\n print 'Actor #%s waited %s seconds to say, \"%s\"' %(actor_attributes['actor_id'], wait_secs, message)\n\nmy_cast = SupportingCast(receive = wait_rand_deliver, callback = end_scene, num = 3)\n\nfor i in xrange(3):\n my_cast.inbox.put(\"I got this message in time to say it!\")\n\nmy_cast()\n\n# Wait longer than maximum time an actor will take a process a message\ntime.sleep(max_wait + 1)\n\n# Inbox processing is cut immediately\nmy_cast.cut(immediate = True)\n\n# These messages will not be processed\nfor i in xrange(3):\n my_cast.inbox.put(\"I did not get this message in time to say it!\")\n\n# Output\n# ------\n# Actor #2 waited 2 seconds to say, \"I got this message in time to say it!\"\n# Actor #0 waited 4 seconds to say, \"I got this message in time to say it!\"\n# Actor #1 waited 4 seconds to say, \"I got this message in time to say it!\"\n\n# Adding Actors to Cast\n\n# The cast starts with 2 actors\noriginal_actor_count = 2 \n\n# The cast will have 3 actors added to it\nadd_actor_count = 3 \n\ndef wait1_deliver(message_num, actor_attributes):\n time.sleep(1)\n if actor_attributes['actor_id'] < original_actor_count:\n print 'I am an actor from the original cast! I got message #%s' %(message_num)\n else:\n print 'I am an actor created later! I got message #%s' %(message_num)\n\n# Create my_cast with 2 actors\nmy_cast = SupportingCast(receive = wait1_deliver, callback = end_scene, num = original_actor_count)\n\nmy_cast()\n\nfor i in xrange(original_actor_count):\n my_cast.inbox.put(i)\n\n# Add 3 actors to my_cast\nmy_cast.add(add_actor_count)\n\nfor i in xrange(original_actor_count, original_actor_count + add_actor_count):\n my_cast.inbox.put(i)\n\nmy_cast.cut()\n\n# Output\n# ------\n# I am an actor from the original cast! I got message #0\n# I am an actor from the original cast! I got message #1\n# I am an actor created later! I got message #2\n# I am an actor created later! I got message #3\n# I am an actor created later! I got message #4\n# End scene.", "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/will-weiss/caine/", "keywords": null, "license": "http://www.apache.org/licenses/LICENSE-2.0.html", "maintainer": null, "maintainer_email": null, "name": "caine", "package_url": "https://pypi.org/project/caine/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/caine/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/will-weiss/caine/" }, "release_url": "https://pypi.org/project/caine/0.1.12/", "requires_dist": null, "requires_python": null, "summary": "supporting actors offer concurrent inbox processing", "version": "0.1.12" }, "last_serial": 1228445, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "150bbce2d20a46ba4eb9ed6a440fef8f", "sha256": "e894c580b394a15135d25d7e9ee1a9a410bb40561100cbf56e678c973e1cd6fc" }, "downloads": -1, "filename": "caine-0.0.1.tar.gz", "has_sig": false, "md5_digest": "150bbce2d20a46ba4eb9ed6a440fef8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4894, "upload_time": "2014-08-24T22:21:17", "url": "https://files.pythonhosted.org/packages/8a/1a/a5d197d6f08fb143e4544bcd08009c01a957ffe24c1e1837ed77270594a0/caine-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "0e48adb01e124f6bb7453ac120a4f219", "sha256": "3957134fca7ab664e19f14e7582bdb07dfffd720becff11e1156d31ab599fc44" }, "downloads": -1, "filename": "caine-0.0.10.tar.gz", "has_sig": false, "md5_digest": "0e48adb01e124f6bb7453ac120a4f219", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5320, "upload_time": "2014-08-27T16:34:24", "url": "https://files.pythonhosted.org/packages/e4/31/3c2d1502d443255c579e33e4ade68f20ce6a9272c64d285e828ae0fb0f27/caine-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "b7925541d2ab284037589d2eca913749", "sha256": "487ad216bd748bc4e96f31d592748665dda73b924ecd16be6948b41af5e35876" }, "downloads": -1, "filename": "caine-0.0.11.tar.gz", "has_sig": false, "md5_digest": "b7925541d2ab284037589d2eca913749", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5472, "upload_time": "2014-08-29T22:08:35", "url": "https://files.pythonhosted.org/packages/5d/70/30d88c6f5ed4e972685d83504da4ac21c52f18da210fecceea4752fe3224/caine-0.0.11.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "218ec8c8a2e4392d7569628d64edf599", "sha256": "cb5249ce5faf7ab4e81cc47eda33909cca7f773fe52d5baeb14ca1303a02c858" }, "downloads": -1, "filename": "caine-0.0.2.tar.gz", "has_sig": false, "md5_digest": "218ec8c8a2e4392d7569628d64edf599", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4937, "upload_time": "2014-08-24T22:36:41", "url": "https://files.pythonhosted.org/packages/fb/26/3a0bc383dc2672a54d5286eb1167849c5e07369aaaa189b1dd71528a289b/caine-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "8f31bc6e6a35462288d8aafc684c3815", "sha256": "6c8843cc508b6f2664ba5d69493bb905caf8ee06ccf1919407c20ad7304b63d1" }, "downloads": -1, "filename": "caine-0.0.3.tar.gz", "has_sig": false, "md5_digest": "8f31bc6e6a35462288d8aafc684c3815", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5243, "upload_time": "2014-08-24T22:42:01", "url": "https://files.pythonhosted.org/packages/c2/c3/677b267412d5dac1f83bda416a6560a751293aeb0fb818d3424b08c59d49/caine-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "8714648d0c22125b93b9bf164ecade93", "sha256": "1550e31b94e6d8f2f1afac410fe2f4b7642f18a49a2ae1cd26dc35b3a0817feb" }, "downloads": -1, "filename": "caine-0.0.4.tar.gz", "has_sig": false, "md5_digest": "8714648d0c22125b93b9bf164ecade93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5229, "upload_time": "2014-08-25T05:51:45", "url": "https://files.pythonhosted.org/packages/78/f7/97cdf42bd892d24e627c1b087bccee37ea13d107cdb7f00e7f434f82be12/caine-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "77ad9f6b25d2acae9507cf5773533a7e", "sha256": "3c86d31b176cb353c517d236dfc2fe9f4babe780c56cf95957e5f3e4626c969e" }, "downloads": -1, "filename": "caine-0.0.5.tar.gz", "has_sig": false, "md5_digest": "77ad9f6b25d2acae9507cf5773533a7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5091, "upload_time": "2014-08-26T15:13:52", "url": "https://files.pythonhosted.org/packages/f1/ab/8e530bc90e001aebb700911ed3d3b7adbd9b46466b8634b3de1c15767f3d/caine-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "e4d2fb5601ad730aaea1647330734a76", "sha256": "def08cfff81ace020d63ddf8de0dd1013fe9f1699ce27ed680724e956029305b" }, "downloads": -1, "filename": "caine-0.0.6.tar.gz", "has_sig": false, "md5_digest": "e4d2fb5601ad730aaea1647330734a76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5105, "upload_time": "2014-08-26T15:24:41", "url": "https://files.pythonhosted.org/packages/38/5e/0dae648375a5330c2e2a019ca175f16e7715656ee2c903f9c076b74cd188/caine-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "64eba9d2bbf054eb8c95143db13658f3", "sha256": "61e6d02aad3a7e2c9d73746e027ec71983b4262d1a3f7571d60c6c5f22787972" }, "downloads": -1, "filename": "caine-0.0.7.tar.gz", "has_sig": false, "md5_digest": "64eba9d2bbf054eb8c95143db13658f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5040, "upload_time": "2014-08-26T16:14:55", "url": "https://files.pythonhosted.org/packages/d5/60/74889929324807aa7d2e530674e363e31f7a67189d72acc0e98fcd68b359/caine-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "268f111fa42549ef5c4e0537e19f2467", "sha256": "2472009b2dd77ea6dd41a2b9bf86847436071d186b2021a4fd2fc9eb5607ffd1" }, "downloads": -1, "filename": "caine-0.0.8.tar.gz", "has_sig": false, "md5_digest": "268f111fa42549ef5c4e0537e19f2467", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5085, "upload_time": "2014-08-26T16:38:37", "url": "https://files.pythonhosted.org/packages/e6/6f/c1d84d85139845d8ac73435bd0bb2b6894595d9a3febd5b03da4b9cf21c3/caine-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "49347215b0db95bd626280bbfec90ea3", "sha256": "a63218da69ecc88e60b127501dc0abab63dfaa657bf5944709716c7bd49754ca" }, "downloads": -1, "filename": "caine-0.0.9.tar.gz", "has_sig": false, "md5_digest": "49347215b0db95bd626280bbfec90ea3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5143, "upload_time": "2014-08-26T16:42:54", "url": "https://files.pythonhosted.org/packages/c1/f7/fbbc71ac4290e847a729286942a4cc5dd6d48fdb0d4b36f04dd28a19a48f/caine-0.0.9.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "35f32bd6558e675617ae4ebb6c174d10", "sha256": "3945afd37624481d896b8f9b270f6ad409b2a9d0299df601caf80af297a03b2f" }, "downloads": -1, "filename": "caine-0.1.1.tar.gz", "has_sig": false, "md5_digest": "35f32bd6558e675617ae4ebb6c174d10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6102, "upload_time": "2014-09-02T16:42:48", "url": "https://files.pythonhosted.org/packages/bb/86/5b2041ae797a2a803424f064faf16a7a56f2260573e1587c5557cd436877/caine-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "1522c41964ef8f367e1d6edd419ef74f", "sha256": "44970b20f5f0ebf11acbe3873071655990dbe70af90361415cb24d2252938fb4" }, "downloads": -1, "filename": "caine-0.1.10.tar.gz", "has_sig": false, "md5_digest": "1522c41964ef8f367e1d6edd419ef74f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8195, "upload_time": "2014-09-16T17:07:50", "url": "https://files.pythonhosted.org/packages/02/78/a3222e7cfa0b43c9e90b1a7d8097a390534b08f5fc94f0c63cd83e86f063/caine-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "891f08daf87256b06af79689b7bde1aa", "sha256": "fda9f62ab2082fa4a64f276a65033ff5c380758cfc0c630862476f318a0d118d" }, "downloads": -1, "filename": "caine-0.1.11.tar.gz", "has_sig": false, "md5_digest": "891f08daf87256b06af79689b7bde1aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8241, "upload_time": "2014-09-17T20:51:06", "url": "https://files.pythonhosted.org/packages/44/00/ffc800106426455feb446f29bae6d7230d262b1f9fe90a8b83c52bc5640d/caine-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "3329389353c3ce976442cbf2e951b13c", "sha256": "602e7ec8b96a7f9bcaf859a35221921b9fd14a7c3d30980c5848b8a539ddeec1" }, "downloads": -1, "filename": "caine-0.1.12.tar.gz", "has_sig": false, "md5_digest": "3329389353c3ce976442cbf2e951b13c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8246, "upload_time": "2014-09-17T20:54:49", "url": "https://files.pythonhosted.org/packages/73/ab/818f14211a75141ccec38ff87774e24adc1e9ba861fe12265e1aed9f501a/caine-0.1.12.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "ea4c4c5bd5de224e7e93c463ed675b81", "sha256": "747be045fd20f35d36e77eedee8a60c6057cb13ec5750bac50f06c9983caeb87" }, "downloads": -1, "filename": "caine-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ea4c4c5bd5de224e7e93c463ed675b81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6112, "upload_time": "2014-09-02T18:04:55", "url": "https://files.pythonhosted.org/packages/2f/42/e389357454f0bc3b93d71813ba5be9c957652bdc6e8de573b9f592e0b02e/caine-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "2b8eecc63c8a34ee2dfa439d42cc7e7b", "sha256": "9a1ece46dada2cd1aff0270bdcd3f36b196483ef5feb4b0465e666fe158b36ae" }, "downloads": -1, "filename": "caine-0.1.3.tar.gz", "has_sig": false, "md5_digest": "2b8eecc63c8a34ee2dfa439d42cc7e7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6239, "upload_time": "2014-09-02T19:15:09", "url": "https://files.pythonhosted.org/packages/81/f3/9516a94d0c7cdc723193df002eaeb7af4ff4c41a3c4ee57d83f1d5548f7d/caine-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "8dde287ccec3eb7d8dce99df84f3eb6e", "sha256": "6cc833b0e9aec4e72d3b7059498c195a4c64d57225f650a52b0d159b02c896c0" }, "downloads": -1, "filename": "caine-0.1.4.tar.gz", "has_sig": false, "md5_digest": "8dde287ccec3eb7d8dce99df84f3eb6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6237, "upload_time": "2014-09-04T16:49:58", "url": "https://files.pythonhosted.org/packages/56/e8/eea534993f450a049946c9267b6b96d8e85a406e8b6965bbeb6f4bbd9eec/caine-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "eaef9166efa17a0683d27eea6ed02b0f", "sha256": "b8d1116c5fd5ab0736230fc6d5dfd261b39b02376435645f0c06b0dc778bb756" }, "downloads": -1, "filename": "caine-0.1.5.tar.gz", "has_sig": false, "md5_digest": "eaef9166efa17a0683d27eea6ed02b0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7104, "upload_time": "2014-09-10T17:15:13", "url": "https://files.pythonhosted.org/packages/d5/18/2de884465d470ed961a07fa66c0189b6c681b7e93e484ecd1e33e7425721/caine-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "e9ca7426cc0ec2c1770bfbcfc13a6429", "sha256": "d84cde417921636bfdc14a5643a4a4d83c7df7fecbf574cec71569a2f9d9e70b" }, "downloads": -1, "filename": "caine-0.1.6.tar.gz", "has_sig": false, "md5_digest": "e9ca7426cc0ec2c1770bfbcfc13a6429", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7788, "upload_time": "2014-09-10T18:19:57", "url": "https://files.pythonhosted.org/packages/14/80/f029106506e1ad94177941dc3ebe1cdd1c6da70f643799b4ce5f0a36a3d8/caine-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "b93634b190dfe445de13e0df3c91a36a", "sha256": "0425895633e919e4822c12df7574791519e33619c1ca6f86af7ccc8217ac2655" }, "downloads": -1, "filename": "caine-0.1.7.tar.gz", "has_sig": false, "md5_digest": "b93634b190dfe445de13e0df3c91a36a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8099, "upload_time": "2014-09-10T19:22:44", "url": "https://files.pythonhosted.org/packages/ab/a6/0d83ee4d6a95f5a0bc21238929e895377a5eb5be3e492a92e8e0975c2e27/caine-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "9be743a1ca7005a3641a722585a75a36", "sha256": "1c6890603cde5bda1b260a0a50c8131e73da0b76543650f0b93ddf8f30feddb5" }, "downloads": -1, "filename": "caine-0.1.8.tar.gz", "has_sig": false, "md5_digest": "9be743a1ca7005a3641a722585a75a36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8102, "upload_time": "2014-09-10T19:27:03", "url": "https://files.pythonhosted.org/packages/52/ba/bff5c2605270428c712a1257927796594fcc74a6c161667d88ed16f83eca/caine-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "fc89fcd63cb25a06b07a875e5a00efef", "sha256": "6f88b6d6ef2d642e80c8eab648a06cf3895c7d27e924b8cc806ac31873bc582a" }, "downloads": -1, "filename": "caine-0.1.9.tar.gz", "has_sig": false, "md5_digest": "fc89fcd63cb25a06b07a875e5a00efef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8186, "upload_time": "2014-09-16T17:04:47", "url": "https://files.pythonhosted.org/packages/af/c3/0f3bd2c702354d6aed78c1d3c51d3a61538144af2d54ea7e203f838a6bda/caine-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3329389353c3ce976442cbf2e951b13c", "sha256": "602e7ec8b96a7f9bcaf859a35221921b9fd14a7c3d30980c5848b8a539ddeec1" }, "downloads": -1, "filename": "caine-0.1.12.tar.gz", "has_sig": false, "md5_digest": "3329389353c3ce976442cbf2e951b13c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8246, "upload_time": "2014-09-17T20:54:49", "url": "https://files.pythonhosted.org/packages/73/ab/818f14211a75141ccec38ff87774e24adc1e9ba861fe12265e1aed9f501a/caine-0.1.12.tar.gz" } ] }