{ "info": { "author": "Count Technologies LTD", "author_email": "hello@count.co", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "# Count API Documentation\n\nHarness the exploration, collaboration, and visualisation capabilities of the [count.co](https://count.co) web service in your workflow with the *Count API* package for Python.\n\nThis project contains an API client for the [count.co](https://count.co) web service, providing methods for authentication, data upload, and data visualisation. \n\n# Requirements\n\nPython 2 or 3\n\nOptimised for Jupyter Notebook environment\n\nPackages installed as dependencies:\n\n- [requests](http://docs.python-requests.org/en/master/)\n- [protobuf](https://pypi.org/project/protobuf/)\n\n# Supported versions\n\nPython 2.7, 3.4, 3.5, 3.6.0, 3.6\n\n# Access\n\nIn order to use the Count API module, you need to generate a token in your accounts page on [count.co](https://count.co). \n\n# Installation\n\nIn your terminal, you can use pip to install count: \n\n - `pip install count_api`\n - `pip3 install count_api`\n\n## Import\n\n from count_api import CountAPI\n\n## Initialise\n```python\ntoken = \"TOKEN GENERATED FROM COUNT.CO ADMIN PAGE\"\ncount = CountAPI()\ncount.set_api_token(token)\n```\n\n# Load data to Count\n\n## Tables\n\nIn the Count API, tables are objects that represent the data you are sending to Count.\n\n```python\n#Upload a File (.csv or .txt)\npath = 'Users/me/Downloads/norweiganCarSales.csv'\ntable = count.upload(path=path, name='MyTableName')\n\n#Upload a dataframe\ndf = pd.read_csv('norweiganCarSales.csv')\ntable = count.upload(data=df, name='MyTableName')\n\n#Upload raw data\ntable = count.upload(data='Column1,Column2,Column3\\n1,10,100\\n2,20,200', name='MyTableName')\n```\n\n## Previewing table contents\nThe first rows of a table can be printed to screen by using the `table.head(rows,columns)` method, e.g.\n```python\ntable.head()\n```\n\nThe last rows of a table can be printed to screen by using the `table.tail(rows,columns)` method, e.g.\n```python\ntable.tail()\n```\n\nYou can also find the number of rows in a column via \n```python\ntable.size()\n```\nwhich returns a tuple of ints `(number_of_rows, number_of_columns)`.\n## Generate Count URL\n\nIf you want to visualise your table in Count, you'll need the URL. See the example scripts on examples of how to best use this URL to distribute to your team, and visualise for yourself. \n\n```python\nurl = table.url()\n```\n\n# Create a Visual\n\n## Visuals\n\nLike Table objects, Visual objects are created to represent a visual you have created with the `table.upload_visual` method. The `table.upload_visual` method contains the following parameters;\n\n- `x`, `y`, `size`, `color`: specify which column to plot on each axis, via the name of the column or the column object itself\n- `aggregates`: a tuple/list of tuples/dict of the column-to-aggregrate mapping specifying the aggregate to perform on each column. For example, for performing a `sum` on a column named 'ColumnName1' and an 'avg' on a column named `ColumnName2`, you can use `{'ColumnName1' : 'sum', 'ColumnName2' : 'avg'}`\n- `groupings`: a tuple/list of tuples/dict of the groupings to apply to a column. For example, to group a `datetime` column by month you can use `{'ColumnName1': 'month'}`\n- `filters`: a tuple/list of tuples/dict of the filters to apply to a column. For example, for filtering on a `datetime` colum named 'Year' for values between the year 2007 and 2012, you can use `[('Year', '>=', (2007,)), ('Year', '<=', (2012,)]\n- `chart_options`: a dict of chart options allowing specification of axis-scale e.g. `{'x_type' : 'linear', 'y_type': 'log'}`; chart type `{'type' : 'circle'}`.\n\nA full example snippet is shown below:\n\n```python\nvisual = table.upload_visual(x = 'Year',\n y = 'Quantity',\n color = 'Type',\n filters=[('Year', '>=', (2007,1,1)), ('Year', '<=', (2012,1))]\n aggregates = {'Quantity', 'sum'},\n chart_options = {'y_type': 'linear', 'chart_type': 'line'}\n )\n```\n\n## Selecting columns\n\nTo create a visual, you will need to reference the columns in the Table object. Column references are used for selecting axes `x`,`y`,`color`,`size`, constructing the `filters`, selecting `aggregates` and `groupings`.\n\nCountAPI provides several ways to reference a column in the table.\n\n```python\nq_columns = table.columns('Quantity') # List of Column objects for columns with title matching string 'Quantity'\nq_column = table['Quantity'] # Column object of first column with title matching string 'Quantity'\ncol_type = table.column('Type') # Column object of first column with title matching string 'Type'\nfirst_column = table[0] # Column object of first column in table\nfirst_column = table.column(0) # Column object of first column in table\n```\n\nYou can also use the column name directly in the `upload_visual` signature itself, as shown in the example in the [link](#Visuals) section. Referencing columns directly via their names is equivalent to using the `table['ColumnName']` form shown above.\n\n## Axes\n\nVisuals on [count.co](https://count.co) can have the following axes: `x`, `y`, `size`, `color`. \n\n## Filters\n\nFilters can be represented as a tuple, a lists of tuples, or a dict object. The syntax has been designed to give as much flexibility to the user as possible. The `filters` parameter is typically formed of a singular or repeated units of column reference, comparator string, and value.\n\n### Comparators\n\nAvailable comparator strings are\n- For strings:\n - 'IN', 'NOT_IN'\n- For numbers:\n - '>', '>=', '<', '<=', '!=', '=', 'IN', 'NOT_IN'\n\nNote that\n- For a single column, each of '>'/'>=' or '<'/'<=' can only appear once\n- '='/'!=' can only appear once for each column. Consider using 'IN'/'NOT_IN' for multiple equalities/inequalities\n- Only '>'/'>=' and '<'/'<=' operators can be combined in 'OR' operations\n\n### Datetime values\n\nColumns of type `'datetime'` have extra flexibilty with regards to values in filters. Values in \na datetime column can of types:\n- `datetime` objects from the python [datetime](https://docs.python.org/3/library/datetime.html) module\n- tuples of 1-3 integers: `(year,)`, `(year, month,)`, `(year, month, day)`\n- integer miliseconds since the [epoch](https://en.wikipedia.org/wiki/Unix_time) 01/01/1970\n\n### Tuple syntax\n\nThe below examples are all equivalent\n```python\nfrom datetime import datetime \n...\nfilters=('Year', '>', datetime(2016,1,1))\n...\nfilters=('Year', '>', (2016,1,1))\n...\nfilters=(table['Year'], '>', (2016,1,1))\n```\n\n### List of tuples syntax\n\nThe below examples are all equivalent\n```python\nfilters=[('NumberColumn1', '<=', 10), ('NumberColumn1', '>=', 5)]\n...\nfilters=[('NumberColumn1', '<=', 10, 'AND', '>=', 5)]\n```\n\nFurther examples include filters on multiple columns\n```python\nfilters=[('NumberColumn1', '<=', 10), ('StringColumn1', 'IN', ['blah', 'foo'])]\n```\n\n### Dict syntax\n\n```python\nfilters={'NumberColumn1': [('<=', 10), ('>=', 5)], table['StringColumn1']: ('IN', ['blah', 'foo'])}\n```\n\n### AND and OR\n\nFilters can be combined via 'OR' or 'AND'. Filters specied via a list of tuples (see above) are combined by 'AND' by default. To use 'OR', the following syntax is accepted\n```python\n...\nfilters=[('NumberColumn1', '<=', 10, 'OR', '>=', 5)]\n```\n\nNote that 'OR' can only be used once per column and cannot be combined with 'AND' on the same column.\n\n## Aggregates\n\nAggregates can be selected for a particular column using the `aggregates` parameter. The `aggregates` parameter accepts a tuple/list of tuples/dict of the column-to-aggregrate mapping specifying the aggregate to perform on each column. \n\nFor example the following are equivalent\n```python\naggregates = ('ColumnName1', 'sum')\n...\naggregates = (table['ColumnName1'], 'sum')\n...\naggregates = [('ColumnName1', 'sum')]\n...\naggregates = {'ColumnName1' : 'sum'}\n```\n\nAggregate options (case insensitive):\n\n- For `string` type columns: 'number', 'distinct', 'min', 'max'\n- For `int`, `double` and `datetime` type columns: 'number', 'distinct', 'min', 'max', 'med', 'sum', 'avg', 'med'\n\nNote that you cannot use both grouping and aggregate on a column.\n\n## Groupings\n\nGroupings can be selected for a particular column using the `groupings` parameter. The `groupings` parameter accepts a tuple/list of tuples/dict of the column-to-aggregrate mapping specifying the grouping to perform on each column. \n\nGrouping options (case insensitive):\n- For `int`, `double` type columns: 'auto'\n- For `datetime` type columns: 'year', 'month', 'week', 'day', 'hour', 'minute', 'second'\n\nNote that you cannot use both grouping and aggregate on a column.\n\n## Set chart options\nChart options can be set using the `chart_options` dict parameter. Options that can be set include\n- `x_type`, `y_type`, `size_type`, `color_type`: set scale of the axis to be either `linear` or `log` e.g. `{'x_type' : 'linear'}`. Note that this cannot be set for an axis representing a 'string' or 'datetime' column. Default is `linear` for number columns.\n- `type`: set chart type to be one of `line`,`bar`,`circle`,`area`, `auto` e.g `{'type' : 'circle'}`\n\n## Embedding a visual\nOnce a Visual object has been created, it can be embedded within a Jupyter notebook with the \n```python\nvisual.embed()\n```\nmethod, which returns an IFrame of the embedded representation of the chart on [count.co](https://count.co).\n\n## Chart sharing\nA visual can be shared by using the\n```python\nvisual.url()\n```\nmethod. This returns a string url of the full visual url on [count.co](https://count.co).\n\n# Manage your data in Count\n\n## Overwrite an existing table\n\n```python\ntable = count.upload(data=pd, name = 'MyTableName', overwrite_key = 'TwPhiNcdxc7')\n```\n\nor if the Table object is still in memory,\n\n```python\ntable = table.overwite(data=pd, name = 'MyTableName')\n```\n\n## Append to an existing table\n\n```python\ntable = count.upload(data=pd, name = 'MyTableName', append_key = 'TwPhiNcdxc7')\n```\n\nor if the Table object is still in memory,\n\n```python\ntable = table.append(data=pd, name = 'MyTableName')\n```\n\nNote that the new data being appended\n- must have a header row\n- must have the same number of columns as the original table\n- must have the same column types as the original column\n\n## Column types\n\nColumn types of a data file/blob are automatically interpreted on upload to [count.co](http://count.co). Possible column types are\n\n- `int`: column of integer values\n- `double`: column of floating point values\n- `datetime`: column of datetime values\n- `string`: column of words\n\nShould you wish to force a column to be of a particular type, it is possible to do this by specifying the `column_types` list parameter on `count.upload` or `table.overwrite`, for example to specify the first 4 column types of a dataset with more than 4 columns:\n\n```python\ntable = count.upload(data=pd, name = 'MyTableName', column_types=['int', 'double', 'double', 'datetime'])\n```\n\nNote that\n- `column_types` parameter cannot be used in conjunction with append methods\n- columns that cannot be interpreted as either `int`, `double`, or `datetime` will be interpreted as `string` columns\n- if used in conjunction with `column_names` parameter, the length of both lists must be the same\n\n## Column names\n\nDefault column names are taken from the first header of the of the file/data uploaded. Column names can be overridden by specifying the `column_names` list parameter on `count.upload` or `table.overwrite`, for example to specify the first 4 column names of a dataset with more than 4 columns:\n\n```python\ntable = count.upload(data=pd, name = 'MyTableName', column_types=['MyColumn1', 'MyColumn2', 'MyColumn3', 'MyColumn4'])\n```\n\nNote that\n- `column_names` parameter cannot be used in conjunction with append methods\n- if used in conjunction with `column_names` parameter, the length of both lists must be the same\n\n## Delete a table\n\nThis deletes a table on [count.co](http://count.co). As such, any operations on a deleted table will throw error with 404 status code \n```python\ntable.delete()\ncount.delete_table('TwPhiNcdxc7')\n```\n---\n# A Full Example:\n```python\nimport pandas as pd\nfrom count_api import CountAPI\n\ntoken = \"Use token generated from Count Admin page\"\ncount = CountAPI()\ncount.set_api_token(token)\n\n#Upload a dataframe\ndf = pd.read_csv('norweiganCarSales.csv')\ntable = count.upload(data=df,name = 'Car Sales in Norway')\n\n#You can view the table and create your own visuals in Count using the table.url() method\nurl = table.url()\n\n#Preview first 10 lines of table\ntable.head()\n\n#Get size of table\ntable.size()\n\n# Create visual of chart of SUM('Quantity') vs 'Year' separated by color for 'Type'\n# for year between 2007 and end of 2016\n# with linear scale for y-axis, and line chart type\nvisual = table.upload_visual(x = 'Year',\n y = 'Quantity',\n color = 'Type',\n aggregates = {'Quantity' : 'sum'},\n filters=[('Year','>=',(2007,)),('Year','<=',(2016,))]\n chart_options = {'y_type':'linear', 'chart_type': 'line'}\n )\n\n\n# Get visual url\nvisual.url()\n\n#If using Jupyter notebook, you can also embed a chart via\nvisual.embed()\n\n#Delete table on count.co if no longer needed\ntable.delete()\n\n```\n---\n\n# Technical Documentation\n\n## CountAPI\nCountAPI class containing the following methods:\n- `set_api_token(api_token)`\n - Sets API token obtained from [count.co](https://count.co).\n - `api_token`: String API token \n- `upload(path = None, name = None, data = None, overwrite_key = None)`\n - Uploads csv file from path or csv data from str (keyword arg only method).\n - `path`: String filepath to the .csv or .xls(x). Cannot be used in conjunction with `path`.\n - `data`: String csv data to upload. Cannot be used in conjunction with `path`.\n - `name`: String name of table.\n - `overwrite_key`: String key of the table for which you would like to replace the data.\n - `append_key`: String key of the table to which you would like to append data.\n - `column_types`: List of strings of column types. Acceptable types of column type are 'string', 'int', 'double', and 'datetime'.\n - `column_names`: List of strings of column names.\n - if `column_names`/`column_types` have length greater than the number of columns in the table, the extra enties are ignored.\n - `column_names`: and `column_types` must have same length if both are set.\n - `column_names` and `column_types` cannot be used in conjuction with `append_key`\n - `Return`: Table object.\n- `delete_table(table_key)`:\n - Deletes specified table from [count.co](https://count.co) server.\n - `table_key`: String table key.\n- `table(table_key)`:\n - Get a table object from an existing table key.\n - `table_key`: String table key.\n - `Return`: Table Object.\n\n## Table\nTable class containing the following methods:\n- `[index]`:\n - Get Column object from column index.\n - `index`: Integer index of column\n - `Return`: Column Object.\n- `[name]`:\n - Get Column object from column name. Returns first column found with header matching name.\n - `name`: String column name.\n - `Return`: Column Object.\n- `append(path = None, data = None)`:\n - Appends csv file from path or csv data from str (keyword arg only method) to existing table. New table must match column types of existing table.\n - `path`: String filepath to the .csv or .xls(x). Cannot be used in conjunction with `path`.\n - `data`: String csv data to upload. Cannot be used in conjunction with `path`.\n - `Return`: Self.\n- `column(index)`:\n - Get Column object from column index.\n - `index`: Integer index of column\n - `Return`: Column Object.\n- `column(name)`:\n - Get Column object from column name. Returns first column found with header matching name.\n - `name`: String column name.\n - `Return`: Column Object.\n- `columns(name = None)`:\n - Get list of Column objects with headers matching name parameter. If name is defaulted, returns all columns in table.\n - `Return`: List of Column Objects.\n- `delete()`:\n - Deletes table from [count.co](https://count.co) server. Future references to this Table will be undefined.\n- `head(rows=10,columns=10)`:\n - Prints first n rows of table\n - `rows`: Integer number of rows requested. Max 100. Default 10.\n - `columns`: Integer number of columns requested. Max 20. Default 10.\n- `tail(rows=10,columns=10)`:\n - Prints last n rows of table\n - `rows`: Integer number of rows requested. Max 100. Default 10.\n - `columns`: Integer number of columns requested. Max 20. Default 10.\n- `overwrite(path = None, name = None, data = None, column_types = None, column_names = None)`:\n - Uploads csv file from path or csv data from str (keyword arg only method), overwriting existing table. New table must match column types of existing table.\n - `path`: String filepath to the .csv or .xls(x). Cannot be used in conjunction with `path`.\n - `data`: String csv data to upload. Cannot be used in conjunction with `path`.\n - `name`: String name of table.\n - `column_types`: List of strings of column types. Acceptable types of column type are 'string', 'int', 'double', and 'datetime'.\n - `column_names`: List of strings of column names.\n - if `column_names`/`column_types` have length greater than the number of columns in the table, the extra enties are ignored.\n - `column_names`: and `column_types` must have same length if both are set.\n - `Return`: Self.\n- `size()`:\n - Size of table as a tuple of ints (column_extent, row_extent)\n - `Return`: Tuple (int, int)\n- `upload_visual(x = None, y = None, color = None, size = None, label = None, aggregates = None, filters = None, groupings = None, chart_options = None)`:\n - Uploads chart visual to [count.co](https://count.co).\n - `x`: Column object/string column name to be used for x-axis\n - `y`: Column object/string column name to be used for y-axis\n - `color`: Column object/string column name to be used for color-axis\n - `size`: Column object/string column name to be used for size-axis \n - `label`: Column object/string column name to be used for label-axis\n - `aggregates`: Tuple/list of tuples/dictionary of aggregates to be applied to columns.\n - `filters`: Tuple/list of tuples/dictionary of filters to be applied to columns.\n - `groupings`: Tuple/list of tuples/dictionary of groupings to be applied to columns.\n - `chart_options`: Dictionary of chart options to be applied. Accepted dict keys:values:\n - `type`: `line`,`bar`,`circle`,`area`, `auto`\n - `x_type`: `linear`, `log`\n - `y_type`: `linear`, `log`\n - `size_type`: `linear`, `log`\n - `color_type`: `linear`, `log`\n - `Return`: Visual object.\n- `url()`:\n - Get url to table view on count.co.\n - `Return`: String of URL.\n\n## Visual\nVisual class containing the following methods:\n- `embed()`:\n - Returns IFrame to current visual. For use with interactive environments, e.g Jupyter notebooks.\n - `Return` IFrame.\n- `download_csv()`:\n - Download csv of visual on [count.co](https://count.co).\n - Downloads to Downloads folder if path is defaulted.\n - path: str download path.\n- `download_preview()`:\n - Download png of visual on [count.co](https://count.co).\n - Downloads to Downloads folder if path is defaulted.\n - path: str download path.\n - height: int pixels.\n - width: int pixels.\n- `preview_url()`:\n - Returns url to preview view on [count.co](https://count.co).\n - `Return`: String.\n- `set_chart_options(dict: chart_option)`:\n - Set chart options.\n - `chart_options`: Dictionary of chart options to be applied. Accepted dict keys:values:\n - `type`: `line`,`bar`,`circle`,`area`, `auto`\n - `x_type`: `linear`, `log`\n - `y_type`: `linear`, `log`\n - `size_type`: `linear`, `log`\n - `color_type`: `linear`, `log`\n - `Return`: Self.\n- `url()`:\n - Returns url to visual view on [count.co](https://count.co).\n - `Return`: String.\n- `url_embed()`:\n - Returns url to visual view on [count.co](https://count.co) suitable for embedding\n - `Return`: String.\n\n## Column\nColumn class containing the following methods:\n\n- `aggregate(aggregate)`:\n - Add aggregate function to Column object. Note: cannot perform both group_by and aggregate on the same Column object.\n - `aggregate`: String aggregate\n - str: ['DISTINCT', 'MIN', 'MAX', 'MED']\n - other: ['DISTINCT', 'MIN', 'MAX', 'MED', 'SUM', 'AVG', 'STD', 'VAR', 'MED']\n - `Return`: self\n- `filter(comparator, str or int or float or datetime: value)`:\n - Returns Filter object with specified comparator and value\n - `comparator`: String comparator. Available comparators are:\n str: ['IN']\n other : ['>', '>=', '<', '<=']\n - `value`: string/integer/float/datetime value to compare against\n - `Return`: self\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://count.co", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "count-api", "package_url": "https://pypi.org/project/count-api/", "platform": "", "project_url": "https://pypi.org/project/count-api/", "project_urls": { "Homepage": "https://count.co" }, "release_url": "https://pypi.org/project/count-api/3.1.9/", "requires_dist": [ "requests", "protobuf (==3.5.1)", "future", "pyhamcrest", "six" ], "requires_python": "", "summary": "API client for count.co", "version": "3.1.9" }, "last_serial": 4566719, "releases": { "2.0.9": [ { "comment_text": "", "digests": { "md5": "e18b9833a86ee9fd9e0898af8f75fa0e", "sha256": "e28f7396da7f212554ebb08e2f785ebacf6b2fa703b766ad7554d96d28a4a0c0" }, "downloads": -1, "filename": "count_api-2.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "e18b9833a86ee9fd9e0898af8f75fa0e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27365, "upload_time": "2018-11-08T16:06:37", "url": "https://files.pythonhosted.org/packages/50/73/cc6fcacbff0d93bc5aec9567ed8f6fe8ae85fc0985df86bb2214e4be3b59/count_api-2.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a6b5d5b7c5a8803b5d0e5c8c6e434b22", "sha256": "c4c7c9052aa2f9e2852a5ad502a80c2e49c9bf9017374f725d9a7ffebd386538" }, "downloads": -1, "filename": "count_api-2.0.9.tar.gz", "has_sig": false, "md5_digest": "a6b5d5b7c5a8803b5d0e5c8c6e434b22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23896, "upload_time": "2018-11-08T16:06:38", "url": "https://files.pythonhosted.org/packages/e8/38/10a2da2792d6e745e1a9ccd8efc136f4066a3396c35dc3f1e8cc56a105ca/count_api-2.0.9.tar.gz" } ], "3.0.6": [ { "comment_text": "", "digests": { "md5": "25e48d43ab7d8c7d7c89f5f3aa9bf04a", "sha256": "93122a5e3ef0076c1f7c8a17454a801ba6f983b74339ecc26ce7072dd72eb314" }, "downloads": -1, "filename": "count_api-3.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "25e48d43ab7d8c7d7c89f5f3aa9bf04a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32909, "upload_time": "2018-11-27T17:03:31", "url": "https://files.pythonhosted.org/packages/93/eb/3dac6870b18371ba2ce65ec488c2442df05bd873854ccfd52b4b273f406a/count_api-3.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f924eb3a3d9dca57c4467740ff14a5a7", "sha256": "d1584f3eaa39d934f4c25b4bfdbee019e65775a5088c51609117a34f00a50b82" }, "downloads": -1, "filename": "count_api-3.0.6.tar.gz", "has_sig": false, "md5_digest": "f924eb3a3d9dca57c4467740ff14a5a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30333, "upload_time": "2018-11-27T17:03:33", "url": "https://files.pythonhosted.org/packages/cb/c2/f0d5c1408a59161ceb1ffbae591283da03740b6fe2e1a79a6b30ddb156fc/count_api-3.0.6.tar.gz" } ], "3.1.2": [ { "comment_text": "", "digests": { "md5": "6838adb554caa637c14828c88a10cb62", "sha256": "72f439e55745acaa81bce73348da2e783534b5e53e226e67547f3b6a4c931018" }, "downloads": -1, "filename": "count_api-3.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6838adb554caa637c14828c88a10cb62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33838, "upload_time": "2018-12-03T12:54:40", "url": "https://files.pythonhosted.org/packages/f4/b1/a4dd87e37601eaa0c18781eaf79e288102fb5e32e32d9123646cf84d4d25/count_api-3.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "30be085a446b9e75d3deda0bf8dab0c4", "sha256": "f0ffa36a18c355f7bcb30e93c634c42fca5b7ac0c1ee64548cd0b5e00d03e538" }, "downloads": -1, "filename": "count_api-3.1.2.tar.gz", "has_sig": false, "md5_digest": "30be085a446b9e75d3deda0bf8dab0c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31642, "upload_time": "2018-12-03T12:54:43", "url": "https://files.pythonhosted.org/packages/4c/e6/4c617753cb95c6addba930332784329a2ee1ea99b0c961e060c901176511/count_api-3.1.2.tar.gz" } ], "3.1.3": [ { "comment_text": "", "digests": { "md5": "c7693faac65d2ddafdea39e53a93ea7c", "sha256": "bbc50d99314808dbfd7e9b3d278cdfa654869717c55c72c42664849f0fff6c54" }, "downloads": -1, "filename": "count_api-3.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c7693faac65d2ddafdea39e53a93ea7c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33914, "upload_time": "2018-12-04T08:44:02", "url": "https://files.pythonhosted.org/packages/e3/6e/c7c730b2695510982938e3d31679e9b8c82923cb278ea7c22bd99d6d7fb0/count_api-3.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01c5d36e854c865341594a5fea09d6f6", "sha256": "3e2fe341bf652ee665146b1a94026fc58f2a48651cf68667920ba6353f16f186" }, "downloads": -1, "filename": "count_api-3.1.3.tar.gz", "has_sig": false, "md5_digest": "01c5d36e854c865341594a5fea09d6f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31693, "upload_time": "2018-12-04T08:44:04", "url": "https://files.pythonhosted.org/packages/ac/de/df543dced2c7fc06fd6faa80271273ded1e2ac18f40abf8e4e1249b73b64/count_api-3.1.3.tar.gz" } ], "3.1.4": [ { "comment_text": "", "digests": { "md5": "e517676014bf3f3f3da35ca6dac046c6", "sha256": "9d996232e93d209b35b939c5234da85a9a98a90623dd7f5db8416342b122a2c1" }, "downloads": -1, "filename": "count_api-3.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e517676014bf3f3f3da35ca6dac046c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33952, "upload_time": "2018-12-05T09:16:12", "url": "https://files.pythonhosted.org/packages/43/b4/e1b132ee6b388060c27159b02c0c0fb54f02b7f7771126a158d7e60f6e0d/count_api-3.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fde7c22766b1450721e28e0006b87a6e", "sha256": "376765018e5765884515b39c44f30b94d69fd994bba7f85ad0dbcbfc2d9269fa" }, "downloads": -1, "filename": "count_api-3.1.4.tar.gz", "has_sig": false, "md5_digest": "fde7c22766b1450721e28e0006b87a6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31741, "upload_time": "2018-12-05T09:16:15", "url": "https://files.pythonhosted.org/packages/db/f9/440894991b407f984ae427b628aab052e60a1a083be0a41ddf95183a2dcb/count_api-3.1.4.tar.gz" } ], "3.1.5": [ { "comment_text": "", "digests": { "md5": "03b4fde1114685da8b5397b42b216979", "sha256": "5356b69e4439915aa49123f2fdde34129ad7b81c81b57894a8d3bd99a5bd87a8" }, "downloads": -1, "filename": "count_api-3.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "03b4fde1114685da8b5397b42b216979", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33912, "upload_time": "2018-12-05T09:36:08", "url": "https://files.pythonhosted.org/packages/80/9f/309dc76a2f45d2d1b4bce03d3e713cb752ea815331629048e8218c5d87d3/count_api-3.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b64ad4706073734ad6e6add5aee96462", "sha256": "c995b88b5bd2eed99319480554e954cd08924519459465710a09d00c8e8dc840" }, "downloads": -1, "filename": "count_api-3.1.5.tar.gz", "has_sig": false, "md5_digest": "b64ad4706073734ad6e6add5aee96462", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31708, "upload_time": "2018-12-05T09:36:10", "url": "https://files.pythonhosted.org/packages/9c/28/3f7d360c64d377d99097a1aa6652a07b514ea09bfd8084fa43e82b55983a/count_api-3.1.5.tar.gz" } ], "3.1.6": [ { "comment_text": "", "digests": { "md5": "350e5ba1909b15de8a62ce24cddecdf7", "sha256": "bdcde143bab7108b6044e04ea16e2f3d2244185a4d871be0ea34b0136802f497" }, "downloads": -1, "filename": "count_api-3.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "350e5ba1909b15de8a62ce24cddecdf7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34071, "upload_time": "2018-12-05T13:05:33", "url": "https://files.pythonhosted.org/packages/aa/cb/8b2b51bb17573cf1279c6274a1bb172ea90339a74cc9a3eae9150472dbf6/count_api-3.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a84f5afdca80623b23caea7be22495cb", "sha256": "5a8caf057252ad1031effd088ce8ea9e26e9dfb0f2c7e2aef1f00233061a0987" }, "downloads": -1, "filename": "count_api-3.1.6.tar.gz", "has_sig": false, "md5_digest": "a84f5afdca80623b23caea7be22495cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31722, "upload_time": "2018-12-05T13:05:34", "url": "https://files.pythonhosted.org/packages/f5/9b/d2295542909f83475461173b9c571bd883605123cd925277b30c394bc30c/count_api-3.1.6.tar.gz" } ], "3.1.7": [ { "comment_text": "", "digests": { "md5": "85ab7667abda958b65d755694f0fece1", "sha256": "777753d6451fa62d5ced758ae922e32ba560eb250970081be3fafa2b66b0c45e" }, "downloads": -1, "filename": "count_api-3.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "85ab7667abda958b65d755694f0fece1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34251, "upload_time": "2018-12-05T17:14:24", "url": "https://files.pythonhosted.org/packages/96/0b/0b3f594c7bd56880f8a9d9e72cf7929b08e1ddce8553fb2712bf783f7a3e/count_api-3.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "875735ac7282c0f4f5bb41224af1d5eb", "sha256": "265a2ae742873d84cbbc38a8d19b60583ec75f34a549ad25eaf8e6679e0480bf" }, "downloads": -1, "filename": "count_api-3.1.7.tar.gz", "has_sig": false, "md5_digest": "875735ac7282c0f4f5bb41224af1d5eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31866, "upload_time": "2018-12-05T17:14:26", "url": "https://files.pythonhosted.org/packages/03/c5/469ab512982a1d5503e9039453292d77a4a7c32003e5a8c683eb1fb3cfa8/count_api-3.1.7.tar.gz" } ], "3.1.8": [ { "comment_text": "", "digests": { "md5": "de496e7c924f3fe94ed4d5bc27a0be62", "sha256": "ed81fe7b38de5375e99d70c86b93aced38aa0e6ca6590fc92cdf7b5fb773bd2f" }, "downloads": -1, "filename": "count_api-3.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "de496e7c924f3fe94ed4d5bc27a0be62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34291, "upload_time": "2018-12-05T17:27:51", "url": "https://files.pythonhosted.org/packages/f5/c6/dd6a0afd64c26a8d00e631af602fa2616c22fc497661638376b4211ef282/count_api-3.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3305143ed59e787abf81123f2122623e", "sha256": "ce6f22d973863e203632ee33667c8beae295b2009556c2d4862f0fcc78f5631a" }, "downloads": -1, "filename": "count_api-3.1.8.tar.gz", "has_sig": false, "md5_digest": "3305143ed59e787abf81123f2122623e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31909, "upload_time": "2018-12-05T17:27:53", "url": "https://files.pythonhosted.org/packages/3c/54/ac4c22a2290977de0cc42f7dff00be9f07831c0382d9d5404748aee52d77/count_api-3.1.8.tar.gz" } ], "3.1.9": [ { "comment_text": "", "digests": { "md5": "4eaaad9239e44a75c7e173bb6ec1e7e9", "sha256": "31780161661fe9b07dd23f601816ac86c03b3fc8e80dcb26b1fa83261e7f1a8d" }, "downloads": -1, "filename": "count_api-3.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "4eaaad9239e44a75c7e173bb6ec1e7e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34504, "upload_time": "2018-12-06T06:40:22", "url": "https://files.pythonhosted.org/packages/97/75/eb20cdcaa6872385b4ea77101266cfa8f78936c2f9c8fd55649d1909b2eb/count_api-3.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "87b46098b993d577ee31921aac16b769", "sha256": "5c712c16f0b80844563dca7fb53151484a9d432e5773b499c0b81920883f23f7" }, "downloads": -1, "filename": "count_api-3.1.9.tar.gz", "has_sig": false, "md5_digest": "87b46098b993d577ee31921aac16b769", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32128, "upload_time": "2018-12-06T06:40:26", "url": "https://files.pythonhosted.org/packages/72/e0/fb38c51b5bd65688f1c71798141d69c8ecb062ad11ad6a934c3f8dffa7e5/count_api-3.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4eaaad9239e44a75c7e173bb6ec1e7e9", "sha256": "31780161661fe9b07dd23f601816ac86c03b3fc8e80dcb26b1fa83261e7f1a8d" }, "downloads": -1, "filename": "count_api-3.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "4eaaad9239e44a75c7e173bb6ec1e7e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34504, "upload_time": "2018-12-06T06:40:22", "url": "https://files.pythonhosted.org/packages/97/75/eb20cdcaa6872385b4ea77101266cfa8f78936c2f9c8fd55649d1909b2eb/count_api-3.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "87b46098b993d577ee31921aac16b769", "sha256": "5c712c16f0b80844563dca7fb53151484a9d432e5773b499c0b81920883f23f7" }, "downloads": -1, "filename": "count_api-3.1.9.tar.gz", "has_sig": false, "md5_digest": "87b46098b993d577ee31921aac16b769", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32128, "upload_time": "2018-12-06T06:40:26", "url": "https://files.pythonhosted.org/packages/72/e0/fb38c51b5bd65688f1c71798141d69c8ecb062ad11ad6a934c3f8dffa7e5/count_api-3.1.9.tar.gz" } ] }