{ "info": { "author": "Ivo Rothschild", "author_email": "ivo@clarify.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3" ], "description": ".. image:: https://travis-ci.org/irothschild/stefuna.svg\n :target: https://travis-ci.org/irothschild/stefuna\n\n===============================\nstefuna\n===============================\n\nStefuna is a simple AWS Step Function Activity server framework.\nIt makes it incredibly quick and easy to write workers to\nprocess activity tasks in Python.\n\nInstall\n-------\n\n.. code-block:: bash\n\n $ pip install stefuna\n\n\nImplementation\n---------------\n\nStefuna uses a multiprocessing Pool of pre-forked worker processes\nto run the activity tasks. There is a single instance of a Server\nclass in the main process and a single instance of a Worker\nclass in each worker process. To implement your task, simply\ncreate a Worker subclass, override the\n``run_task(self, task_token, input_data)`` method and start the\nserver.\n\nThe ``run_task`` method can do whatever work it requires and then\nreturn a result as a string or dict (which is automatically JSON\nstringified). It can be a long-running task but the worker process\nwon't be released until the method returns.\n\nIf ``run_task`` raises an exception, the task is failed\nwith a ``Task.Failure`` error which can be handled in the Step\nFunction state machine. Alternatively, a worker can call\n``self.send_task_failure(error, cause)`` with a custom error\nstring and return value from ``run_task`` will be ignored.\n\nConfigurable heartbeats are supported for longer-running tasks.\n\nA healthcheck port can be configured so the server listens for\nHTTP GET requests on ``http://localhost:/``\n\nThe Server instance in the main class can be customized by\nsetting a custom Server subclass in the config and overriding\nthe ``init`` method.\n\nThe Python multiprocessing start method for worker processes\ncan be set in the config. By default 'spawn' is used to ensure\na clean, safe worker process. Although potentially slower than\n'forkserver' (or 'fork' which is not recommended), since new\nworkers are typically rarely created, this should not be an\nissue.\n\n\nGetting Started\n---------------\n\nSee the examples folder for the files described below.\n\nStep Function\n^^^^^^^^^^^^^^\n\nCreate an AWS Step Function Activity, for example ``hello``.\n\nThen create a Step Function State Machine, using the ARN of the activity you just created.\nFor example a single state ``Hello World`` State Machine:\n\n.. code-block:: JavaScript\n\n {\n \"Comment\": \"A Hello World example with a single activity\",\n \"StartAt\": \"HelloWorld\",\n \"States\": {\n \"HelloWorld\": {\n \"Type\": \"Task\",\n \"Resource\": \"arn:aws:states:us-east-1:00000000000000:activity:hello\",\n \"End\": true\n }\n }\n }\n\n\nWorker Code\n^^^^^^^^^^^\n\nCreate a worker class, which is a subclass of the ``stefuna.Worker``\nin the file ``hello_worker.py``:\n\n.. code-block:: python\n\n import logging\n from stefuna import Worker\n\n logger = logging.getLogger('stefuna.example')\n\n\n class HelloWorker(Worker):\n\n\tdef init(self):\n\t \"\"\"Initialize the single instance in a worker\"\"\"\n # self.config is the worker config\n self.logger.debug('Init worker instance')\n\n\tdef run_task(self, task_token, input_data):\n\t self.logger.debug('Worker in run_task')\n\n\t # Do some work!\n # self.config is the worker config\n\n\t # Return value can be a string or a dict/array that\n\t # will be JSON stringified.\n\t return {\"message\": \"Hello World\"}\n\n\nCreate a config file ``hello_config.py``, setting the worker class, server name, and\nactivity ARN:\n\n.. code-block:: python\n\n #\n # Stefuna server worker config file\n #\n\n # [OPTIONAL] The module path of the server class\n server = 'examples.hello_server.HelloServer'\n\n # The module path of the worker class\n worker = 'examples.hello_worker.HelloWorker'\n\n # The base name of the server that will be combined with host and pid\n # and used when requesting tasks from AWS.\n name = 'HelloExample'\n\n # Set the ARN for the activity that this server will work on.\n activity_arn = 'arn:aws:states:us-east-1:00000000000000:activity:hello'\n\n # [OPTIONAL] The number of worker processes.\n # If None, it will be set to the number of cores.\n # Default is None.\n processes = None\n\n # [OPTIONAL] Number of seconds between heartbeats.\n # None or 0 means there is no heartbeat.\n # Default is no heartbeat.\n heartbeat = 120\n\n # [OPTIONAL] Maximum number of tasks for a worker to run before the worker\n # process is automatically killed and a new one created.\n # If None, workers will not be killed.\n # Default is None.\n maxtasksperchild = None\n\n # [OPTIONAL] The multiprocessing start method for worker processes.\n # See https://docs.python.org/3.7/library/multiprocessing.html for more info\n # The default is 'spawn' which starts a fresh python interpreter process.\n # It is rather slow compared to using fork or forkserver, but we typically\n # create workers and leave them running so the impact should be minimal.\n # Possible values are:\n # spawn - Recommended (Unix and Windows)\n # fork - Not recommended due to thread-safety issues\n # forkserver - On Unix platforms which support passing fds over Unix pipes\n # '' - Uses the python defaults. Not recommended.\n start_method = 'spawn'\n\n # [OPTIONAL] If set to a non-zero integer, an HTTP healthcheck handler listens on\n # the port number.\n # Healthcheck requests are GET requests to 'http://localhost:/'\n # and return JSON: {\"status\": \"ok\"}\n # Default is 8080\n healthcheck = 8080\n\n # [OPTIONAL] The server_config is an arbitrary dictionary that is available\n # in the server instance as self.config and passed to server init()\n # Use it for server-specific configuration.\n server_config = {\n 'foo': 'bar'\n }\n\n # [OPTIONAL] The worker_config is an arbitrary dictionary that is available\n # in the worker instance as self.config\n # Use it for worker-specific configuration.\n worker_config = {\n\t'foo': 'bar'\n }\n\n\nRun the server:\n\n.. code-block:: bash\n\n $ stefuna --config=hello_config\n\n\n.. code-block:: bash\n\n $ stefuna --help\n usage: stefuna [-h] [--config CONFIG] [--worker WORKER]\n [--activity-arn ACTIVITY_ARN] [--processes PROCESSES]\n [--loglevel LOGLEVEL]\n\n Run a Step Function Activity server.\n\n optional arguments:\n -h, --help show this help message and exit\n --config CONFIG Module or dict of config to override defaults\n --worker WORKER Module and class of worker in dot notation. Overrides\n config setting.\n --activity-arn ACTIVITY_ARN\n Step Function Activity ARN, Overrides config setting.\n --processes PROCESSES\n Number of worker processes. Overrides config setting.\n If 0, cpu_count is used.\n --loglevel LOGLEVEL Loglevel (debug, info, warning, error or critical).\n Overrides config setting.\n\n\nHistory (Change Log)\n--------------------\n\nSee `HISTORY.rst `_\n\n\nLicense\n-------\n\nMIT License\n\nSee `LICENSE `_\n\n\n\n\nHistory\n-------\n\n1.0.1 [2019-06-02]\n* Restrict to python >=3.4\n* Add activity-arn arg to stefuna\n\n1.0.0 [2019-03-20]\n* Added docs\n\n0.9.9 [2019-03-20]\n* Fixed spawn configuration for workers on Unix.\n\n0.9.8 [2019-03-07]\n* Check server class was located\n* Add start_method as config setting and default to spawn.\n* BREAKING: Changed default config values. Heartbeat is disabled by default.\n\n0.9.7 [2018-10-18]\n* Truncate the failure cause if over the result size limit\n* Removed Python 3.4 from Travis test envs due to a dateutils / urllib3 install conflict.\n\n0.9.6 [2017-11-06]\n* Fix missing attribute bug if no healthcheck configured\n* Improved timing of heartbeats\n\n0.9.5 [2017-10-30]\n* Keep pypi happy\n\n0.9.4 [2017-10-30] [not available through pypi]\n* Shutdown healthcheck server immediately when stopping server\n* Added info logs\n\n0.9.3 [2017-10-27]\n* Add customizable Server subclass with init method.\n\n0.9.2 [2017-10-25]\n* Change default loglevel to info.\n* Improve log format.\n* Handle client error when doing heartbeat and don't retry for failed tokens.\n\n0.9.1 [2017-10-20]\n* Suppress boto dropped connection info log messages.\n\n0.9.0 [2017-09-26]\n* Add HTTP healthcheck\n\n0.8.4 [2017-09-18]\n* Add loglevel arg\n\n0.8.3 [2017-09-18]\n* Add processes arg to stefuna\n* Add timestamp to log format\n\n0.8.2 [2017-08-16]\n* Set the region based on region in activity ARN.\n\n0.8.1 [2017-08-15]\n* First public release\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/irothschild/stefuna", "keywords": "AWS Step Functions Activity task server worker", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "stefuna", "package_url": "https://pypi.org/project/stefuna/", "platform": "", "project_url": "https://pypi.org/project/stefuna/", "project_urls": { "Homepage": "https://github.com/irothschild/stefuna" }, "release_url": "https://pypi.org/project/stefuna/1.0.1/", "requires_dist": [ "boto3 (<2.0.0,>=1.4.6)" ], "requires_python": ">=3.4.0", "summary": "AWS Step Function Activity server framework", "version": "1.0.1" }, "last_serial": 5349395, "releases": { "0.8.0": [ { "comment_text": "", "digests": { "md5": "83bb6481bc449db1cc9776336120b4a5", "sha256": "a87668af7a144a05719798f70aa05c2c41d125930583e692f2f359fc69bf0dea" }, "downloads": -1, "filename": "stefuna-0.8.0.tar.gz", "has_sig": false, "md5_digest": "83bb6481bc449db1cc9776336120b4a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7431, "upload_time": "2017-08-15T14:19:45", "url": "https://files.pythonhosted.org/packages/df/eb/00eb52385d95075849be5fba6a53c01b9d21b1783617b6fd2b82d75412f3/stefuna-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "29fc9952698f894b2c32d258c53d0b6c", "sha256": "989d145da8f2b4f24ec9c7b3ab7ed24dd7e541dd7b58e5efa15aa76d79efda19" }, "downloads": -1, "filename": "stefuna-0.8.1.tar.gz", "has_sig": false, "md5_digest": "29fc9952698f894b2c32d258c53d0b6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8647, "upload_time": "2017-08-15T14:25:39", "url": "https://files.pythonhosted.org/packages/89/66/aa5e5e404c31bba78a9ea0ac8dc60b4b0ee155f47a1ad04678bd95b04404/stefuna-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "d693a502d046fae65474e3113a856702", "sha256": "607aa8fe889e32e481b70952f6d04241dfe51b46ae99166f8e2af7da0824228f" }, "downloads": -1, "filename": "stefuna-0.8.2.tar.gz", "has_sig": false, "md5_digest": "d693a502d046fae65474e3113a856702", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8956, "upload_time": "2017-08-16T17:42:11", "url": "https://files.pythonhosted.org/packages/5d/1d/db0b7e70fd4a29c35dd190f67437a77655ad0b73bb608502a56beddab41a/stefuna-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "7d73636b99bb9965fe1172a58183a89a", "sha256": "75f143a78108a92571e6c731dc440a3516b8f71a7e442f54ed466e56b465cef1" }, "downloads": -1, "filename": "stefuna-0.8.3.tar.gz", "has_sig": false, "md5_digest": "7d73636b99bb9965fe1172a58183a89a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9167, "upload_time": "2017-09-18T21:29:50", "url": "https://files.pythonhosted.org/packages/a4/64/563fec99b85a98cab9aace26b347283af11e9b26f0698268e4373ad3affb/stefuna-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "30c53b56f6066d16ca447dd499e2547b", "sha256": "dbedad4b393ed557bbed417f668679cac7be9db3144fa710a51ff7a10736edd0" }, "downloads": -1, "filename": "stefuna-0.8.4.tar.gz", "has_sig": false, "md5_digest": "30c53b56f6066d16ca447dd499e2547b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9351, "upload_time": "2017-09-18T22:07:16", "url": "https://files.pythonhosted.org/packages/b0/dc/c60ac44593f3b743d4fb4074cdd960ee0af9be78c39db7016fd42444844e/stefuna-0.8.4.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "7dbc08e5dae65865e4ea2619d0c65987", "sha256": "c25bc7c4ad2f6e1381cb924b70b2a593c44deef58bd8fa98572bde055e7a9072" }, "downloads": -1, "filename": "stefuna-0.9.0.tar.gz", "has_sig": false, "md5_digest": "7dbc08e5dae65865e4ea2619d0c65987", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10638, "upload_time": "2017-09-26T21:09:07", "url": "https://files.pythonhosted.org/packages/96/ec/7c3a3bde2eb130b251e295b4ac5c51b897e68a0432b546bbd7345e8cf1f9/stefuna-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "08659f7459e9b33f626205d9fcc1e61e", "sha256": "9540b9df8105082fbeb34a9dfb20cf99568019705d2aff870c1cb0d6d3ca2c81" }, "downloads": -1, "filename": "stefuna-0.9.1.tar.gz", "has_sig": false, "md5_digest": "08659f7459e9b33f626205d9fcc1e61e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10942, "upload_time": "2017-10-20T23:52:10", "url": "https://files.pythonhosted.org/packages/f4/ba/56c48faa02662883d8119c119dfb1972ca5ddd6582a2dff971aed871f246/stefuna-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "7459b7bf83bb7bc130992989bd6cf563", "sha256": "e6f5d4a1dd76371fbe501b26cbed37a3016e3e5cc52b1b258359944cb39573d5" }, "downloads": -1, "filename": "stefuna-0.9.2.tar.gz", "has_sig": false, "md5_digest": "7459b7bf83bb7bc130992989bd6cf563", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11251, "upload_time": "2017-10-26T00:05:28", "url": "https://files.pythonhosted.org/packages/68/1e/6a60164c6eab06faec85d5ea01d8684d6e08549d75f1b808a91ebd2ec37a/stefuna-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "98b0e0749d7d0b023baf1fa5e4d01b0b", "sha256": "0c1e2da47f90de12196e8404a536038a00a745f304b52345a0696663bd2b27b0" }, "downloads": -1, "filename": "stefuna-0.9.3.tar.gz", "has_sig": false, "md5_digest": "98b0e0749d7d0b023baf1fa5e4d01b0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11785, "upload_time": "2017-10-27T20:50:23", "url": "https://files.pythonhosted.org/packages/2d/09/015fb339ad2753fee186d6d997ba3004b3f412b0266e35caa392b383c1ad/stefuna-0.9.3.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "1127547282099766f0130f24b61bfd59", "sha256": "674199f5417f17bef3625d660a9f21b445727e77404b91c7708f0fc8e610dac7" }, "downloads": -1, "filename": "stefuna-0.9.5.tar.gz", "has_sig": false, "md5_digest": "1127547282099766f0130f24b61bfd59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11995, "upload_time": "2017-10-30T04:27:31", "url": "https://files.pythonhosted.org/packages/ab/77/229d96814bfd2d663ca8fe44939f8c64d0cb9baaa20a9f5b5f34a84b067c/stefuna-0.9.5.tar.gz" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "42f6fd088cd15af911c459d6dc0ba00f", "sha256": "83f79eaa23aef9dcec6fd609a2a5662d7c30779d46524cb188430dc863ff22d4" }, "downloads": -1, "filename": "stefuna-0.9.6.tar.gz", "has_sig": false, "md5_digest": "42f6fd088cd15af911c459d6dc0ba00f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12348, "upload_time": "2017-11-06T21:37:31", "url": "https://files.pythonhosted.org/packages/11/fd/613fc9c7ad9f8fb0480ecc4ed05efc2c887f30981c30890cabce5d90abd6/stefuna-0.9.6.tar.gz" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "3ef8ac8f612fb83496d1ba986466f926", "sha256": "37c60e213de4333069e6a9a438fdf8dc059cca5759068c2ab4328880eaf5a51e" }, "downloads": -1, "filename": "stefuna-0.9.7.tar.gz", "has_sig": false, "md5_digest": "3ef8ac8f612fb83496d1ba986466f926", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12647, "upload_time": "2018-10-18T19:07:09", "url": "https://files.pythonhosted.org/packages/fc/d8/abf692b4a2a846ba0f88f8bbda31c2e27ea28cf0ded92f612d18930036f4/stefuna-0.9.7.tar.gz" } ], "0.9.8": [ { "comment_text": "", "digests": { "md5": "31376d59314495b61d4bd8ad8fe5e87a", "sha256": "682f565d5f31c95b094b438a57627f26e0cb6127d4b1a54d9cffcc06beb6fe22" }, "downloads": -1, "filename": "stefuna-0.9.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "31376d59314495b61d4bd8ad8fe5e87a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12444, "upload_time": "2019-03-07T01:27:45", "url": "https://files.pythonhosted.org/packages/9b/28/026c8c35f63304fd5cd722974e84dc9244df90b76e4b02361c1e12996788/stefuna-0.9.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd4ab5eb37fb6f5287dccb7d7acd95ed", "sha256": "e102872748616920732ecfc1b577b4f96055f9202507448696b96673449065ea" }, "downloads": -1, "filename": "stefuna-0.9.8.tar.gz", "has_sig": false, "md5_digest": "bd4ab5eb37fb6f5287dccb7d7acd95ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13966, "upload_time": "2019-03-07T01:27:47", "url": "https://files.pythonhosted.org/packages/a5/2e/0fdd20afa5b70e1db40d77bb3adb89dab86179b1cc134c4cb1ba349bedf0/stefuna-0.9.8.tar.gz" } ], "0.9.9": [ { "comment_text": "", "digests": { "md5": "4a51d53bb421f3c72f32516a1ee2e79b", "sha256": "0c4e2d688a0f3f9b77e0e610834151e3d69124e517c92191a3e76aa570d4ce6b" }, "downloads": -1, "filename": "stefuna-0.9.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4a51d53bb421f3c72f32516a1ee2e79b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12560, "upload_time": "2019-03-20T03:50:55", "url": "https://files.pythonhosted.org/packages/a8/e4/54c2c66f2de55b23710160544eb878b1f7a7f91611611df3f1ecbe6eb0bb/stefuna-0.9.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8896c03f403192c4cbf7bab72a3ad097", "sha256": "cc14e39260896a17d87302281c2e09197ead8273257c5d4ef01ed85fc55ca2b1" }, "downloads": -1, "filename": "stefuna-0.9.9.tar.gz", "has_sig": false, "md5_digest": "8896c03f403192c4cbf7bab72a3ad097", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14160, "upload_time": "2019-03-20T03:50:57", "url": "https://files.pythonhosted.org/packages/6e/33/b0f97139bfcd02c5b7617e614686a637139f10d6990dc8e5f507c5ff5545/stefuna-0.9.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "d186e642086921b89d8de75dfa938e5d", "sha256": "f12bd3449e43e355233f72cf7a96dc781d01640b8de95c6acb85cd3e2c85d85f" }, "downloads": -1, "filename": "stefuna-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d186e642086921b89d8de75dfa938e5d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12776, "upload_time": "2019-03-20T07:05:43", "url": "https://files.pythonhosted.org/packages/44/46/1746c97aaa458a8ad451df3151c1ef386c15cae6094a8cae93926f1548a3/stefuna-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "653a5d3994d2ea20a7d5110cf46842c8", "sha256": "475a230926a4f67ce9c12b4c62500d7623d81d2595234ec3a88cde552c22ff79" }, "downloads": -1, "filename": "stefuna-1.0.0.tar.gz", "has_sig": false, "md5_digest": "653a5d3994d2ea20a7d5110cf46842c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14717, "upload_time": "2019-03-20T07:05:44", "url": "https://files.pythonhosted.org/packages/c9/96/5fb03ae86f2ac4dfc91cdfe28545883b25c5123c2ebebe02469c72f0d3d7/stefuna-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "7e5d663b30533b95af94182367aabb19", "sha256": "185ac715c71217c8249ef5c029341972c6b70c96219fb2a9646f1e4c27b4da0d" }, "downloads": -1, "filename": "stefuna-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7e5d663b30533b95af94182367aabb19", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4.0", "size": 12880, "upload_time": "2019-06-02T17:19:19", "url": "https://files.pythonhosted.org/packages/0d/2f/e65db54f6be76f36bf174929119042df9832d8f1dbfa3ca4299a159aa11a/stefuna-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "734563af54a11d5708a7737d342b69fc", "sha256": "83bf583d3127121ef2164dcb75c2a29c55882b872b23d4fa012060f003208ad5" }, "downloads": -1, "filename": "stefuna-1.0.1.tar.gz", "has_sig": false, "md5_digest": "734563af54a11d5708a7737d342b69fc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4.0", "size": 14952, "upload_time": "2019-06-02T17:19:21", "url": "https://files.pythonhosted.org/packages/78/0e/0df672fe6194cbbd962ed37c857b0a12068d72e25c82104fd4600eff1717/stefuna-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7e5d663b30533b95af94182367aabb19", "sha256": "185ac715c71217c8249ef5c029341972c6b70c96219fb2a9646f1e4c27b4da0d" }, "downloads": -1, "filename": "stefuna-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7e5d663b30533b95af94182367aabb19", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4.0", "size": 12880, "upload_time": "2019-06-02T17:19:19", "url": "https://files.pythonhosted.org/packages/0d/2f/e65db54f6be76f36bf174929119042df9832d8f1dbfa3ca4299a159aa11a/stefuna-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "734563af54a11d5708a7737d342b69fc", "sha256": "83bf583d3127121ef2164dcb75c2a29c55882b872b23d4fa012060f003208ad5" }, "downloads": -1, "filename": "stefuna-1.0.1.tar.gz", "has_sig": false, "md5_digest": "734563af54a11d5708a7737d342b69fc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4.0", "size": 14952, "upload_time": "2019-06-02T17:19:21", "url": "https://files.pythonhosted.org/packages/78/0e/0df672fe6194cbbd962ed37c857b0a12068d72e25c82104fd4600eff1717/stefuna-1.0.1.tar.gz" } ] }