{ "info": { "author": "Scott Sanders", "author_email": "scott@jssjr.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3" ], "description": "# Carbonate\n\n> \"Pop bottles.\" *-- Birdman*\n\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/99e1654102b74d82a63505145334e7ed)](https://www.codacy.com/app/graphite-project/carbonate?utm_source=github.com&utm_medium=referral&utm_content=graphite-project/carbonate&utm_campaign=badger)\n[![Build Status](https://travis-ci.org/graphite-project/carbonate.svg?branch=master)](https://travis-ci.org/graphite-project/carbonate)\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fgraphite-project%2Fcarbonate.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fgraphite-project%2Fcarbonate?ref=badge_shield)\n[![codecov](https://codecov.io/gh/graphite-project/carbonate/branch/master/graph/badge.svg)](https://codecov.io/gh/graphite-project/carbonate)\n\nGraphite clusters are pretty cool. Here are some primitive tools to help you manage your graphite clusters.\n\nAll of the tools support two common arguments; the path to a config file, and the name of the cluster. Using these tools alongside a config file that describes your graphite clusters you can build up scripts to manage your metrics. Some of the tools could easily be replaced with one-liners in shell, but exist here for convenience and readability. The goal is to provide fast, predictable utilities that can easily be composed into more advanced tooling.\n\n## Install\n[Carbonate is available from Python official third party repository](https://pypi.python.org/pypi/carbonate/0.2.1) (aka PyPi) and as such can be installed via regular Python package managers.\nNote that you might have to install a python package manager (e.g. apt-get install python-setuptools on a ubuntu host)\n\n```\npip install carbonate\n```\n## The Config\n\nCarbonate expects a configuration file that defines the clusters in your environment. The default config file is located at `/opt/graphite/conf/carbonate.conf` or can be provided on the command line. The default cluster is named 'main'. Both defaults can be overridden by setting in the environment `CARBONATE_CONFIG` and `CARBONATE_CLUSTER` respectively.\n\n```\n[main]\nDESTINATIONS = 192.168.9.13:2004:carbon01, 192.168.9.15:2004:carbon02, 192.168.6.20:2004:carbon03\nREPLICATION_FACTOR = 2\nSSH_USER = carbon\n\n[agg]\nDESTINATIONS = 192.168.9.13:2004:carbon01, 192.168.9.15:2004:carbon02, 192.168.6.20:2004:carbon03\nRELAY_METHOD = aggregated-consistent-hashing\nREPLICATION_FACTOR = 2\nSSH_USER = carbon\n\n[fnv]\nDESTINATIONS = 192.168.9.13:2004:ba603c36342304ed77953f84ac4d357b, 192.168.9.15:2004:5dd63865534f84899c6e5594dba6749a, 192.168.6.20:2004:866a18b81f2dc4649517a1df13e26f28\nREPLICATION_FACTOR = 2\nSSH_USER = carbonate\nHASHING_TYPE = fnv1a_ch\n```\n\nYou should take care to match the list of destination IPs or hostnames to the nodes in your cluster (i.e. it should match with routing configuretion of your carbon relay). Order is important because of how the consistent hash ring is created.\n\nYou can configure the relay method to be one of \"consistent-hashing\" or \"aggregated-consistent-hashing\". If omitted, \"consistent-hashing\" is used by default. Use of \"aggregated-consistent-hashing\" usually requires a rules file to be provided to relevant commands.\n\nThe replication factor should match the replication factor for the cluster.\n\nAlso, you can choose to provide a SSH user that will be used when carbonate requires connecting to another node in the cluster to perform an operation. If this is not provided, then the current user executing the command will be chosen.\n\nFinally, you can provide HASHING_TYPE of your cluster. Default is `carbon_ch`, also `fnv1a_ch` is supported. Please note that for using `fnv1a_ch` hashing you need `carbon` 1.0.2 or newer installed (or you need to use [carbon-c-relay](https://github.com/grobian/carbon-c-relay) relay instead).\n\n## The Tools\n\n### carbon-hosts\n\n```\nusage: carbon-hosts [-h] [-c CONFIG_FILE] [-C CLUSTER]\n\nReturn the addresses for all nodes in a cluster\n\noptional arguments:\n -h, --help show this help message and exit\n -c CONFIG_FILE, --config-file CONFIG_FILE\n Config file to use (default:\n /opt/graphite/conf/carbonate.conf)\n -C CLUSTER, --cluster CLUSTER\n Cluster name (default: main)\n```\n\n### carbon-lookup\n\n```\nusage: carbon-lookup [-h] [-c CONFIG_FILE] [-C CLUSTER] [-s] METRIC\n\nLookup where a metric lives in a carbon cluster\n\npositional arguments:\n METRIC Full metric name to search for\n\noptional arguments:\n -h, --help show this help message and exit\n -c CONFIG_FILE, --config-file CONFIG_FILE\n Config file to use (default:\n /opt/graphite/conf/carbonate.conf)\n -C CLUSTER, --cluster CLUSTER\n Cluster name (default: main)\n -a AGGREGATION_RULES, --aggregation-rules AGGREGATION_RULES\n File containing rules used in conjunction with the\n \"aggregated-consistent-hashing\" relay method (default:\n /opt/graphite/conf/aggregation-rules.conf)\n -s, --short Only display the address, without port and cluster\n name (default: False)\n```\n\n### carbon-list\n\n```\nusage: carbon-list [-h] [-c CONFIG_FILE] [-C CLUSTER] [-d STORAGE_DIR]\n\nList the metrics this carbon node contains\n\noptional arguments:\n -h, --help show this help message and exit\n -c CONFIG_FILE, --config-file CONFIG_FILE\n Config file to use (default:\n /opt/graphite/conf/carbonate.conf)\n -C CLUSTER, --cluster CLUSTER\n Cluster name (default: main)\n -d STORAGE_DIR, --storage-dir STORAGE_DIR\n Storage dir (default: /opt/graphite/storage/whisper)\n```\n\n### carbon-sieve\n\n```\nusage: carbon-sieve [-h] [-c CONFIG_FILE] [-C CLUSTER] [-f METRICS_FILE]\n [-n NODE] [-I]\n\nGiven a list of metrics, output those that belong to a node\n\noptional arguments:\n -h, --help show this help message and exit\n -c CONFIG_FILE, --config-file CONFIG_FILE\n Config file to use (default:\n /opt/graphite/conf/carbonate.conf)\n -C CLUSTER, --cluster CLUSTER\n Cluster name (default: main)\n -a AGGREGATION_RULES, --aggregation-rules AGGREGATION_RULES\n File containing rules used in conjunction with the\n \"aggregated-consistent-hashing\" relay method (default:\n /opt/graphite/conf/aggregation-rules.conf)\n -f METRICS_FILE, --metrics-file METRICS_FILE\n File containing metric names to filter, or '-' to read\n from STDIN (default: -)\n -n NODE, --node NODE Filter for metrics belonging to this node (default:\n self)\n -I, --invert Invert the sieve, match metrics that do NOT belong to\n a node (default: False)\n```\n\n### carbon-sync\n\n```\nusage: carbon-sync [-h] [-c CONFIG_FILE] [-C CLUSTER] [-f METRICS_FILE] -s\n SOURCE_NODE [-d STORAGE_DIR] [-b BATCH_SIZE]\n [--source-storage-dir SOURCE_STORAGE_DIR]\n [--rsync-options RSYNC_OPTIONS] [--rsync-disable-copy-dest]\n [--tmpdir TMP_STAGING_DIR] [--rsync-max-retries MAX_RETRIES]\n [--rsync-retries-interval SECONDS] [--dirty] [-l] [-o]\n\nSync local metrics using remote nodes in the cluster\n\noptional arguments:\n -h, --help show this help message and exit\n -c CONFIG_FILE, --config-file CONFIG_FILE\n Config file to use (env: CARBONATE_CONFIG) (default:\n /opt/graphite/conf/carbonate.conf)\n -C CLUSTER, --cluster CLUSTER\n Cluster name (env: CARBONATE_CLUSTER) (default: main)\n -f METRICS_FILE, --metrics-file METRICS_FILE\n File containing metric names to filter, or '-' to read\n from STDIN (default: -)\n -s SOURCE_NODE, --source-node SOURCE_NODE\n Override the source for metrics data (default: None)\n -d STORAGE_DIR, --storage-dir STORAGE_DIR\n Storage dir (default: /opt/graphite/storage/whisper)\n -b BATCH_SIZE, --batch-size BATCH_SIZE\n Batch size for the rsync job (default: 1000)\n --source-storage-dir SOURCE_STORAGE_DIR\n Source storage dir (default:\n /opt/graphite/storage/whisper)\n --rsync-options RSYNC_OPTIONS\n Pass option(s) to rsync. Make sure to use \"--rsync-\n options=\" if option starts with '-' (default: -azpS)\n --rsync-disable-copy-dest\n Avoid --copy-dest, transfer all whisper data between\n nodes. (default: False)\n --rsync-max-retries RETRIES\n Number of times rsync will attempt to copy each batch\n of metrics before moving on. If all retry attempts are\n unsuccessful, carbon-sync will write a file containing\n the name of each metric in the failed batch so they can\n be easily retried at a later time. (Default: 3)\n --rsync-retries-interval SECONDS\n How long to wait in between each rsync retry attempt\n (see --rsync-max-retries). (default: 5)\n -t TMP_STAGING_DIR, --tmpdir TMP_STAGING_DIR\n Specify an alternate location in which the temporary\n rsync staging dirs will be created. This can be useful\n for large syncs where the default location (as chosen\n by mkdtemp) resides on a filesystem that's too small\n to store all the metrics being copied from the remote\n host.\n --dirty If set, don't clean temporary rsync directory\n (default: False)\n -l, --lock Lock whisper files during filling (default: False)\n -o, --overwrite Write all non nullpoints from src to dst (default:\n False)\n```\n\n### carbon-path\n\n```\nusage: carbon-path [-h] [-c CONFIG_FILE] [-C CLUSTER] [-f METRICS_FILE] [-r]\n [-p] [-d STORAGE_DIR]\n\nTransform metric paths to (or from) filesystem paths\n\noptional arguments:\n -h, --help show this help message and exit\n -c CONFIG_FILE, --config-file CONFIG_FILE\n Config file to use (default:\n /opt/graphite/conf/carbonate.conf)\n -C CLUSTER, --cluster CLUSTER\n Cluster name (default: main)\n -f METRICS_FILE, --metrics-file METRICS_FILE\n File containing metric names to transform to file\n paths, or '-' to read from STDIN (default: -)\n -r, --reverse Transform from file paths to metric paths (default:\n False)\n -p, --prepend Prepend storage dir to file paths (default: False)\n -d STORAGE_DIR, --storage-dir STORAGE_DIR\n Whisper storage directory to prepend when -p given\n (default: /opt/graphite/storage/whisper)\n```\n\n### carbon-stale\n\n```\nusage: carbon-stale [-h] [-c CONFIG_FILE] [-C CLUSTER] [-f METRICS_FILE] [-r]\n [-d STORAGE_DIR] [-l HOURS] [-o HOURS] [-w] [-p]\n\nFind and list potentially stale metrics.\n\noptional arguments:\n -h, --help show this help message and exit\n -c CONFIG_FILE, --config-file CONFIG_FILE\n Config file to use (default:\n /opt/graphite/conf/carbonate.conf)\n -C CLUSTER, --cluster CLUSTER\n Cluster name (default: main)\n -f METRICS_FILE, --metrics-file METRICS_FILE\n File containing metric names to transform to file\n paths, or '-' to read from STDIN (default: -)\n -r, --reverse Output metrics which are not stale instead (default:\n False)\n -d STORAGE_DIR, --storage-dir STORAGE_DIR\n Whisper storage directory to prepend when -p given\n (default: /opt/graphite/storage/whisper)\n -l HOURS, --limit HOURS\n Definition of staleness, in hours (default: 24)\n -o HOURS, --offset HOURS\n Use a whisper data window ending HOURS ago (implies\n -w) (default: 0)\n -w, --whisper Use whisper data instead of filesystem stat() call\n (default: False)\n -p, --paths Print filesystem paths instead of metric names\n (default: False)\n```\n\n### whisper-aggregate\n\n```\nusage: whisper-aggregate [-h] [-f METRICS_FILE] [-d STORAGE_DIR]\n\nSet aggregation for whisper-backed metrics this carbon instance contains\n\noptional arguments:\n -h, --help show this help message and exit\n -f METRICS_FILE, --metrics-file METRICS_FILE\n File containing metric names and aggregation modes, or\n '-' to read from STDIN (default: -)\n -d STORAGE_DIR, --storage-dir STORAGE_DIR\n Whisper storage directory (default:\n /opt/graphite/storage/whisper)\n```\n\n### whisper-fill\n\n```\nusage: whisper-fill [-h] [-l] [-o] SRC DST\n\nBackfill datapoints from one whisper file into another\n\npositional arguments:\n SRC Whisper source file\n DST Whisper destination file\n\noptional arguments:\n -h, --help show this help message and exit\n -l, --lock Lock whisper files during filling (default: False)\n -o, --overwrite Write all non nullpoints from src to dst (default: False)\n```\n\n## Example usage\n\n### Resync a node in a cluster\n\n```\n#!/bin/sh\n#\n# Resync a node from other nodes in the cluster\n#\n\nLOCAL_IP=\"$1\"\n\nfor h in $(carbon-hosts) ; do\n (\n ssh $h -- carbon-list |\n carbon-sieve -n $LOCAL_IP |\n carbon-sync -s $h\n ) &\ndone\n```\n\n### Rebalance a cluster\n\n```\n#!/bin/sh\n#\n# Rebalance a cluster from one size to another. Remember to cleanup metrics\n# that no longer belong when all nodes are rebalanced!\n#\n\nLOCAL_IP=\"$1\"\nOLD_CLUSTER=\"old\"\nNEW_CLUSTER=\"main\"\n\nfor h in $(carbon-hosts -C \"$OLD_CLUSTER\") ; do\n ssh $h -- carbon-list |\n carbon-sieve -C \"$NEW_CLUSTER\" -n $LOCAL_IP |\n carbon-sync -s $h\ndone\n```\n\n### List metrics that don't belong\n\n```\n#!/bin/sh\n#\n# List metrics from disk that don't belong\n#\n\nLOCAL_IP=\"$1\"\n\ncarbon-list | carbon-sieve -I -n $LOCAL_IP\n```\n\n### Listing metrics that have stopped updating\n\nMetrics with whisper data that is entirely blank for the last 2 hours (perhaps\nuseful if you suspect issues with fs timestamps or carbon clients writing in 'the\nfuture'):\n\n```\ncarbon-list | carbon-stale --whisper --limit=2\n```\n\nMetrics whose metrics files appear untouched for 48 hours or more (functionally\nidentical to `find /your/data/dir -type f -mtime +2`):\n\n```\ncarbon-list | carbon-stale --limit=48\n```\n\nMore interesting is if you use ``carbon-stale``, then sieve to identify stale\nmetrics that don't belong here (vs un-stale metrics that *do* belong here but\nare misreported in carbon-sieve due to things like doubled-up periods in metric\npaths due to broken collectors. It's a thing.)\n\n```\ncarbon-list | carbon-stale --limit=48 | carbon-sieve -I -n $LOCAL_IP\n```\n\nTo print file paths for use with e.g. `xargs rm` or whatnot, use `-p`:\n\n```\ncarbon-list | carbon-stale -p | xargs -n 100 rm\n```\n\n\n# License\n\nThe code is available under the MIT license.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jssjr/carbonate", "keywords": "graphite carbon", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "carbonate", "package_url": "https://pypi.org/project/carbonate/", "platform": "", "project_url": "https://pypi.org/project/carbonate/", "project_urls": { "Homepage": "https://github.com/jssjr/carbonate" }, "release_url": "https://pypi.org/project/carbonate/1.1.8/", "requires_dist": null, "requires_python": "", "summary": "Tools for managing federated carbon clusters.", "version": "1.1.8", "yanked": false, "yanked_reason": null }, "last_serial": 10104080, "releases": { "0.2.0": [], "0.2.1": [ { "comment_text": "", "digests": { "md5": "43dd0f874ffed3b4b8d5e4fbcd088e88", "sha256": "127db79aa6905e48ef7c1ca70ddb75a046ac12ae159b191b9a18ad5b682a326d" }, "downloads": -1, "filename": "carbonate-0.2.1.tar.gz", "has_sig": false, "md5_digest": "43dd0f874ffed3b4b8d5e4fbcd088e88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9692, "upload_time": "2014-02-01T22:08:39", "upload_time_iso_8601": "2014-02-01T22:08:39.504257Z", "url": "https://files.pythonhosted.org/packages/d7/af/06c957f4002c4e43d6afe4983b8947c53087d9eae3961f3a79ff00837175/carbonate-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "775009d039b850b8e00db9377aa5ab73", "sha256": "33e8801d7a8dc5f0c114b8d8b5cfa06b981f8188fea37fb231eec33dc83dfcec" }, "downloads": -1, "filename": "carbonate-0.2.2.tar.gz", "has_sig": false, "md5_digest": "775009d039b850b8e00db9377aa5ab73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11133, "upload_time": "2014-10-15T15:05:18", "upload_time_iso_8601": "2014-10-15T15:05:18.212651Z", "url": "https://files.pythonhosted.org/packages/8c/5b/791cc4ee3dd7dceeb0922ed8dc5548c259c7e107251251432d267d002ffe/carbonate-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "813709e26d952be3b31ef570cca08b8d", "sha256": "5e01777c360e6452707d7b385255390c912cef6cdfd6b9272d8b7b3ba9f1c811" }, "downloads": -1, "filename": "carbonate-0.2.3-py2.7.egg", "has_sig": false, "md5_digest": "813709e26d952be3b31ef570cca08b8d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 31716, "upload_time": "2017-12-19T10:41:30", "upload_time_iso_8601": "2017-12-19T10:41:30.079541Z", "url": "https://files.pythonhosted.org/packages/cb/ba/7ecd59cd2f5a784e368ac242b32196dd0c47789d2cf50f55797cc0157d06/carbonate-0.2.3-py2.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "63fd99d690832070436cdf61f947d565", "sha256": "cd3ee1a178491cecd6a54328826d4dd413f0047badc604754923cb973abeccb7" }, "downloads": -1, "filename": "carbonate-0.2.3.tar.gz", "has_sig": false, "md5_digest": "63fd99d690832070436cdf61f947d565", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13894, "upload_time": "2017-02-13T16:39:44", "upload_time_iso_8601": "2017-02-13T16:39:44.250110Z", "url": "https://files.pythonhosted.org/packages/8e/ea/9af4bac14f415dd77eed252a3195530fc39fe3627dc6b7c101cd114c2476/carbonate-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "96bccad1a2be933b65e2ba150d23eaa4", "sha256": "00bd512768afdecbbad79a6474ae10b6c114b8bdc393ec3568e00adf0b2d1fb5" }, "downloads": -1, "filename": "carbonate-1.0.0-py2.7.egg", "has_sig": false, "md5_digest": "96bccad1a2be933b65e2ba150d23eaa4", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 31708, "upload_time": "2017-12-19T10:41:31", "upload_time_iso_8601": "2017-12-19T10:41:31.635911Z", "url": "https://files.pythonhosted.org/packages/8f/dd/fc3e34a42195d22c8cb9b1e319e3d1158432e967f76a0dd4827d93afdcd3/carbonate-1.0.0-py2.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "07af8a6afe8211e7322693163f7734a1", "sha256": "3c905e9c02cf5f005011097bccb81681d348df99fc0c5518b0396d81ab1faf76" }, "downloads": -1, "filename": "carbonate-1.0.0.tar.gz", "has_sig": false, "md5_digest": "07af8a6afe8211e7322693163f7734a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13882, "upload_time": "2017-04-11T21:32:59", "upload_time_iso_8601": "2017-04-11T21:32:59.044936Z", "url": "https://files.pythonhosted.org/packages/8e/44/9bca63df90b9302265de385fd44001dab1b75cef5e01645e3573eaab0cde/carbonate-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "3a4389eb8bfd01424cf6cdb307f35b35", "sha256": "1e456400ee68d55214139587ee203856c48a3dc39b33916aeeb913d2daa27656" }, "downloads": -1, "filename": "carbonate-1.0.1-py2.7.egg", "has_sig": false, "md5_digest": "3a4389eb8bfd01424cf6cdb307f35b35", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 31984, "upload_time": "2017-12-19T10:41:33", "upload_time_iso_8601": "2017-12-19T10:41:33.324134Z", "url": "https://files.pythonhosted.org/packages/27/ca/6d26336a45e8270822742daba26c264e7bb5b7e30d707450ca25bc6c2fd5/carbonate-1.0.1-py2.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cd9fc16ce1b4c92f857135c1671b5465", "sha256": "fd4dc5d0e337420da05cf3de88ac876d36d44201dd09f208bda23759bdf5f076" }, "downloads": -1, "filename": "carbonate-1.0.1.tar.gz", "has_sig": false, "md5_digest": "cd9fc16ce1b4c92f857135c1671b5465", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13893, "upload_time": "2017-04-23T17:25:00", "upload_time_iso_8601": "2017-04-23T17:25:00.723528Z", "url": "https://files.pythonhosted.org/packages/90/08/d8aa7ca3c0d7e35b5a04e20e19583145879f2b924371b1bf9fb39b2df026/carbonate-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "dd023519df2a9e1b488ee834ae85ebf6", "sha256": "784e9cb7424fd3f9954a2f779735ad4e571a090849ad850d05709ee1ba3b375e" }, "downloads": -1, "filename": "carbonate-1.0.2.tar.gz", "has_sig": false, "md5_digest": "dd023519df2a9e1b488ee834ae85ebf6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14269, "upload_time": "2017-07-11T21:35:06", "upload_time_iso_8601": "2017-07-11T21:35:06.017619Z", "url": "https://files.pythonhosted.org/packages/3f/86/fdf90cbbb2e190392bbf214b2357162965e002fadf7e1664811d95c88952/carbonate-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "3478c786f1a537e70e2ed2ddad68e213", "sha256": "ce55b9a663cecf02719991fd3a8c93d41aa2a3f998f235f68f8cc67ca3da1730" }, "downloads": -1, "filename": "carbonate-1.1.0.tar.gz", "has_sig": false, "md5_digest": "3478c786f1a537e70e2ed2ddad68e213", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14302, "upload_time": "2017-12-19T10:41:34", "upload_time_iso_8601": "2017-12-19T10:41:34.814683Z", "url": "https://files.pythonhosted.org/packages/d7/ea/d16afc94372715ac1380bcc027954688312c9c29006d056d656b2b050ae6/carbonate-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "f0404dcb6703ab385f983b36e49356fe", "sha256": "a0914b742cd5815c06b235d9d79ac6dc52d1ae81cb26dc2fe447d45eb9c7c407" }, "downloads": -1, "filename": "carbonate-1.1.1.tar.gz", "has_sig": false, "md5_digest": "f0404dcb6703ab385f983b36e49356fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14308, "upload_time": "2017-12-19T13:09:56", "upload_time_iso_8601": "2017-12-19T13:09:56.323616Z", "url": "https://files.pythonhosted.org/packages/60/72/ae117823a59101fb23a5c2893d8a8aec5b9ac51ae711c9cecac4401ff816/carbonate-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "16f1323b3943df148df682367dc43854", "sha256": "0820a2ff9516080ef5734bab994ce570e49b0666bd947aaba4a538d7abe8e726" }, "downloads": -1, "filename": "carbonate-1.1.2.tar.gz", "has_sig": false, "md5_digest": "16f1323b3943df148df682367dc43854", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14513, "upload_time": "2018-02-13T11:49:24", "upload_time_iso_8601": "2018-02-13T11:49:24.532490Z", "url": "https://files.pythonhosted.org/packages/85/da/023de29144d411a2af78e206a72ce19e355c788b395360dcd536348bbac9/carbonate-1.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "b4e7498891b2c5257553a7380675d8d3", "sha256": "a47ceee3cf785563d0a7d445f1d1821bb2744c9bf9c0c5aacb8463ff816f0673" }, "downloads": -1, "filename": "carbonate-1.1.3.tar.gz", "has_sig": false, "md5_digest": "b4e7498891b2c5257553a7380675d8d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14512, "upload_time": "2018-04-04T08:08:02", "upload_time_iso_8601": "2018-04-04T08:08:02.368916Z", "url": "https://files.pythonhosted.org/packages/86/ec/778a8e8c35bd7eec6922d2fe68d174d43c884270f7962a25528844a2a8e0/carbonate-1.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "eec54cec2e31a73755910a101b8daeab", "sha256": "64d418c3e583f8c9dc34938b897f72b2e55e939414982670a93afe333aba82d7" }, "downloads": -1, "filename": "carbonate-1.1.4.tar.gz", "has_sig": false, "md5_digest": "eec54cec2e31a73755910a101b8daeab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18240, "upload_time": "2018-09-03T22:29:40", "upload_time_iso_8601": "2018-09-03T22:29:40.596366Z", "url": "https://files.pythonhosted.org/packages/07/9e/45c68bb671201351580741ca4f99a06d38e1683b52a946113d9666cf1d12/carbonate-1.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "36018252a751a87902fd06609cbdc0d6", "sha256": "b6f899213159d22eecd230416c184a852bbd85eef20f26ed1f0d45b4e6143823" }, "downloads": -1, "filename": "carbonate-1.1.5.tar.gz", "has_sig": false, "md5_digest": "36018252a751a87902fd06609cbdc0d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18296, "upload_time": "2018-12-23T19:27:11", "upload_time_iso_8601": "2018-12-23T19:27:11.383370Z", "url": "https://files.pythonhosted.org/packages/cd/8b/0b391678b761765fa36b5fa56fc5b03945fe164f9455f13f55ae80b60cf0/carbonate-1.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.6": [ { "comment_text": "", "digests": { "md5": "7eb822839711f00704802ffaf58d1d2c", "sha256": "288e08641efa4f933291149112e60248c232fa8c41f03c91700f47f068f4b3a2" }, "downloads": -1, "filename": "carbonate-1.1.6.tar.gz", "has_sig": false, "md5_digest": "7eb822839711f00704802ffaf58d1d2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18783, "upload_time": "2019-10-25T11:22:20", "upload_time_iso_8601": "2019-10-25T11:22:20.118679Z", "url": "https://files.pythonhosted.org/packages/d1/e6/3c2a0a48f4df71468628f83aec507f2b994d36f50f64fb8cbb3b4c5eeb42/carbonate-1.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.7": [ { "comment_text": "", "digests": { "md5": "14ad7f3d1807e32d42fe39291fd65562", "sha256": "ac80c9be62c41f4dba934592fde02cd1c5c447e0ae8396b4cce198733a13ce28" }, "downloads": -1, "filename": "carbonate-1.1.7.tar.gz", "has_sig": false, "md5_digest": "14ad7f3d1807e32d42fe39291fd65562", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18813, "upload_time": "2020-03-16T15:16:57", "upload_time_iso_8601": "2020-03-16T15:16:57.690779Z", "url": "https://files.pythonhosted.org/packages/8e/86/c9f1172227d6cc412b454bc676348643bff8796985af6aeb0bdda87956ce/carbonate-1.1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.8": [ { "comment_text": "", "digests": { "md5": "be68854e9a3bab6055ddc159e58a20a3", "sha256": "4a7fd79997acaac40a1d912fefc146b97dd8b8923cf5bce273992ab4b05dd317" }, "downloads": -1, "filename": "carbonate-1.1.8.tar.gz", "has_sig": false, "md5_digest": "be68854e9a3bab6055ddc159e58a20a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16892, "upload_time": "2021-04-19T10:22:38", "upload_time_iso_8601": "2021-04-19T10:22:38.277323Z", "url": "https://files.pythonhosted.org/packages/e3/7e/4abad258c29f2297908da49b6b1cf142b27da0b893be5990742f9f029476/carbonate-1.1.8.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "be68854e9a3bab6055ddc159e58a20a3", "sha256": "4a7fd79997acaac40a1d912fefc146b97dd8b8923cf5bce273992ab4b05dd317" }, "downloads": -1, "filename": "carbonate-1.1.8.tar.gz", "has_sig": false, "md5_digest": "be68854e9a3bab6055ddc159e58a20a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16892, "upload_time": "2021-04-19T10:22:38", "upload_time_iso_8601": "2021-04-19T10:22:38.277323Z", "url": "https://files.pythonhosted.org/packages/e3/7e/4abad258c29f2297908da49b6b1cf142b27da0b893be5990742f9f029476/carbonate-1.1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }