{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Topic :: System :: Monitoring", "Topic :: System :: Networking :: Monitoring", "Topic :: Utilities" ], "description": "========================\nOPENTRACING PYTHON UTILS\n========================\n\n**Early stage WIP + Experimental**\n\n\n.. image:: https://api.travis-ci.org/zalando-zmon/opentracing-utils.svg?branch=master\n :target: https://travis-ci.org/zalando-zmon/opentracing-utils\n :alt: Build status\n\n.. image:: https://codecov.io/gh/zalando-zmon/opentracing-utils/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/zalando-zmon/opentracing-utils\n :alt: Code coverage\n\n.. image:: https://img.shields.io/pypi/v/opentracing-utils.svg\n :target: https://pypi.python.org/pypi/opentracing-utils/\n :alt: Latest PyPI version\n\n.. image:: https://img.shields.io/pypi/l/opentracing-utils.svg\n :target: https://pypi.python.org/pypi/opentracing-utils/\n :alt: License\n\n.. image:: https://img.shields.io/badge/OpenTracing-enabled-blue.svg\n :target: http://opentracing.io\n :alt: OpenTracing enabled\n\nConvenient utilities for adding `OpenTracing `_ support in your python projects.\n\nFeatures\n========\n\n``opentracing-utils`` should provide and aims at the following:\n\n* No extrenal dependencies, only `opentracing-python `_.\n* No threadlocals. Either pass spans explicitly or fallback to callstack frames inspection!\n* Context agnostic, so no external **context implementation** dependency (no Tornado, Flask, Django etc ...).\n* Try to be less verbose - just add the ``@trace`` decorator.\n* Could be more verbose when needed, without complexity - just accept ``**kwargs`` and get the span passed to your traced functions via ``@trace(pass_span=True)``.\n* Support asyncio/async-await coroutines. (drop support for py2.7)\n* Support **gevent**.\n* Ability to add OpenTracing support to external libs/frameworks/clients:\n\n * Django (via ``OpenTracingHttpMiddleware``)\n * Flask (via ``trace_flask()``)\n * Requests (via ``trace_requests()``)\n * SQLAlchemy (via ``trace_sqlalchemy()``)\n\nInstall\n=======\n\nUsing pip (not released yet to PyPi)\n\n.. code-block:: bash\n\n pip install -U opentracing-utils\n\n\nor by cloning the repo\n\n.. code-block:: bash\n\n python setup.py install\n\n\nUsage\n=====\n\ninit_opentracing_tracer\n-----------------------\n\nThe first step needed in OpenTracing instrumentation is to initialize a tracer. Each vendor defines how the tracer can be initialized. Currently the following tracers are supported:\n\n* `BasicTracer `_\n* `Instana `_\n* `Jaeger `_\n* `LightStep `_\n\nBasicTracer\n^^^^^^^^^^^\n\nThis is the basic noop tracer. It could be initialized with a recorder (e.g. `Memory Recorder `_), which can be useful in debugging and playing around with OpenTracing concepts.\n\n.. code-block:: python\n\n import opentracing\n from opentracing_utils import OPENTRACING_BASIC, init_opentracing_tracer\n\n # Initialize upon application start\n init_opentracing_tracer(OPENTRACING_BASIC)\n\n # It is possible to pass custom recorder\n # init_opentracing_tracer(OPENTRACING_BASIC, recorder=custom_recorder)\n\n # Now use the opentracing.tracer\n root_span = opentracing.tracer.start_span(operation_name='root_span')\n\nInstana\n^^^^^^^\n\nConfig Vars\n~~~~~~~~~~~\n\nThe following config variables can be used in initialization if set as env variables\n\nOPENTRACING_INSTANA_SERVICE\n The service name.\n\n.. code-block:: python\n\n import opentracing\n from opentracing_utils import OPENTRACING_INSTANA, init_opentracing_tracer\n\n # Initialize upon application start\n init_opentracing_tracer(OPENTRACING_INSTANA)\n\n # It is possible to pass args\n # init_opentracing_tracer(OPENTRACING_INSTANA, service='python-server')\n\n # Now use the opentracing.tracer\n root_span = opentracing.tracer.start_span(operation_name='root_span')\n\nJaeger\n^^^^^^\n\nConfig Vars\n~~~~~~~~~~~\n\nThe following config variables can be used in initialization if set as env variables\n\nOPENTRACING_JAEGER_SERVICE_NAME\n The service name.\n\n.. note::\n\n Jaeger configuration should be passed by the instrumentated code. Default is ``{}``.\n\n\n.. code-block:: python\n\n import opentracing\n from opentracing_utils import OPENTRACING_JAEGER, init_opentracing_tracer\n\n # Initialize upon application start\n init_opentracing_tracer(OPENTRACING_JAEGER)\n\n # It is possible to pass args\n # init_opentracing_tracer(OPENTRACING_JAEGER, service_name='python-server', config=custom_config_with_sampling)\n\n # Now use the opentracing.tracer\n root_span = opentracing.tracer.start_span(operation_name='root_span')\n\n\nLightStep\n^^^^^^^^^\n\nConfig Vars\n~~~~~~~~~~~\n\nThe following config variables can be used in initialization if set as env variables\n\nOPENTRACING_LIGHTSTEP_COMPONENT_NAME\n The component name.\n\nOPENTRACING_LIGHTSTEP_ACCESS_TOKEN\n The LightStep collector access token.\n\nOPENTRACING_LIGHTSTEP_COLLECTOR_HOST\n The LightStep collector host. Default: ``collector.lightstep.com``.\n\nOPENTRACING_LIGHTSTEP_COLLECTOR_PORT\n The LightStep collector port (``int``). Default: ``443``.\n\nOPENTRACING_LIGHTSTEP_VERBOSITY\n The verbosity of the tracer (``int``). Default: ``0``.\n\n.. code-block:: python\n\n import opentracing\n from opentracing_utils import OPENTRACING_LIGHTSTEP, init_opentracing_tracer\n\n # Initialize upon application start\n init_opentracing_tracer(OPENTRACING_LIGHTSTEP)\n\n # It is possible to pass args\n # init_opentracing_tracer(OPENTRACING_LIGHTSTEP, component_name='python-server', access_token='123', collector_host='production-collector.com')\n\n # Now use the opentracing.tracer\n root_span = opentracing.tracer.start_span(operation_name='root_span')\n\n\n@trace decorator\n----------------\n\n.. code-block:: python\n\n from opentracing_utils import trace, extract_span_from_kwargs\n\n # decorate all your functions that require tracing\n\n # Normal traced function\n @trace()\n def trace_me():\n pass\n\n\n # Traced function with access to created span in ``kwargs``\n @trace(operation_name='user.operation', pass_span=True)\n def user_operation(user, op, **kwargs):\n current_span = extract_span_from_kwargs(**kwargs)\n\n current_span.set_tag('user.id', user.id)\n\n # Then do stuff ...\n\n # trace_me will have ``current_span`` as its parent.\n trace_me()\n\n # Traced function using ``follows_from`` instead of ``child_of`` reference.\n @trace(use_follows_from=True)\n def trace_me_later():\n pass\n\n\n # Start a fresh trace - any parent spans will be ignored\n @trace(operation_name='epoch', ignore_parent_span=True)\n def start_fresh():\n\n user = {'id': 1}\n\n # trace decorator will handle trace heirarchy\n user_operation(user, 'create')\n\n # trace_me will have ``epoch`` span as its parent.\n trace_me()\n\nSkip Spans\n^^^^^^^^^^\n\nIn certain cases you might need to skip certain spans while using the ``@trace`` decorator.\n\n.. code-block:: python\n\n def skip_this_span(arg1, arg2, **kwargs):\n if arg1 == 'special':\n # span should be skipped\n return True\n\n return False\n\n\n @trace(skip_span=skip_this_span)\n def traced(arg1, arg2):\n pass\n\n\n top_span = opentracing.tracer.start_span(operation_name='top_trace')\n with top_span:\n # this call will be traced and have a span!\n traced('open', 'tracing')\n\n # this call won't be traced and no span to be added!\n traced('special', 'tracing')\n\n\nBroken traces\n^^^^^^^^^^^^^\n\nIf you plan to break nested traces, then it is recommended to pass the span to traced functions\n\n.. code-block:: python\n\n top_span = opentracing.tracer.start_span(operation_name='top_trace')\n with top_span:\n\n # This one gets ``top_span`` as parent span\n call_traced()\n\n # Here, we break the trace, since we create a new span with no parents\n broken_span = opentracing.tracer.start_span(operation_name='broken_trace')\n with broken_span:\n # This one gets ``broken_span`` as parent span (not consistent in 2.7 and 3.5)\n call_traced()\n\n # pass span as safer/guaranteed trace here\n call_traced(span=broken_span)\n\n # ISSUE: Due to stack call inspection, next call will get ``broken_span`` instead of ``top_span``, which is wrong!!\n call_traced()\n\n # To get the ``top_span`` as parent span, then pass it to the traced call\n call_traced(span=top_span)\n\n\nMultiple traces\n^^^^^^^^^^^^^^^\n\nIf you plan to use multiple traces then it is better to always pass the span as it is safer/guaranteed.\n\n.. code-block:: python\n\n first_span = opentracing.tracer.start_span(operation_name='first_trace')\n with first_span:\n\n # This one gets ``first_span`` as parent span\n call_traced()\n\n second_span = opentracing.tracer.start_span(operation_name='second_trace')\n with second_span:\n\n # ISSUE: This one **could** get ``first_span`` as parent span (not consistent among Python versions)\n call_traced()\n\n # It is better to pass ``second_span`` explicitly\n call_traced(span=second_span)\n\n\nGenerators (yield)\n^^^^^^^^^^^^^^^^^^\n\nUsing generators could get tricky and leads to invalid parent span inspection. It is recommended to pass the span explicitly.\n\n.. code-block:: python\n\n @trace(pass_span=True)\n def gen(**kwargs):\n s = extract_span_from_kwargs(**kwargs) # noqa\n\n # Extract and pass span to ``f2()`` otherwise it could get ``f1()`` as parent span instead of ``gen()``\n f2(span=s)\n\n for i in range(10):\n yield i\n\n @trace()\n def f2():\n pass\n\n @trace()\n def f1():\n list(gen())\n\n first_span = opentracing.tracer.start_span(operation_name='first_trace')\n with first_span:\n f1()\n\n\nExternal libraries and clients\n------------------------------\n\nDjango\n^^^^^^\n\nFor tracing `Django `_ applications. You can use the following:\n\n- ``OpenTracingHttpMiddleware``: for tracing incoming HTTP requests\n\n.. code-block:: python\n\n # In settings.py or equivalent Django config\n from opentracing_utils import init_opentracing_tracer\n init_opentracing_tracer(YOUR_TRACER) # make sure opentracing.tracer is initialized properly.\n\n MIDDLEWARE = (\n 'opentracing_utils.OpenTracingHttpMiddleware', # goes first in the list\n # ... more middlewares here\n )\n\n # Further options\n\n # Add default tags to all incoming HTTP requests spans\n OPENTRACING_UTILS_DEFAULT_TAGS = {'my-default-tag': 'tag-value'}\n\n # Add error tag on 4XX responses (default is ``True``)\n OPENTRACING_UTILS_ERROR_4XX = False\n\n # Override span operation_name (default is ``view_func.__name__``)\n OPENTRACING_UTILS_OPERATION_NAME_CALLABLE = 'my_app.utils.span_operation_name'\n\n # Exclude certain requests from OpenTracing\n OPENTRACING_UTILS_SKIP_SPAN_CALLABLE = 'my_app.utils.skip_span'\n\n\nHere are the callables examples for overriding span operation names and skipping spans:\n\n.. code-block:: python\n\n # my_app/utils.py\n def span_operation_name(request, view_func, view_args, view_kwargs):\n return 'edge_{}'.format(view_func.__name__)\n\n def skip_span(request, view_func, view_args, view_kwargs):\n if view_func.__name__.startswith('no_trace_'):\n return True\n return False\n\nIn order to follow traces in your views, you can use ``extract_span_from_django_request`` utility function.\n\n.. code-block:: python\n\n # my_app/views.py\n\n from opentracing_utils import trace, extract_span_from_django_request\n\n @trace(span_extractor=extract_span_from_django_request, operation_name='custom_view')\n def my_traced_view(request):\n ...\n\n\nFlask\n^^^^^\n\nFor tracing `Flask `_ applications. This utility function adds a middleware that handles all incoming requests to the Flask application.\n\n.. code-block:: python\n\n from opentracing_utils import trace_flask, extract_span_from_flask_request\n from flask import Flask\n\n app = Flask(__name__)\n\n trace_flask(app)\n\n # You can add default_tags or optionally treat 4xx responses as not an error (i.e no error tag in span)\n # trace_flask(app, default_tags={'always-there': True}, error_on_4xx=False)\n\n # Extract current span from request context\n def internal_function():\n current_span = extract_span_from_flask_request()\n\n current_span.set_tag('internal', True)\n\n # You can skip requests spans.\n def skip_health_checks(request):\n return request.path == '/health'\n\n # trace_flask(skip_span=skip_health_checks)\n\n\n\nRequests\n^^^^^^^^\n\nFor tracing `requests `_ client library for all outgoing requests.\n\n.. code-block:: python\n\n # trace_requests should be called as early as possible, before importing requests\n from opentracing_utils import trace_requests\n trace_requests() # noqa\n\n # In case you want to include default span tags to be sent with every outgoing request.\n # trace_requests(default_tags={'account_id': '123'}, set_error_tag=False)\n\n # In case you want to keep the URL query args (masked by default in order to avoid leaking auth tokens etc...)\n # trace_requests(mask_url_query=False)\n\n # You can also mask URL path parameters (e.g. http://hostname/1 will be http://hostname/??/)\n # trace_requests(mask_url_path=True)\n\n # The library patches the requests library send functionality. This causes\n # all requests to propagate the span id's in the headers. Sometimes this is\n # undesireable so it's also possible to avoid tracing specific URL's or\n # endpoints. trace_requests accepts a list of regex patterns and matches the\n # request.url against these patterns, ignoring traces if any pattern matches.\n # trace_requests(ignore_patterns=[r\".*hostname/endpoint\"]\n\n import requests\n\n def main():\n\n span = opentracing.tracer.start_span(operation_name='main')\n with span:\n # Following call will be traced as a ``child span`` and propagated via HTTP headers.\n requests.get('https://example.org')\n\nSQLAlchemy\n^^^^^^^^^^\n\nFor tracing `SQLAlchemy `_ client library for all SQL queries.\n\n.. code-block:: python\n\n # trace_sqlalchemy can be used to trace all SQL queries.\n # By default, span operation_name will be deduced from the query statement (e.g. select, update, delete).\n from opentracing_utils import trace_sqlalchemy\n trace_sqlalchemy()\n\n # You can customize the span operation_name via supplying a callable\n def get_sqlalchemy_span_op_name(conn, cursor, statement, parameters, context, executemany):\n # inspect statement and parameters etc...\n return 'custom_operation_name'\n # trace_sqlalchemy(operation_name=get_sqlalchemy_span_op_name)\n\n # By default, trace_sqlalchemy will not set error tags for SQL errors/exceptions. You can change that via ``set_error_tag`` param.\n # trace_sqlalchemy(set_error_tag=True)\n\n # you can skip spans for certain SQL queries.\n def skip_inserts(conn, cursor, statement, parameters, context, executemany):\n return statement.lower().startswith('insert')\n\n # trace_sqlalchemy(skip_span=skip_inserts)\n\n\nLicense\n=======\n\nThe MIT License (MIT)\n\nCopyright (c) 2017 Zalando SE, https://tech.zalando.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\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/zalando-zmon/opentracing-utils", "keywords": "", "license": "The MIT License (MIT)", "maintainer": "", "maintainer_email": "", "name": "opentracing-utils", "package_url": "https://pypi.org/project/opentracing-utils/", "platform": "", "project_url": "https://pypi.org/project/opentracing-utils/", "project_urls": { "Homepage": "https://github.com/zalando-zmon/opentracing-utils" }, "release_url": "https://pypi.org/project/opentracing-utils/0.18.1/", "requires_dist": [ "future", "opentracing" ], "requires_python": "", "summary": "OpenTracing utilities library", "version": "0.18.1" }, "last_serial": 4815717, "releases": { "0.12": [ { "comment_text": "", "digests": { "md5": "dad9343a3972e1f0da5732b3bc4f6403", "sha256": "d89e7ee3c253039343f745e4cca2e1201f8b60184b02c2e3b2911ae2bf68ec02" }, "downloads": -1, "filename": "opentracing_utils-0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "dad9343a3972e1f0da5732b3bc4f6403", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13477, "upload_time": "2018-06-12T09:09:50", "url": "https://files.pythonhosted.org/packages/51/68/cd9048a64dc43f34188a56b0bee8a3ba1c8caf324f1a7055681413852539/opentracing_utils-0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f096dc3af71c91034201e519e5607cae", "sha256": "e22d8c7cd363b3b5dd2587e14c8a0c2dcb276dfda25fa30a51966cd53fe662ca" }, "downloads": -1, "filename": "opentracing-utils-0.12.tar.gz", "has_sig": false, "md5_digest": "f096dc3af71c91034201e519e5607cae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15561, "upload_time": "2018-06-12T09:09:51", "url": "https://files.pythonhosted.org/packages/f4/96/05c74e317b76f047e6fafc77459a4ab9be40278db69ccf6a1e7b62c49c47/opentracing-utils-0.12.tar.gz" } ], "0.12.1": [ { "comment_text": "", "digests": { "md5": "af75963aee60eb3b488d6cb5e628c32a", "sha256": "6cb1b5675e1bb5fec74332ad066da5a74465da8a28143431fd19589c4a3a5ed2" }, "downloads": -1, "filename": "opentracing_utils-0.12.1-py3-none-any.whl", "has_sig": false, "md5_digest": "af75963aee60eb3b488d6cb5e628c32a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13239, "upload_time": "2018-06-12T09:28:18", "url": "https://files.pythonhosted.org/packages/8a/a7/3d9c13c69d0dde0569f1946bc7e86483750a50f3f29dd31b9ef71e5200a8/opentracing_utils-0.12.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "53faa23210e316e932e8831de86fe3fa", "sha256": "a86c5d028a1e6415684a9e20a54b676441d9065d01f6c3576215744301b842b5" }, "downloads": -1, "filename": "opentracing-utils-0.12.1.tar.gz", "has_sig": false, "md5_digest": "53faa23210e316e932e8831de86fe3fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15509, "upload_time": "2018-06-12T09:28:19", "url": "https://files.pythonhosted.org/packages/81/02/02028c2aac58af7bf4481c476da708bd0d4f9ffd51e5827bc7f7ec0fc65e/opentracing-utils-0.12.1.tar.gz" } ], "0.12.2": [ { "comment_text": "", "digests": { "md5": "1bdfab8a9fbcf8d110bab0b0933e78e3", "sha256": "e5cd1428ebd64486e364d21ea150bb2693d765b9c39592c1252e3b1398d5017e" }, "downloads": -1, "filename": "opentracing_utils-0.12.2-py3.5.egg", "has_sig": false, "md5_digest": "1bdfab8a9fbcf8d110bab0b0933e78e3", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 24106, "upload_time": "2018-06-12T09:47:31", "url": "https://files.pythonhosted.org/packages/e8/28/792cfb08cf94139b2531c8c5812d797232aca51d51633679e9bf8ab9435c/opentracing_utils-0.12.2-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "ba9797d7c52c79e48bcda40cbb305bba", "sha256": "be68be79a2f4c1f16c9355d88ff49a5912c54e33467ab1319856cb7c74304095" }, "downloads": -1, "filename": "opentracing_utils-0.12.2-py3.6.egg", "has_sig": false, "md5_digest": "ba9797d7c52c79e48bcda40cbb305bba", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 23772, "upload_time": "2018-06-12T09:47:32", "url": "https://files.pythonhosted.org/packages/2c/d9/7c71b293d783c4753e5e540d5220c0b4601954f99cfb727e290ccdff06af/opentracing_utils-0.12.2-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "9bcd9878118b2f8b30ffe07b3f396d80", "sha256": "e78542271b8b219da781529a937812c686e014fd7a4189093529fb24b31a2201" }, "downloads": -1, "filename": "opentracing_utils-0.12.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9bcd9878118b2f8b30ffe07b3f396d80", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18526, "upload_time": "2018-06-12T09:47:29", "url": "https://files.pythonhosted.org/packages/bd/06/58dc72a21f3e4a9466240f5452de24ac833ee6970c45af5efaae6ff0ea89/opentracing_utils-0.12.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca91b863b0070482020cab792f5821fa", "sha256": "5c0c35d7561e9ceb1df5c651f7bea061588bfb0090e2fba053d7724952e85595" }, "downloads": -1, "filename": "opentracing-utils-0.12.2.tar.gz", "has_sig": false, "md5_digest": "ca91b863b0070482020cab792f5821fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12565, "upload_time": "2018-06-12T09:47:33", "url": "https://files.pythonhosted.org/packages/20/57/d5b78a77bd313a5eca531b968d4c77e1522c77cadce335ffbc669fe3430f/opentracing-utils-0.12.2.tar.gz" } ], "0.13": [ { "comment_text": "", "digests": { "md5": "dfd6a60fa826719f0844b7321fb5b07f", "sha256": "e01057c233eb45db72bc9b2d19315b421e3586f6d831ee2cfb55e2ba5292511d" }, "downloads": -1, "filename": "opentracing_utils-0.13-py3.5.egg", "has_sig": false, "md5_digest": "dfd6a60fa826719f0844b7321fb5b07f", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 27552, "upload_time": "2018-06-12T12:25:43", "url": "https://files.pythonhosted.org/packages/62/7e/c3f4698116340e071547ce02814f168be9cd468ec0f4bedb1334cbca101c/opentracing_utils-0.13-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "c37fe8fa35f97691db04f8e5315a483b", "sha256": "100efd40b83e6a627c49862a1bfbbb2b5acdae91a066d8160e8636abea82a23f" }, "downloads": -1, "filename": "opentracing_utils-0.13-py3.6.egg", "has_sig": false, "md5_digest": "c37fe8fa35f97691db04f8e5315a483b", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 27185, "upload_time": "2018-06-12T12:25:45", "url": "https://files.pythonhosted.org/packages/9f/50/5bff83925f12d778af6bc4cc55cb10cf9312c8f83aaa41ad6f1839eb0151/opentracing_utils-0.13-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "1a12a084887300517aef023b2ff7e998", "sha256": "3fe35b1a2f6681ffe220c478cc8bea9ba254a2bf94bdfb99d71f81e2527467d4" }, "downloads": -1, "filename": "opentracing_utils-0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "1a12a084887300517aef023b2ff7e998", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20402, "upload_time": "2018-06-12T12:25:42", "url": "https://files.pythonhosted.org/packages/a1/2f/12f101484b715d4970a2241888300a51396e0700888eac8c281828919054/opentracing_utils-0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52540dd9959308cd9dde95a020767f3e", "sha256": "7738fe55043cc43a963d282865be4cdeefc1300f72c3f367b163a060b8e69b5a" }, "downloads": -1, "filename": "opentracing-utils-0.13.tar.gz", "has_sig": false, "md5_digest": "52540dd9959308cd9dde95a020767f3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13755, "upload_time": "2018-06-12T12:25:46", "url": "https://files.pythonhosted.org/packages/0e/40/d8d11d2d7010a272fac40e8afd9b595bc15205cf8920ce2b81f1cd65d9d7/opentracing-utils-0.13.tar.gz" } ], "0.14": [ { "comment_text": "", "digests": { "md5": "b7e8ab59f9502e3818059fb3818a2343", "sha256": "738063e7f1f75473d66e1937f9d2e0fd52be277965af0205a12249e62fb19afe" }, "downloads": -1, "filename": "opentracing_utils-0.14-py3.5.egg", "has_sig": false, "md5_digest": "b7e8ab59f9502e3818059fb3818a2343", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 27549, "upload_time": "2018-06-20T09:13:05", "url": "https://files.pythonhosted.org/packages/bc/15/701c96ae97ecf056a1f7ea6693bf473fd6fcb50d9b80b12a9a7066ef6131/opentracing_utils-0.14-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "df02b4e9d08bc075a1a4128f0f58a6ee", "sha256": "206f452dd27be7a7a1615eb1e48b343f65ba6aaa9ed36de87a27034aaa8d8480" }, "downloads": -1, "filename": "opentracing_utils-0.14-py3.6.egg", "has_sig": false, "md5_digest": "df02b4e9d08bc075a1a4128f0f58a6ee", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 27179, "upload_time": "2018-06-20T09:13:07", "url": "https://files.pythonhosted.org/packages/db/d1/d443b44040ec7882009438d9dd3c010d764aee615fd4143fc1c43af038a6/opentracing_utils-0.14-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "b77d3222534f26aadb70566219632377", "sha256": "9b74120ac850b513f218e65961971306cb099c47fa914999b5bd9d356c03284c" }, "downloads": -1, "filename": "opentracing_utils-0.14-py3-none-any.whl", "has_sig": false, "md5_digest": "b77d3222534f26aadb70566219632377", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20404, "upload_time": "2018-06-20T09:13:04", "url": "https://files.pythonhosted.org/packages/a2/5c/50ae65c5bec430f7da9995e61c48f81e741fc4c6950dc21fd6402640df38/opentracing_utils-0.14-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b0b2be5403ca838073d019eacc4056b1", "sha256": "b51c9017ff05ece9c46aeab41553eb25cd147835add805a8303b23f5c3653b94" }, "downloads": -1, "filename": "opentracing-utils-0.14.tar.gz", "has_sig": false, "md5_digest": "b0b2be5403ca838073d019eacc4056b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13756, "upload_time": "2018-06-20T09:13:08", "url": "https://files.pythonhosted.org/packages/15/3a/b2b1b52f2fba8337080b93d6d07e50c5729ef3d5ba7b5d46ef43f5e4fba7/opentracing-utils-0.14.tar.gz" } ], "0.15": [ { "comment_text": "", "digests": { "md5": "627c4344a83e15dec4c2b7e984a19890", "sha256": "56a5f006f371985c9bf702d1a719c9b118460185f91c01eaa2cab4f2e3c7467c" }, "downloads": -1, "filename": "opentracing_utils-0.15-py3.5.egg", "has_sig": false, "md5_digest": "627c4344a83e15dec4c2b7e984a19890", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 28150, "upload_time": "2018-06-21T15:00:25", "url": "https://files.pythonhosted.org/packages/43/55/371302222f2e14671f6a952bff4876b96b565ac5e3f30f5af27b6cfe1b33/opentracing_utils-0.15-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "8b92c1b8cc916d8fd62e56393206f3b2", "sha256": "3bcb21e5bce24a7f66f2c883bd35c2cc5c91f52da848cb133ce1943336314360" }, "downloads": -1, "filename": "opentracing_utils-0.15-py3.6.egg", "has_sig": false, "md5_digest": "8b92c1b8cc916d8fd62e56393206f3b2", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 27779, "upload_time": "2018-06-21T15:00:27", "url": "https://files.pythonhosted.org/packages/10/2b/bb90d8ae24bb3bdc4946a69fae77af1ea4fad666191c8f2506f9220292a3/opentracing_utils-0.15-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "61ffe6a401117ce5f94732f0fb01a0fd", "sha256": "33475dc2dfb96a993960bf5d1690a5c993647d5be0a62eb2ebeae5c01745599e" }, "downloads": -1, "filename": "opentracing_utils-0.15-py3-none-any.whl", "has_sig": false, "md5_digest": "61ffe6a401117ce5f94732f0fb01a0fd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20830, "upload_time": "2018-06-21T15:00:24", "url": "https://files.pythonhosted.org/packages/ea/4a/99db9c401c10d537a205101afdda80e54f39d5abb5b8ad4ad858cfc98bdf/opentracing_utils-0.15-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "15dc476d4b14b43c55114814449a2d16", "sha256": "d429f567d2e5de9b63d76284a5bb7c0fdd8698c2240727b3134f2531eebf042c" }, "downloads": -1, "filename": "opentracing-utils-0.15.tar.gz", "has_sig": false, "md5_digest": "15dc476d4b14b43c55114814449a2d16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14028, "upload_time": "2018-06-21T15:00:28", "url": "https://files.pythonhosted.org/packages/c8/04/ee01d092384ee113c43896939b6024815aea0b8370145794e27a38b6f4bb/opentracing-utils-0.15.tar.gz" } ], "0.16": [ { "comment_text": "", "digests": { "md5": "21135ae66a5f9cdbb40e7943621ccf34", "sha256": "e3ffdec2e413d4ec649fdea984089d905f2d2d6f7843c970c98d84cbe8e5fb16" }, "downloads": -1, "filename": "opentracing_utils-0.16-py3.5.egg", "has_sig": false, "md5_digest": "21135ae66a5f9cdbb40e7943621ccf34", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 27946, "upload_time": "2018-10-10T16:11:22", "url": "https://files.pythonhosted.org/packages/b8/47/0528f612dbcbacc78fde2c7ffa0ef120997b90af9ea7752b4af94bcd2c7e/opentracing_utils-0.16-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "15c8847d1d571be57171aa66c749117c", "sha256": "9fc4caa19a212f0d26597eb29f07d7f73d966192d01a9b689711e918d2586437" }, "downloads": -1, "filename": "opentracing_utils-0.16-py3.6.egg", "has_sig": false, "md5_digest": "15c8847d1d571be57171aa66c749117c", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 27577, "upload_time": "2018-10-10T16:11:23", "url": "https://files.pythonhosted.org/packages/5c/fa/b1ada61bb672b9f9ba7b52c6f40f0791f88db9f5fc3c0935bad86227b9c6/opentracing_utils-0.16-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "54eedf58ec3cd61f6022f5ee20621459", "sha256": "f07bc43cc2dfcce0207f7034ac972cd65af2e9a588bbe98cbc05413eb71e1112" }, "downloads": -1, "filename": "opentracing_utils-0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "54eedf58ec3cd61f6022f5ee20621459", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20757, "upload_time": "2018-10-10T16:11:20", "url": "https://files.pythonhosted.org/packages/51/e6/b459bc9dbb886cf1247c95cbe2dd579b280066cb74e12719e8b091078847/opentracing_utils-0.16-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d41b83c494470ebbe386b139a1655d6", "sha256": "930fbb8d6300e0a00c71ba0c4d1b0fd43ece17432a3faf88a04d770d32226d00" }, "downloads": -1, "filename": "opentracing-utils-0.16.tar.gz", "has_sig": false, "md5_digest": "2d41b83c494470ebbe386b139a1655d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13955, "upload_time": "2018-10-10T16:11:25", "url": "https://files.pythonhosted.org/packages/b7/db/f15b9c15a05244b392c5f2e6bdb47e0385c15cb38fc0781b2bd6ac2f3465/opentracing-utils-0.16.tar.gz" } ], "0.17": [ { "comment_text": "", "digests": { "md5": "ca652252b4bec8a9ab0a627ae3932e83", "sha256": "5aa9e44c29a80d5bbe581450513d66980e7a62bf02725f17e2b4950975c5d17a" }, "downloads": -1, "filename": "opentracing_utils-0.17-py3.5.egg", "has_sig": false, "md5_digest": "ca652252b4bec8a9ab0a627ae3932e83", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 27950, "upload_time": "2019-01-16T13:11:37", "url": "https://files.pythonhosted.org/packages/63/ae/887be033c90eba4295cfecf54abd9ed8a657475278e3ca4e0f5376762af9/opentracing_utils-0.17-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "dbe284d51ecd84de6a5093b868ae2a49", "sha256": "52ce46031b7de0b57b35ac797299050528b627474086b411a5337da0d3b48124" }, "downloads": -1, "filename": "opentracing_utils-0.17-py3.6.egg", "has_sig": false, "md5_digest": "dbe284d51ecd84de6a5093b868ae2a49", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 27575, "upload_time": "2019-01-16T13:11:38", "url": "https://files.pythonhosted.org/packages/81/94/fd48503951ea117759e1c4a89038e2439d43ab527afdfcee678bb6810a56/opentracing_utils-0.17-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "694d69b0a6f0b5858dd542868af94033", "sha256": "c6bf55ade976dc5d2946236d315aa72c4b4c71ed9cea7d58de19dce8ee30fe57" }, "downloads": -1, "filename": "opentracing_utils-0.17-py3-none-any.whl", "has_sig": false, "md5_digest": "694d69b0a6f0b5858dd542868af94033", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20766, "upload_time": "2019-01-16T13:11:35", "url": "https://files.pythonhosted.org/packages/01/2c/cf2b1c637f11fdaf51a98f370d99bdbdeaf5d89a6e5d0101caaa64ad180f/opentracing_utils-0.17-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9eb9f687dc92c0aa141f8ed5cea6cc0e", "sha256": "52d15128a4fdfe44b5f4365b3b23f1acbfa03368c706901cc7dba849d641c187" }, "downloads": -1, "filename": "opentracing-utils-0.17.tar.gz", "has_sig": false, "md5_digest": "9eb9f687dc92c0aa141f8ed5cea6cc0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13957, "upload_time": "2019-01-16T13:11:39", "url": "https://files.pythonhosted.org/packages/a3/3f/0dc037e4f09163c6a308d903f8c0734d0bec7da9753515ced6c986e91440/opentracing-utils-0.17.tar.gz" } ], "0.18": [ { "comment_text": "", "digests": { "md5": "d6c1700b2f46b9b46422802f66dc2997", "sha256": "72623f4912af8cc8eb9829edc0b76277c3ec6995274e9b8bba9e0dcddc2eac56" }, "downloads": -1, "filename": "opentracing_utils-0.18-py3.5.egg", "has_sig": false, "md5_digest": "d6c1700b2f46b9b46422802f66dc2997", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 41736, "upload_time": "2019-02-11T13:43:12", "url": "https://files.pythonhosted.org/packages/b5/2e/e17a0da5bdc9e84d2612f49cd156c0e2e6f353e8e0db75d6c7efd62ca01f/opentracing_utils-0.18-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "0368e2a237e063c55160aa75d2033e74", "sha256": "d1d4984bd8957c0e577c16aee6ca24aa030730390d7fa0f5f1ae965aa392b226" }, "downloads": -1, "filename": "opentracing_utils-0.18-py3.6.egg", "has_sig": false, "md5_digest": "0368e2a237e063c55160aa75d2033e74", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 41104, "upload_time": "2019-02-11T13:43:13", "url": "https://files.pythonhosted.org/packages/fa/94/60a3d1324732556941d4f6c180656e021b288a70a58dee4fb0ea45ef83ad/opentracing_utils-0.18-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "1fe14e853087efa09755c81735dc47f9", "sha256": "946ffe71ea775fc91999ede6f03d37df25bbb6ec0cb2a33247a2ae9d9c466595" }, "downloads": -1, "filename": "opentracing_utils-0.18-py3-none-any.whl", "has_sig": false, "md5_digest": "1fe14e853087efa09755c81735dc47f9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26910, "upload_time": "2019-02-11T13:43:10", "url": "https://files.pythonhosted.org/packages/85/0f/b1f431ff11209075e2df981c2fe584b2bb2d3d36c51cf87b7728d35f6d66/opentracing_utils-0.18-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c62418860a97ffb75ff2fc5ca7243552", "sha256": "7e45b377f808954498f637da140efc6009c89455cb93f997349212c5842c3077" }, "downloads": -1, "filename": "opentracing-utils-0.18.tar.gz", "has_sig": false, "md5_digest": "c62418860a97ffb75ff2fc5ca7243552", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17417, "upload_time": "2019-02-11T13:43:15", "url": "https://files.pythonhosted.org/packages/83/f5/96959024b90f473352429339e4141bd40252f554fe67bef14b3f21a79d29/opentracing-utils-0.18.tar.gz" } ], "0.18.1": [ { "comment_text": "", "digests": { "md5": "30eca5ae9400eb72176c581e451164e1", "sha256": "5d4891a0ffcf10dcfdee489275ec2d571a71920ba2e3c75ee350ce8058684313" }, "downloads": -1, "filename": "opentracing_utils-0.18.1-py3.5.egg", "has_sig": false, "md5_digest": "30eca5ae9400eb72176c581e451164e1", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 41832, "upload_time": "2019-02-13T13:33:44", "url": "https://files.pythonhosted.org/packages/49/72/52623e1e34e91c80418cde11d01bb41e74803ed1dc974fe786722974e185/opentracing_utils-0.18.1-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "4afcde38b07e6cbe7e64595e8305cd9d", "sha256": "a5c8440a49172476ee576043671c30d9159b700e74b9b0fd875d1d02c94df444" }, "downloads": -1, "filename": "opentracing_utils-0.18.1-py3.6.egg", "has_sig": false, "md5_digest": "4afcde38b07e6cbe7e64595e8305cd9d", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 41201, "upload_time": "2019-02-13T13:33:46", "url": "https://files.pythonhosted.org/packages/b4/b7/bb1a882226a56e14f1bdb350a85c827fcd6178e61ebf1d40df0a8a014bea/opentracing_utils-0.18.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "b4fd871066cc25ded1d292c21a1a5a38", "sha256": "58e87ac3b278ee4bcca4eba1c47ac2a7bb9e52220e46232d993613821136c775" }, "downloads": -1, "filename": "opentracing_utils-0.18.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b4fd871066cc25ded1d292c21a1a5a38", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27014, "upload_time": "2019-02-13T13:33:42", "url": "https://files.pythonhosted.org/packages/23/9b/fc3caafc74a1636e82f3b5782b947cb2b627d9786ccea6787898627c57d6/opentracing_utils-0.18.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19fa8396eaaf0f42fd79c7b410fff74a", "sha256": "a70b0c17e8aab0caf797ce5955283a65d346e5b42f287250e15b41ef728a5f90" }, "downloads": -1, "filename": "opentracing-utils-0.18.1.tar.gz", "has_sig": false, "md5_digest": "19fa8396eaaf0f42fd79c7b410fff74a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17487, "upload_time": "2019-02-13T13:33:47", "url": "https://files.pythonhosted.org/packages/e2/24/a2434d672dda9de650e77bf74aba11c7e37a06cca95b9deb27a3802c0013/opentracing-utils-0.18.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "30eca5ae9400eb72176c581e451164e1", "sha256": "5d4891a0ffcf10dcfdee489275ec2d571a71920ba2e3c75ee350ce8058684313" }, "downloads": -1, "filename": "opentracing_utils-0.18.1-py3.5.egg", "has_sig": false, "md5_digest": "30eca5ae9400eb72176c581e451164e1", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 41832, "upload_time": "2019-02-13T13:33:44", "url": "https://files.pythonhosted.org/packages/49/72/52623e1e34e91c80418cde11d01bb41e74803ed1dc974fe786722974e185/opentracing_utils-0.18.1-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "4afcde38b07e6cbe7e64595e8305cd9d", "sha256": "a5c8440a49172476ee576043671c30d9159b700e74b9b0fd875d1d02c94df444" }, "downloads": -1, "filename": "opentracing_utils-0.18.1-py3.6.egg", "has_sig": false, "md5_digest": "4afcde38b07e6cbe7e64595e8305cd9d", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 41201, "upload_time": "2019-02-13T13:33:46", "url": "https://files.pythonhosted.org/packages/b4/b7/bb1a882226a56e14f1bdb350a85c827fcd6178e61ebf1d40df0a8a014bea/opentracing_utils-0.18.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "b4fd871066cc25ded1d292c21a1a5a38", "sha256": "58e87ac3b278ee4bcca4eba1c47ac2a7bb9e52220e46232d993613821136c775" }, "downloads": -1, "filename": "opentracing_utils-0.18.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b4fd871066cc25ded1d292c21a1a5a38", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27014, "upload_time": "2019-02-13T13:33:42", "url": "https://files.pythonhosted.org/packages/23/9b/fc3caafc74a1636e82f3b5782b947cb2b627d9786ccea6787898627c57d6/opentracing_utils-0.18.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19fa8396eaaf0f42fd79c7b410fff74a", "sha256": "a70b0c17e8aab0caf797ce5955283a65d346e5b42f287250e15b41ef728a5f90" }, "downloads": -1, "filename": "opentracing-utils-0.18.1.tar.gz", "has_sig": false, "md5_digest": "19fa8396eaaf0f42fd79c7b410fff74a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17487, "upload_time": "2019-02-13T13:33:47", "url": "https://files.pythonhosted.org/packages/e2/24/a2434d672dda9de650e77bf74aba11c7e37a06cca95b9deb27a3802c0013/opentracing-utils-0.18.1.tar.gz" } ] }