{ "info": { "author": "The OpenTracing Authors", "author_email": "opentracing@googlegroups.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "\nOpenTracing API for Python\n==========================\n\n|GitterChat| |BuildStatus| |PyPI| |ReadTheDocs|\n\nThis library is a Python platform API for OpenTracing.\n\nRequired Reading\n----------------\n\nIn order to understand the Python platform API, one must first be familiar with\nthe `OpenTracing project `_ and\n`terminology `_ more\nspecifically.\n\nStatus\n------\n\nIn the current version, ``opentracing-python`` provides only the API and a\nbasic no-op implementation that can be used by instrumentation libraries to\ncollect and propagate distributed tracing context.\n\nFuture versions will include a reference implementation utilizing an\nabstract Recorder interface, as well as a\n`Zipkin `_-compatible Tracer.\n\nUsage\n-----\n\nThe work of instrumentation libraries generally consists of three steps:\n\n1. When a service receives a new request (over HTTP or some other protocol),\n it uses OpenTracing's inject/extract API to continue an active trace, creating a\n Span object in the process. If the request does not contain an active trace,\n the service starts a new trace and a new *root* Span.\n2. The service needs to store the current Span in some request-local storage,\n (called ``Span`` *activation*) where it can be retrieved from when a child Span must\n be created, e.g. in case of the service making an RPC to another service.\n3. When making outbound calls to another service, the current Span must be\n retrieved from request-local storage, a child span must be created (e.g., by\n using the ``start_child_span()`` helper), and that child span must be embedded\n into the outbound request (e.g., using HTTP headers) via OpenTracing's\n inject/extract API.\n\nBelow are the code examples for the previously mentioned steps. Implementation\nof request-local storage needed for step 2 is specific to the service and/or frameworks /\ninstrumentation libraries it is using, exposed as a ``ScopeManager`` child contained\nas ``Tracer.scope_manager``. See details below.\n\nInbound request\n^^^^^^^^^^^^^^^\n\nSomewhere in your server's request handler code:\n\n.. code-block:: python\n\n def handle_request(request):\n span = before_request(request, opentracing.global_tracer())\n # store span in some request-local storage using Tracer.scope_manager,\n # using the returned `Scope` as Context Manager to ensure\n # `Span` will be cleared and (in this case) `Span.finish()` be called.\n with tracer.scope_manager.activate(span, True) as scope:\n # actual business logic\n handle_request_for_real(request)\n\n\n def before_request(request, tracer):\n span_context = tracer.extract(\n format=Format.HTTP_HEADERS,\n carrier=request.headers,\n )\n span = tracer.start_span(\n operation_name=request.operation,\n child_of(span_context))\n span.set_tag('http.url', request.full_url)\n\n remote_ip = request.remote_ip\n if remote_ip:\n span.set_tag(tags.PEER_HOST_IPV4, remote_ip)\n\n caller_name = request.caller_name\n if caller_name:\n span.set_tag(tags.PEER_SERVICE, caller_name)\n\n remote_port = request.remote_port\n if remote_port:\n span.set_tag(tags.PEER_PORT, remote_port)\n\n return span\n\nOutbound request\n----------------\n\nSomewhere in your service that's about to make an outgoing call:\n\n.. code-block:: python\n\n from opentracing import tags\n from opentracing.propagation import Format\n from opentracing_instrumentation import request_context\n\n # create and serialize a child span and use it as context manager\n with before_http_request(\n request=out_request,\n current_span_extractor=request_context.get_current_span):\n\n # actual call\n return urllib2.urlopen(request)\n\n\n def before_http_request(request, current_span_extractor):\n op = request.operation\n parent_span = current_span_extractor()\n outbound_span = opentracing.global_tracer().start_span(\n operation_name=op,\n child_of=parent_span\n )\n\n outbound_span.set_tag('http.url', request.full_url)\n service_name = request.service_name\n host, port = request.host_port\n if service_name:\n outbound_span.set_tag(tags.PEER_SERVICE, service_name)\n if host:\n outbound_span.set_tag(tags.PEER_HOST_IPV4, host)\n if port:\n outbound_span.set_tag(tags.PEER_PORT, port)\n\n http_header_carrier = {}\n opentracing.global_tracer().inject(\n span_context=outbound_span,\n format=Format.HTTP_HEADERS,\n carrier=http_header_carrier)\n\n for key, value in http_header_carrier.iteritems():\n request.add_header(key, value)\n\n return outbound_span\n\nScope and within-process propagation\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nFor getting/setting the current active ``Span`` in the used request-local storage,\nOpenTracing requires that every ``Tracer`` contains a ``ScopeManager`` that grants\naccess to the active ``Span`` through a ``Scope``. Any ``Span`` may be transferred to\nanother task or thread, but not ``Scope``.\n\n.. code-block:: python\n\n # Access to the active span is straightforward.\n scope = tracer.scope_manager.active()\n if scope is not None:\n scope.span.set_tag('...', '...')\n\nThe common case starts a ``Scope`` that's automatically registered for intra-process\npropagation via ``ScopeManager``.\n\nNote that ``start_active_span('...')`` automatically finishes the span on ``Scope.close()``\n(``start_active_span('...', finish_on_close=False)`` does not finish it, in contrast).\n\n.. code-block:: python\n\n # Manual activation of the Span.\n span = tracer.start_span(operation_name='someWork')\n with tracer.scope_manager.activate(span, True) as scope:\n # Do things.\n\n # Automatic activation of the Span.\n # finish_on_close is a required parameter.\n with tracer.start_active_span('someWork', finish_on_close=True) as scope:\n # Do things.\n\n # Handling done through a try construct:\n span = tracer.start_span(operation_name='someWork')\n scope = tracer.scope_manager.activate(span, True)\n try:\n # Do things.\n except Exception as e:\n scope.set_tag('error', '...')\n finally:\n scope.finish()\n\n**If there is a Scope, it will act as the parent to any newly started Span** unless\nthe programmer passes ``ignore_active_span=True`` at ``start_span()``/``start_active_span()``\ntime or specified parent context explicitly:\n\n.. code-block:: python\n\n scope = tracer.start_active_span('someWork', ignore_active_span=True)\n\nEach service/framework ought to provide a specific ``ScopeManager`` implementation\nthat relies on their own request-local storage (thread-local storage, or coroutine-based storage\nfor asynchronous frameworks, for example).\n\nScope managers\n^^^^^^^^^^^^^^\n\nThis project includes a set of ``ScopeManager`` implementations under the ``opentracing.scope_managers`` submodule, which can be imported on demand:\n\n.. code-block:: python\n\n from opentracing.scope_managers import ThreadLocalScopeManager\n\nThere exist implementations for ``thread-local`` (the default instance of the submodule ``opentracing.scope_managers``), ``gevent``, ``Tornado`` and ``asyncio``:\n\n.. code-block:: python\n\n from opentracing.scope_managers.gevent import GeventScopeManager # requires gevent\n from opentracing.scope_managers.tornado import TornadoScopeManager # requires tornado<6\n from opentracing.scope_managers.asyncio import AsyncioScopeManager # requires Python 3.4 or newer.\n\nDevelopment\n-----------\n\nTests\n^^^^^\n\n.. code-block:: sh\n\n virtualenv env\n . ./env/bin/activate\n make bootstrap\n make test\n\nYou can use `tox `_ to run tests as well.\n\n.. code-block:: sh\n\n tox\n\nTestbed suite\n^^^^^^^^^^^^^\n\nA testbed suite designed to test API changes and experimental features is included under the *testbed* directory. For more information, see the `Testbed README `_.\n\nInstrumentation Tests\n---------------------\n\nThis project has a working design of interfaces for the OpenTracing API. There is a MockTracer to\nfacilitate unit-testing of OpenTracing Python instrumentation.\n\n.. code-block:: python\n\n from opentracing.mocktracer import MockTracer\n\n tracer = MockTracer()\n with tracer.start_span('someWork') as span:\n pass\n\n spans = tracer.finished_spans()\n someWorkSpan = spans[0]\n\n\nDocumentation\n^^^^^^^^^^^^^\n\n.. code-block:: sh\n\n virtualenv env\n . ./env/bin/activate\n make bootstrap\n make docs\n\nThe documentation is written to *docs/_build/html*.\n\nLICENSE\n^^^^^^^\n\n`Apache 2.0 License <./LICENSE>`__.\n\nReleases\n^^^^^^^^\n\nBefore new release, add a summary of changes since last version to CHANGELOG.rst\n\n.. code-block:: sh\n\n pip install zest.releaser[recommended]\n prerelease\n release\n git push origin master --follow-tags\n python setup.py sdist upload -r pypi upload_docs -r pypi\n postrelease\n git push\n\n.. |GitterChat| image:: http://img.shields.io/badge/gitter-join%20chat%20%E2%86%92-brightgreen.svg\n :target: https://gitter.im/opentracing/public\n.. |BuildStatus| image:: https://travis-ci.org/opentracing/opentracing-python.svg?branch-master\n :target: https://travis-ci.org/opentracing/opentracing-python\n.. |PyPI| image:: https://badge.fury.io/py/opentracing.svg\n :target: https://badge.fury.io/py/opentracing\n.. |ReadTheDocs| image:: http://readthedocs.org/projects/opentracing-python/badge/?version=latest\n :target: https://opentracing-python.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/opentracing/opentracing-python", "keywords": "opentracing", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "opentracing", "package_url": "https://pypi.org/project/opentracing/", "platform": "any", "project_url": "https://pypi.org/project/opentracing/", "project_urls": { "Homepage": "https://github.com/opentracing/opentracing-python" }, "release_url": "https://pypi.org/project/opentracing/2.2.0/", "requires_dist": null, "requires_python": "", "summary": "OpenTracing API for Python. See documentation at http://opentracing.io", "version": "2.2.0" }, "last_serial": 5253205, "releases": { "0.5.1.dev0": [], "0.5.2": [ { "comment_text": "", "digests": { "md5": "4f263cfba4145bfd73ca8ac6e994ad0f", "sha256": "58097e85390a12140f58a302517f7002e48590ac94ed81027b6cef704a747441" }, "downloads": -1, "filename": "opentracing-0.5.2.tar.gz", "has_sig": false, "md5_digest": "4f263cfba4145bfd73ca8ac6e994ad0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24298, "upload_time": "2016-01-08T21:44:30", "url": "https://files.pythonhosted.org/packages/b4/55/d695ddc4d7995a39cb84371245e07b051d1ab10f3f4d670c7f47c54ced5b/opentracing-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "e54325db2a793d4c6ab52dd22d056a71", "sha256": "916af1efc317ae0ac97f9cc693ff3d28f5de78374085c8855b1037ba8a4aa302" }, "downloads": -1, "filename": "opentracing-0.6.0.tar.gz", "has_sig": false, "md5_digest": "e54325db2a793d4c6ab52dd22d056a71", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26240, "upload_time": "2016-01-09T22:12:25", "url": "https://files.pythonhosted.org/packages/31/15/cb074346b3bba7b26edd1d65718cafc40389ca438308910aeba7bd74415f/opentracing-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "1c6338b9588b30f767f067f0c4bdbe67", "sha256": "38b7ab10aaa8477667c3671006952213c7357d996a79eb23487cbc9f349e62b7" }, "downloads": -1, "filename": "opentracing-0.6.1.tar.gz", "has_sig": false, "md5_digest": "1c6338b9588b30f767f067f0c4bdbe67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26272, "upload_time": "2016-01-09T22:45:52", "url": "https://files.pythonhosted.org/packages/74/7f/eecd491ed35e13947ca5ca7c433c9230170d4ac8d60467f2369d9488f2c9/opentracing-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "fe1427694db9389c0544ba1776e80691", "sha256": "68daa689eb3797cc3de4424f607edada43981920f9e5219e27d6687a6acf3cdf" }, "downloads": -1, "filename": "opentracing-0.6.2.tar.gz", "has_sig": false, "md5_digest": "fe1427694db9389c0544ba1776e80691", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26871, "upload_time": "2016-01-15T21:40:55", "url": "https://files.pythonhosted.org/packages/41/30/28ec75841aefdeba61516a68ae734b1ee5d7a5dd947a85167b4b6d8ef13a/opentracing-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "5d76e4fcb4f3c828c36d7a3391746ab5", "sha256": "5e95a872590754666365f6a9eca4cf8a07b58f010738f73379e5fa4a366bcb2a" }, "downloads": -1, "filename": "opentracing-0.6.3.tar.gz", "has_sig": false, "md5_digest": "5d76e4fcb4f3c828c36d7a3391746ab5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26870, "upload_time": "2016-01-16T20:11:49", "url": "https://files.pythonhosted.org/packages/48/b3/85dff81e166825c219f18c99b4f3633b6d9c156e6abeba38d5fc01dadede/opentracing-0.6.3.tar.gz" } ], "1.0rc1": [ { "comment_text": "", "digests": { "md5": "289187c818a773a2e02809629854765e", "sha256": "0dff2d22af7914f0808c6dfcbfdc3c1a1c3b0d5e0de6e1f9cfccdc1868ef6399" }, "downloads": -1, "filename": "opentracing-1.0rc1.tar.gz", "has_sig": false, "md5_digest": "289187c818a773a2e02809629854765e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15030, "upload_time": "2016-02-24T17:15:34", "url": "https://files.pythonhosted.org/packages/7b/e2/0665d5e1d1e3ff0920ea2369913c6be3e679f09e786ec92822212a9e9a71/opentracing-1.0rc1.tar.gz" } ], "1.0rc2": [ { "comment_text": "", "digests": { "md5": "b820e145430878bd2a53e489ed9a7b5b", "sha256": "cce8623a9e6e2d9f01fea491cfc2606ca314d48f04acd34a0abfdbe7fe402933" }, "downloads": -1, "filename": "opentracing-1.0rc2.tar.gz", "has_sig": false, "md5_digest": "b820e145430878bd2a53e489ed9a7b5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14616, "upload_time": "2016-03-11T18:44:13", "url": "https://files.pythonhosted.org/packages/c6/54/9f13e815adb8464d73ac614841e072b97c434de69f643cb3876c344b3b1c/opentracing-1.0rc2.tar.gz" } ], "1.0rc3": [ { "comment_text": "", "digests": { "md5": "d5ad94a9eff6ad15456954a2cf75cdd3", "sha256": "79ffb1bfb46aeddc574c8fd83f7a86e219e66c519c3bf0b9ea69697d6a2f5839" }, "downloads": -1, "filename": "opentracing-1.0rc3.tar.gz", "has_sig": false, "md5_digest": "d5ad94a9eff6ad15456954a2cf75cdd3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14359, "upload_time": "2016-03-22T19:12:19", "url": "https://files.pythonhosted.org/packages/94/1e/78bd87d7ae12066775f271f05914a8eb0fc5b963bfcb7f5256d637948688/opentracing-1.0rc3.tar.gz" } ], "1.0rc4": [ { "comment_text": "", "digests": { "md5": "3718978f7cee280fb8ba408eeb76b1f9", "sha256": "9d9494c7695aea15edb451fd34ddea3fdc5fa62213e39f72cc9052bf19666b44" }, "downloads": -1, "filename": "opentracing-1.0rc4.tar.gz", "has_sig": false, "md5_digest": "3718978f7cee280fb8ba408eeb76b1f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13638, "upload_time": "2016-05-21T21:07:21", "url": "https://files.pythonhosted.org/packages/07/9f/7e5a036e40ff3768c5febaa8284b992de0a04c5ffdbde6f48b3df6f18849/opentracing-1.0rc4.tar.gz" } ], "1.0rc5": [ { "comment_text": "", "digests": { "md5": "24ae521096818c2b0ef61d241df995bb", "sha256": "ed0989e07b1bcfb1567c4202ef6aa26a8f97c09ff11741f51c4db41b588ccd55" }, "downloads": -1, "filename": "opentracing-1.0rc5.tar.gz", "has_sig": false, "md5_digest": "24ae521096818c2b0ef61d241df995bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15301, "upload_time": "2016-08-03T16:04:17", "url": "https://files.pythonhosted.org/packages/9a/55/209ff2db13140affda49baf94b8a9139ff91a5f7d76f36575a79a6d4cd22/opentracing-1.0rc5.tar.gz" } ], "1.0rc6": [ { "comment_text": "", "digests": { "md5": "1bfcec40c540edb092b4d4ef113f04d1", "sha256": "cfdb6078fc1d05dd049a4fc8b939e3ce081924c85ba446b0fe10d012f76e1d5d" }, "downloads": -1, "filename": "opentracing-1.0rc6.tar.gz", "has_sig": false, "md5_digest": "1bfcec40c540edb092b4d4ef113f04d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15613, "upload_time": "2016-08-06T03:08:24", "url": "https://files.pythonhosted.org/packages/3f/05/37445d650aad2887006c4c0d14415457ec404704ad8c9f2fc0055b42c1c3/opentracing-1.0rc6.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "e7fcfbcabcaabc45a2d41968506d0054", "sha256": "898a6958f7696815bd77597861eb0c554261a10cd7a867b15e3f846564ecc8b0" }, "downloads": -1, "filename": "opentracing-1.1.0.tar.gz", "has_sig": false, "md5_digest": "e7fcfbcabcaabc45a2d41968506d0054", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16489, "upload_time": "2016-08-06T19:23:13", "url": "https://files.pythonhosted.org/packages/40/12/abd02daa323540302016280650123e7d1cc10b448b40b7e40fffc23ce339/opentracing-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "739d473096f3057923aeaae7566d7baf", "sha256": "9e122864e5732fe3715699204a23876182db75b09bc906214629bc10c51eb570" }, "downloads": -1, "filename": "opentracing-1.2.0.tar.gz", "has_sig": false, "md5_digest": "739d473096f3057923aeaae7566d7baf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16816, "upload_time": "2016-09-22T05:00:10", "url": "https://files.pythonhosted.org/packages/1f/c4/852167f83b5abbb5b84f19c49e6ca1dcd53c023e319f3da76888ff903c71/opentracing-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "e6589a1410febf473146eb77c435b330", "sha256": "dc4fdabedc12bc44358b88b92854729eb3977948713524ca1dabc51b9dfb8f92" }, "downloads": -1, "filename": "opentracing-1.2.1.tar.gz", "has_sig": false, "md5_digest": "e6589a1410febf473146eb77c435b330", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16915, "upload_time": "2016-09-22T20:09:00", "url": "https://files.pythonhosted.org/packages/f2/cb/a38a4187ac877f56fb6806bbd7f2e930ce4d08b249b7a230b529f091dea9/opentracing-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "ddda0a876870799d9e67e2e207dd2366", "sha256": "b184d7c8956e4b43ae69a3c2e3e32976475ee815ff2d95bca213584252feecd7" }, "downloads": -1, "filename": "opentracing-1.2.2.tar.gz", "has_sig": false, "md5_digest": "ddda0a876870799d9e67e2e207dd2366", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17066, "upload_time": "2016-10-03T19:00:03", "url": "https://files.pythonhosted.org/packages/bd/a1/190c0e11b61ba07d89c08a508bd9b0a97b7d215908c18a47af911fcbf981/opentracing-1.2.2.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "11b2c95e6bc76e547841419c732441b0", "sha256": "9b3f7c7a20c34170b9253c97121256264daf6b5f090035c732c6e2548cc5c0a7" }, "downloads": -1, "filename": "opentracing-1.3.0.tar.gz", "has_sig": false, "md5_digest": "11b2c95e6bc76e547841419c732441b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20460, "upload_time": "2018-01-15T03:15:58", "url": "https://files.pythonhosted.org/packages/06/c2/90b35a1abdc639a5c6000d8202c70217d60e80f5b328870efb73fda71115/opentracing-1.3.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "c0f2ae1f12c2eded2f775265f0f278be", "sha256": "39a999847b1827112ca6ccdb1c66e315c6a5ecd53131eed1ae363223671a9d68" }, "downloads": -1, "filename": "opentracing-2.0.0.tar.gz", "has_sig": false, "md5_digest": "c0f2ae1f12c2eded2f775265f0f278be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53361, "upload_time": "2018-07-10T15:53:36", "url": "https://files.pythonhosted.org/packages/33/25/56d29df57d9cb700eab7ed3bae447ce9b7031e5a10c16a4c558eb0a06c7b/opentracing-2.0.0.tar.gz" } ], "2.0.0rc1": [ { "comment_text": "", "digests": { "md5": "cf33830f644b42a6c7b873cc3b550f89", "sha256": "54d038290d203c5efdfc495b83c009b7d39c27a92b3676d62431c6442ab2b35c" }, "downloads": -1, "filename": "opentracing-2.0.0rc1.tar.gz", "has_sig": false, "md5_digest": "cf33830f644b42a6c7b873cc3b550f89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33747, "upload_time": "2018-02-20T13:45:58", "url": "https://files.pythonhosted.org/packages/7f/dd/f404e541eb85f05860d498962e42f75354344feff7c21f7fcd6f9d5d273d/opentracing-2.0.0rc1.tar.gz" } ], "2.0.0rc2": [ { "comment_text": "", "digests": { "md5": "54557f111c43e3eec74d4cc998d15572", "sha256": "4dc62b6ebd726e59cd872f089a739dc46db200189ed37cd663b2dbc49074710c" }, "downloads": -1, "filename": "opentracing-2.0.0rc2.tar.gz", "has_sig": false, "md5_digest": "54557f111c43e3eec74d4cc998d15572", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43599, "upload_time": "2018-04-09T11:27:05", "url": "https://files.pythonhosted.org/packages/aa/a9/3833456154ed826c4693f16115e4a1021c3a48342e16032e20f4146b6b82/opentracing-2.0.0rc2.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "0b2edda2c7ea21d4328f6e9e7d767e2c", "sha256": "4256a2f891fb5037a70ba2b0b08bd3103ef99b366e0df97fab24d100531dd0ee" }, "downloads": -1, "filename": "opentracing-2.1.0.tar.gz", "has_sig": false, "md5_digest": "0b2edda2c7ea21d4328f6e9e7d767e2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47195, "upload_time": "2019-04-27T20:06:56", "url": "https://files.pythonhosted.org/packages/ea/a4/748298c41222f04f1510d4242b3fb294a91298f2b9f5ed80e315315461fb/opentracing-2.1.0.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "ca2a6222a1034d8b28c02bfc40475703", "sha256": "cfd231ba5c58f90bc277787e62861eb0c6e4af76e42957bec240bbdf71fb7e0e" }, "downloads": -1, "filename": "opentracing-2.2.0.tar.gz", "has_sig": false, "md5_digest": "ca2a6222a1034d8b28c02bfc40475703", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47571, "upload_time": "2019-05-10T17:14:52", "url": "https://files.pythonhosted.org/packages/94/9f/289424136addf621fb4c75624ef9a3a80e8575da3993a87950c57e93217e/opentracing-2.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ca2a6222a1034d8b28c02bfc40475703", "sha256": "cfd231ba5c58f90bc277787e62861eb0c6e4af76e42957bec240bbdf71fb7e0e" }, "downloads": -1, "filename": "opentracing-2.2.0.tar.gz", "has_sig": false, "md5_digest": "ca2a6222a1034d8b28c02bfc40475703", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47571, "upload_time": "2019-05-10T17:14:52", "url": "https://files.pythonhosted.org/packages/94/9f/289424136addf621fb4c75624ef9a3a80e8575da3993a87950c57e93217e/opentracing-2.2.0.tar.gz" } ] }