{ "info": { "author": "Michiya Takahashi", "author_email": "michiya.takahashi@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: System :: Logging" ], "description": "azure-storage-logging\n=====================\n\n.. image:: http://img.shields.io/pypi/v/azure-storage-logging.svg?style=flat\n :target: https://pypi.python.org/pypi/azure-storage-logging\n\n.. image:: http://img.shields.io/pypi/l/azure-storage-logging.svg?style=flat\n :target: http://www.apache.org/licenses/LICENSE-2.0.html\n\n*azure-storage-logging* provides functionality to send output from\nthe standard Python logging APIs to Microsoft Azure Storage.\n\nDependencies\n------------\n\n* azure-storage 0.33 or newer\n\nInstallation\n------------\n\nInstall the package via pip: ::\n\n pip install azure-storage-logging\n\nUsage\n-----\n\nThe module **azure_storage_logging.handlers** in the package contains\nthe following logging handler classes. Each of them uses a different\ntype of Microsoft Azure Storage to send its output to. They all are subclasses\nof the standard Python logging handler classes, so you can make use of them\nin the standard ways of Python logging configuration.\n\nIn addition to\n`the standard formats for logging `_,\nthe special format ``%(hostname)s`` is also available in your message formatter\nfor the handlers. The format is introduced for ease of identifying the source\nof log messages which come from many computers and go to the same storage.\n\nTableStorageHandler\n~~~~~~~~~~~~~~~~~~~\nThe **TableStorageHandler** class is a subclass of **logging.Handler** class,\nand it sends log messages to Azure table storage and store them\nas entities in the specified table.\n\nThe handler puts a formatted log message from applications in the *message*\nproperty of a table entity along with some system-defined properties\n(*PartitionKey*, *RowKey*, and *Timestamp*) like this:\n\n+--------------+-----------+----------------+-------------+\n| PartitionKey | RowKey | Timestamp | message |\n+==============+===========+================+=============+\n| XXXXX | XXXXXXXXX | YYYY-MM-DD ... | log message |\n+--------------+-----------+----------------+-------------+\n| XXXXX | XXXXXXXXX | YYYY-MM-DD ... | log message |\n+--------------+-----------+----------------+-------------+\n| XXXXX | XXXXXXXXX | YYYY-MM-DD ... | log message |\n+--------------+-----------+----------------+-------------+\n\n* *class* azure_storage_logging.handlers.TableStorageHandler(*account_name=None, account_key=None, protocol='https', table='logs', batch_size=0, extra_properties=None, partition_key_formatter=None, row_key_formatter=None, is_emulated=False*)\n\n Returns a new instance of the **TableStorageHandler** class. \n The instance is initialized with the name and the key of your\n Azure Storage account and some optional parameters.\n\n The *table* specifies the name of the table that stores log messages.\n A new table will be created if it doesn't exist. The table name must\n conform to the naming convention for Azure Storage table, see\n `the naming convention for tables `_\n for more details.\n\n The *protocol* specifies the protocol to transfer data between\n Azure Storage and your application, ``http`` and ``https``\n are supported.\n\n You can specify the *batch_size* in an integer if you want to use\n batch transaction when creating new log entities. If the *batch_size*\n is greater than 1, all new log entities will be transferred to the\n table at a time when the number of new log messages reaches the\n *batch_size*. Otherwise, a new log entity will be transferred to\n the table every time a logging is performed. The *batch_size* must be\n up to 100 (maximum number of entities in a batch transaction for\n Azure Storage table).\n\n The *extra_properties* accepts a sequence of\n `the formats for logging `_.\n The handler-specific one ``%(hostname)s`` is also acceptable.\n The handler assigns an entity property for every format specified in\n *extra_properties*. Here is an example of using extra properties:\n\n ::\n \n import logging\n from azure_storage_logging.handlers import TableStorageHandler\n \n # configure the handler and add it to the logger\n logger = logging.getLogger('example')\n handler = TableStorageHandler(account_name='mystorageaccountname',\n account_key='mystorageaccountkey',\n extra_properties=('%(hostname)s',\n '%(levelname)s'))\n logger.addHandler(handler)\n \n # output log messages\n logger.info('info message')\n logger.warning('warning message')\n logger.error('error message')\n\n And it will create the log entities, that have the extra properties\n in addition to the regular property *message*, into the table like this:\n\n +--------------+-----------+----------------+----------+-----------+---------------+\n | PartitionKey | RowKey | Timestamp | hostname | levelname | message |\n +==============+===========+================+==========+===========+===============+\n | XXXXX | XXXXXXXXX | YYYY-MM-DD ... | myhost | INFO | info message |\n +--------------+-----------+----------------+----------+-----------+---------------+\n | XXXXX | XXXXXXXXX | YYYY-MM-DD ... | myhost | WARNING | warn message |\n +--------------+-----------+----------------+----------+-----------+---------------+\n | XXXXX | XXXXXXXXX | YYYY-MM-DD ... | myhost | ERROR | error message |\n +--------------+-----------+----------------+----------+-----------+---------------+\n\n You can specify an instance of your custom **logging.Formatters**\n for the *partition_key_formatter* or the *row_key_formatter*\n if you want to implement your own keys for the table.\n The default formatters will be used for partition keys and row keys\n if no custom formatter for them is given to the handler.\n The default values for partition keys are provided by the format\n ``%(asctime)s`` and the date format ``%Y%m%d%H%M`` (provides a unique\n value per minute). The default values for row keys are provided by the\n format ``%(asctime)s%(msecs)03d-%(hostname)s-%(process)d-%(rowno)02d``\n and the date format ``%Y%m%d%H%M%S``.\n\n Note that the format ``%(rowno)d`` is a handler-specific one only\n available for row keys. It would be formatted to a sequential and\n unique number in a batch that starts from 0. The format is introduced\n to avoid collision of row keys generated in a batch, and it would\n always be formatted to 0 if you don't use batch transaction for logging\n to the table.\n\n* setPartitionKeyFormatter(*fmt*)\n\n Sets the handler's formatter for partition keys to *fmt*.\n\n* setRowKeyFormatter(*fmt*)\n\n Sets the handler's formatter for row keys to *fmt*.\n\nQueueStorageHandler\n~~~~~~~~~~~~~~~~~~~\n\nThe **QueueStorageHandler** class is a subclass of **logging.Handler** class,\nand it pushes log messages to specified Azure storage queue.\n\nYou can pop log messages from the queue in other applications\nusing Azure Storage client libraries.\n\n* *class* azure_storage_logging.handlers.QueueStorageHandler(*account_name=None, account_key=None, protocol='https', queue='logs', message_ttl=None, visibility_timeout=None, base64_encoding=False, is_emulated=False*)\n\n Returns a new instance of the **QueueStorageHandler** class. \n The instance is initialized with the name and the key of your\n Azure Storage account and some optional parameters.\n\n The *queue* specifies the name of the queue that log messages are added.\n A new queue will be created if it doesn't exist. The queue name must\n conform to the naming convention for Azure Storage queue, see\n `the naming convention for queues `_\n for more details.\n\n The *protocol* specifies the protocol to transfer data between\n Azure Storage and your application, ``http`` and ``https``\n are supported.\n\n The *message_ttl* specifies the time-to-live interval for the message,\n in seconds. The maximum time-to-live allowed is 7 days. If this \n parameter is omitted, the default time-to-live is 7 days.\n\n The *visibility_timeout* specifies the visibility timeout value,\n in seconds, relative to server time. If not specified, the default\n value is 0 (makes the message visible immediately). The new value\n must be larger than or equal to 0, and cannot be larger than 7 days.\n The *visibility_timeout* cannot be set to a value later than the\n *message_ttl*, and should be set to a value smaller than the\n *message_ttl*. \n\n The *base64_encoding* specifies the necessity for encoding\n log text in Base64. If you set this to ``True``, Unicode log text\n in a message is encoded in utf-8 first and then encoded in Base64.\n Some of Azure Storage client libraries or tools assume that\n text messages in Azure Storage queue are encoded in Base64,\n so you can set this to ``True`` to receive log messages correctly\n with those libraries or tools.\n\nBlobStorageRotatingFileHandler\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe **BlobStorageRotatingFileHandler** class is a subclass of\n**logging.handlers.RotatingFileHandler** class. It performs\nlog file rotation and stores the outdated one in Azure blob storage\ncontainer when the current file reaches a certain size.\n\n* *class* azure_storage_logging.handlers.BlobStorageRotatingFileHandler(*filename, mode='a', maxBytes=0, encoding=None, delay=False, account_name=None, account_key=None, protocol='https', container='logs', zip_compression=False, max_connections=1, max_retries=5, retry_wait=1.0*, is_emulated=False)\n\n Returns a new instance of the **BlobStorageRotatingFileHandler**\n class. The instance is initialized with the name and the key of your\n Azure Storage account and some optional parameters.\n\n See `RotatingFileHandler `_\n for its basic usage. The handler keeps the latest log file into the\n local file system. Meanwhile, the handler sends the outdated log file\n to the blob container immediately and then removes it from the local\n file system.\n\n The *container* specifies the name of the blob container that stores\n outdated log files. A new container will be created if it doesn't exist.\n The container name must conform to the naming convention for\n Azure Storage blob container, see\n `the naming convention for blob containers `_\n for more details.\n\n The *protocol* specifies the protocol to transfer data between\n Azure Storage and your application, ``http`` and ``https``\n are supported.\n\n The *zip_compression* specifies the necessity for compressing\n every outdated log file in zip format before putting it in\n the container.\n\n The *max_connections* specifies a maximum number of parallel\n connections to use when the blob size exceeds 64MB.\n Set to 1 to upload the blob chunks sequentially.\n Set to 2 or more to upload the blob chunks in parallel,\n and this uses more system resources but will upload faster.\n\n The *max_retries* specifies a number of times to retry\n upload of blob chunk if an error occurs.\n\n The *retry_wait* specifies sleep time in secs between retries.\n\n The only two formatters ``%(hostname)s`` and ``%(process)d`` are\n acceptable as a part of the *filename* or the *container*. You can save\n log files in a blob container dedicated to each host or process by\n naming containers with these formatters, and also can store log files\n from multiple hosts or processes in a blob container by naming log files\n with them.\n\n Be careful to use the ``%(process)d`` formatter in the *filename*\n because inconsistent PIDs assigned to your application every time it\n gets started are included as a part of the name of log files to search\n for rotation. You should use the formatter in the *filename* only when\n the log file is generated by a long-running application process.\n\n Note that the hander class doesn't take the *backupCount* parameter,\n unlike RotatingFileHandler does. The number of outdated log files\n that the handler stores in the container is unlimited, and the files\n are saved with the extension that indicates the time in UTC when\n they are replaced with a new one. If you want to keep the amount of\n outdated log files in the container in a certain number, you will\n need to do that using Azure management portal or other tools.\n\nBlobStorageTimedRotatingFileHandler\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe **BlobStorageTimedRotatingFileHandler** class is a subclass of\n**logging.handlers.TimedRotatingFileHandler** class. It performs\nlog file rotation and stores the outdated one to Azure blob storage\ncontainer at certain timed intervals.\n\n* *class* azure_storage_logging.handlers.BlobStorageTimedRotatingFileHandler(*filename, when='h', interval=1, encoding=None, delay=False, utc=False, account_name=None, account_key=None, protocol='https', container='logs', zip_compression=False, max_connections=1, max_retries=5, retry_wait=1.0*, is_emulated=False)\n\n Returns a new instance of the **BlobStorageTimedRotatingFileHandler**\n class. The instance is initialized with the name and the key of your\n Azure Storage account and some optional parameters.\n\n See `TimedRotatingFileHandler `_\n for its basic usage. The handler keeps the latest log file into the\n local file system. Meanwhile, the handler sends the outdated log file\n to the blob container immediately and then removes it from the local\n file system.\n\n The *container* specifies the name of the blob container that stores\n outdated log files. A new container will be created if it doesn't exist.\n The container name must conform to the naming convention for\n Azure Storage blob container, see\n `the naming convention for blob containers `_\n for more details.\n\n The *protocol* specifies the protocol to transfer data between\n Azure Storage and your application, ``http`` and ``https``\n are supported.\n\n The *zip_compression* specifies the necessity for compressing\n every outdated log file in zip format before putting it in\n the container.\n\n The *max_connections* specifies a maximum number of parallel\n connections to use when the blob size exceeds 64MB.\n Set to 1 to upload the blob chunks sequentially.\n Set to 2 or more to upload the blob chunks in parallel,\n and this uses more system resources but will upload faster.\n\n The *max_retries* specifies a number of times to retry\n upload of blob chunk if an error occurs.\n\n The *retry_wait* specifies sleep time in secs between retries.\n\n The only two formatters ``%(hostname)s`` and ``%(process)d`` are\n acceptable as a part of the *filename* or the *container*. You can save\n log files in a blob container dedicated to each host or process by\n naming containers with these formatters, and also can store log files\n from multiple hosts or processes in a blob container by naming log files\n with them.\n\n Be careful to use the ``%(process)d`` formatter in the *filename*\n because inconsistent PIDs assigned to your application every time it\n gets started are included as a part of the name of log files to search\n for rotation. You should use the formatter in the *filename* only when\n the log file is generated by a long-running application process.\n\n Note that the hander class doesn't take the *backupCount* parameter,\n unlike TimedRotatingFileHandler does. The number of outdated log files\n that the handler stores in the container is unlimited.\n If you want to keep the amount of outdated log files in the container\n in a certain number, you will need to do that using Azure\n management portal or other tools.\n\nExample\n-------\n\nHere is an example of the configurations and the logging that uses\nthree different types of storage from the logger:\n\n::\n\n LOGGING = {\n 'version': 1,\n 'formatters': {\n 'simple': {\n 'format': '%(asctime)s %(message)s',\n },\n 'verbose': {\n 'format': '%(asctime)s %(levelname)s %(hostname)s %(process)d %(message)s',\n },\n # this is the same as the default, so you can skip configuring it\n 'partition_key': {\n 'format': '%(asctime)s',\n 'datefmt': '%Y%m%d%H%M',\n },\n # this is the same as the default, so you can skip configuring it\n 'row_key': {\n 'format': '%(asctime)s%(msecs)03d-%(hostname)s-%(process)d-%(rowno)02d',\n 'datefmt': '%Y%m%d%H%M%S',\n },\n },\n 'handlers': {\n 'file': {\n 'account_name': 'mystorageaccountname',\n 'account_key': 'mystorageaccountkey',\n 'protocol': 'https',\n 'level': 'DEBUG',\n 'class': 'azure_storage_logging.handlers.BlobStorageTimedRotatingFileHandler',\n 'formatter': 'verbose',\n 'filename': 'example.log',\n 'when': 'D',\n 'interval': 1,\n 'container': 'logs-%(hostname)s',\n 'zip_compression': False,\n },\n 'queue': {\n 'account_name': 'mystorageaccountname',\n 'account_key': 'mystorageaccountkey',\n 'protocol': 'https',\n 'queue': 'logs',\n 'level': 'CRITICAL',\n 'class': 'azure_storage_logging.handlers.QueueStorageHandler',\n 'formatter': 'verbose',\n },\n 'table': {\n 'account_name': 'mystorageaccountname',\n 'account_key': 'mystorageaccountkey',\n 'protocol': 'https',\n 'table': 'logs',\n 'level': 'INFO',\n 'class': 'azure_storage_logging.handlers.TableStorageHandler',\n 'formatter': 'simple',\n 'batch_size': 20,\n 'extra_properties': ['%(hostname)s', '%(levelname)s'],\n 'partition_key_formatter': 'cfg://formatters.partition_key',\n 'row_key_formatter': 'cfg://formatters.row_key',\n },\n },\n 'loggers': {\n 'example': {\n 'handlers': ['file', 'queue', 'table'],\n 'level': 'DEBUG',\n },\n }\n }\n \n import logging\n from logging.config import dictConfig\n\n dictConfig(LOGGING)\n logger = logging.getLogger('example')\n logger.debug('debug message')\n logger.info('info message')\n logger.warning('warning message')\n logger.error('error message')\n logger.critical('critical message') \n\nNotice\n------\n\n* Set *is_emulated* to ``True`` at initialization of the logging handlers\n if you want to use this package with Azure storage emulator.\n\nLicense\n-------\n\nApache License 2.0\n\nCredits\n-------\n\n- `Michiya Takahashi `__", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/michiya/azure-storage-logging", "keywords": "azure logging", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "azure-storage-logging", "package_url": "https://pypi.org/project/azure-storage-logging/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/azure-storage-logging/", "project_urls": { "Homepage": "https://github.com/michiya/azure-storage-logging" }, "release_url": "https://pypi.org/project/azure-storage-logging/0.5.1/", "requires_dist": null, "requires_python": "", "summary": "Logging handlers to send logs to Microsoft Azure Storage", "version": "0.5.1" }, "last_serial": 2389511, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "454bffec3ea6b764e5e79f765cb8e9bc", "sha256": "e83441e197be74e87e220abfdd3c9db853e05e155bf2d76b20b9e595348d2df2" }, "downloads": -1, "filename": "azure-storage-logging-0.1.0.zip", "has_sig": false, "md5_digest": "454bffec3ea6b764e5e79f765cb8e9bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22471, "upload_time": "2013-12-11T01:44:52", "url": "https://files.pythonhosted.org/packages/a5/28/5e0aa83e80ce1f18e7b922f5ecd88edd11ff8fd1a919b0eed537de6e0b73/azure-storage-logging-0.1.0.zip" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "60beb1816b26fd509fe535578efbfaf6", "sha256": "f0b8693b0301616bb5d4cf8ea13a6211ce5ef131baf878fb321da450697dbc0b" }, "downloads": -1, "filename": "azure-storage-logging-0.1.1.zip", "has_sig": false, "md5_digest": "60beb1816b26fd509fe535578efbfaf6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22455, "upload_time": "2013-12-12T10:04:55", "url": "https://files.pythonhosted.org/packages/e2/9a/85926e689f3a91875e29fd5f5fdb43142da43b02ee19ff03ced5ecce872a/azure-storage-logging-0.1.1.zip" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "887d45872ba1932b33db449cde70f8d7", "sha256": "d2626528c424a237166ddae4707a8271852372ca96408482f38aab19a6963acf" }, "downloads": -1, "filename": "azure-storage-logging-0.1.2.zip", "has_sig": false, "md5_digest": "887d45872ba1932b33db449cde70f8d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22423, "upload_time": "2013-12-12T14:20:13", "url": "https://files.pythonhosted.org/packages/61/a3/19a5c32f2cec99908d1fd8bd72fe95df9f70066f1153d6c32e663d112eb3/azure-storage-logging-0.1.2.zip" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "327e3aaedd7abd4ad4cbf826be00772d", "sha256": "f5db5d825b6e85c2faa4549c96f8ba9cf4b746573e27965dd23dda79948a73b1" }, "downloads": -1, "filename": "azure-storage-logging-0.1.3.zip", "has_sig": false, "md5_digest": "327e3aaedd7abd4ad4cbf826be00772d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22495, "upload_time": "2013-12-18T13:20:22", "url": "https://files.pythonhosted.org/packages/be/02/d9bc411c5e7a2831a5368afdf4a75cdf9f927d81095f3604bb11a009fe29/azure-storage-logging-0.1.3.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "279870fa103efeec5fa343c4cc221695", "sha256": "8322af7d42f6454606f7ee2e6b91ebdcbc35cf8c8469f5fceb0db408135404ae" }, "downloads": -1, "filename": "azure-storage-logging-0.2.0.zip", "has_sig": false, "md5_digest": "279870fa103efeec5fa343c4cc221695", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22858, "upload_time": "2014-04-01T13:03:48", "url": "https://files.pythonhosted.org/packages/56/c8/28391449bd164fc35cfa4f8d72bf8845f020444e7133a2611d09873557f4/azure-storage-logging-0.2.0.zip" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f6445fd2ba7d648061d8e3eb90817ea8", "sha256": "0f9b2b16b29eff713919da57d0192d6404ef79434bca2f76914aa26ef8bff219" }, "downloads": -1, "filename": "azure-storage-logging-0.2.1.zip", "has_sig": false, "md5_digest": "f6445fd2ba7d648061d8e3eb90817ea8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23200, "upload_time": "2014-10-16T13:49:56", "url": "https://files.pythonhosted.org/packages/7e/0b/3e9d91cae050ad20964c92ce9dffa0be3c33fe430fa71b215845b2fd683c/azure-storage-logging-0.2.1.zip" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b90ac7016dbbd1af4008876a43035106", "sha256": "fd2418929ecc3d8321c887676dd7f21e0790b6c0dad69a0971668c310bc9f7f9" }, "downloads": -1, "filename": "azure-storage-logging-0.3.0.zip", "has_sig": false, "md5_digest": "b90ac7016dbbd1af4008876a43035106", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23885, "upload_time": "2015-01-27T07:47:28", "url": "https://files.pythonhosted.org/packages/8c/47/727a3d93b9f6a00c849b3ea8585c2066cce51c2fea90f584426d97e56269/azure-storage-logging-0.3.0.zip" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "664ffc163aa247590c375ddca84c723f", "sha256": "e36a44f7cef49f504885fe242a1d1ba6509902abef90ce88a46560b73808de26" }, "downloads": -1, "filename": "azure-storage-logging-0.4.0.zip", "has_sig": false, "md5_digest": "664ffc163aa247590c375ddca84c723f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25554, "upload_time": "2015-05-14T02:47:51", "url": "https://files.pythonhosted.org/packages/8c/08/29fffe0b733dce29f5c7ef8219c60b3603039681cfcda68a6f8039596f23/azure-storage-logging-0.4.0.zip" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "ffa6bc0dbdf139f0e45cf59fbccba6cc", "sha256": "8eed93b12bd3430c91d159c32e162058f18047b49b5a02a3a6e01a86c600ba5e" }, "downloads": -1, "filename": "azure-storage-logging-0.5.0.zip", "has_sig": false, "md5_digest": "ffa6bc0dbdf139f0e45cf59fbccba6cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25519, "upload_time": "2015-09-02T06:04:49", "url": "https://files.pythonhosted.org/packages/c4/77/d0cf60cf039fde0680664cc7f98d525286f6bd1ce33dd73023752509b0b1/azure-storage-logging-0.5.0.zip" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "4546097c9e77dd7af97191d45777e461", "sha256": "ff60ef6703725e18ae7afec42666eaf334549eb701d28d497b15b25fc21204e3" }, "downloads": -1, "filename": "azure-storage-logging-0.5.1.zip", "has_sig": false, "md5_digest": "4546097c9e77dd7af97191d45777e461", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25408, "upload_time": "2016-10-09T16:18:48", "url": "https://files.pythonhosted.org/packages/37/16/3e48a98b1b1c9cdf113ccfd3c629948caaffe5c8b7a529419b7b22ec2191/azure-storage-logging-0.5.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4546097c9e77dd7af97191d45777e461", "sha256": "ff60ef6703725e18ae7afec42666eaf334549eb701d28d497b15b25fc21204e3" }, "downloads": -1, "filename": "azure-storage-logging-0.5.1.zip", "has_sig": false, "md5_digest": "4546097c9e77dd7af97191d45777e461", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25408, "upload_time": "2016-10-09T16:18:48", "url": "https://files.pythonhosted.org/packages/37/16/3e48a98b1b1c9cdf113ccfd3c629948caaffe5c8b7a529419b7b22ec2191/azure-storage-logging-0.5.1.zip" } ] }