{ "info": { "author": "Jackson Maxfield Brown, Nicholas Weber", "author_email": "jmaxfieldbrown@gmail.com, nmweber@uw.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Utilities" ], "description": "# cdptools\n\n[![build status](https://travis-ci.com/CouncilDataProject/cdptools.svg?branch=master)](https://travis-ci.com/CouncilDataProject/cdptools)\n[![codecov](https://codecov.io/gh/CouncilDataProject/cdptools/branch/master/graph/badge.svg)](https://codecov.io/gh/CouncilDataProject/cdptools)\n\n\nMaking City Council data more accessible and actions taken by city council members more discoverable and trackable.\n\n## User Features\n* Plain text query for events or minutes items\n* [Database schema](docs/resources/database_diagram.pdf) allows for simple querying of:\n * events (meetings)\n * voting history of a city council or city council member\n * bodies (committees)\n * members\n * minutes items\n * event transcripts\n* File stores and databases can be used in combination to download audio or the entire transcript of a meeting\n\n## Quickstart Documentation\n\n***Search for events using plain text:***\n```python\nfrom cdptools import CDPInstance, configs\nseattle = CDPInstance(configs.SEATTLE)\n\nmatching_events = seattle.database.search_events(\"bicycle infrastructure, pedestrian mobility\")\n# Returns list of Match objects sorted most to least relevant\n# [Match, Match, ...]\n\n# Use the `Match.data` attribute to view the match's data\nmatching_events[0].data\n# {\n# 'event_id': '05258417-9ad3-4d42-be1d-95eafcfa03c5',\n# 'legistar_event_id': 4053,\n# 'event_datetime': datetime.datetime(2019, 8, 5, 9, 30),\n# ...\n# }\n```\n\n***Search for bills, appointments, 'minutes items' using plain text:***\n```python\nfrom cdptools import CDPInstance, configs\nseattle = CDPInstance(configs.SEATTLE)\n\nmatching_minutes_items = seattle.database.search_minutes_items(\"bicycle infrastructure\")\n# Returns list of Match objects sorted most to least relevant\n# [Match, Match, ...]\n```\n\n***Get all data from a table:***\n```python\nfrom cdptools import CDPInstance, configs\nseattle = CDPInstance(configs.SEATTLE)\n\nall_events = seattle.database.select_rows_as_list(\"event\")\n# Returns list of dictionaries with event information\n# [{\"event_id\": \"0123\", ...}, ...]\n```\n\n***Download the most recent transcripts for all events:***\n```python\nfrom cdptools import CDPInstance, configs\nseattle = CDPInstance(configs.SEATTLE)\n\nevent_corpus_map = seattle.download_most_recent_transcripts()\n# Returns a dictionary mapping event id to a local path of the transcript\n# {\"0123abc...\": \"~/4567def...\"}\n```\n\nPlease view the [examples](/examples) directory which contains Jupyter notebooks with more examples on how to use CDP\ndatabases and file stores.\n\n## Installation\n`cdptools` is available on [pypi.org](https://pypi.org/project/cdptools/).\n\n#### All City Installation:\n`pip install cdptools[all]`\n\n#### Individual City Installation:\n* Seattle: `pip install cdptools[google-cloud]`\n\n## Developer Features\n* Modular system for gathering city council events, transcribing, and indexing them to make searchable.\n* Data pipelines are highly customizable to fit your cities needs.\n* Deploy and run pipelines using Docker to ensure your system has everything it needs.\n\nFor additional information on system design, refer to [system_design.md](docs/system_design.md).\nFor information on deploying a new CDP instance refer to the [deployment with Docker documentation](deploy/).\n\n**Free software: BSD-3-Clause license**\n\nThis package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter).\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://github.com/CouncilDataProject/cdptools", "keywords": "", "license": "BSD-3-Clause", "maintainer": "", "maintainer_email": "", "name": "cdptools", "package_url": "https://pypi.org/project/cdptools/", "platform": "", "project_url": "https://pypi.org/project/cdptools/", "project_urls": { "Homepage": "https://github.com/CouncilDataProject/cdptools" }, "release_url": "https://pypi.org/project/cdptools/2.0.2/", "requires_dist": [ "beautifulsoup4 (==4.8.0)", "ffmpeg-python (==0.2.0)", "fuzzywuzzy (==0.17.0)", "nltk (==3.4.4)", "pandas (==0.25.0)", "python-Levenshtein (==0.12.0)", "requests (==2.22.0)", "schedule (==0.6.0)", "tika (==1.19)", "beautifulsoup4 (==4.8.0) ; extra == 'all'", "ffmpeg-python (==0.2.0) ; extra == 'all'", "fuzzywuzzy (==0.17.0) ; extra == 'all'", "nltk (==3.4.4) ; extra == 'all'", "pandas (==0.25.0) ; extra == 'all'", "python-Levenshtein (==0.12.0) ; extra == 'all'", "requests (==2.22.0) ; extra == 'all'", "schedule (==0.6.0) ; extra == 'all'", "tika (==1.19) ; extra == 'all'", "appdirs (>=1.4.3) ; extra == 'all'", "firebase-admin (==2.17.0) ; extra == 'all'", "google-cloud-speech (==1.2.0) ; extra == 'all'", "google-cloud-storage (==1.17.0) ; extra == 'all'", "flake8 ; extra == 'all'", "codecov ; extra == 'all'", "pytest ; extra == 'all'", "pytest-cov ; extra == 'all'", "pytest-raises ; extra == 'all'", "pytest-runner ; extra == 'all'", "bumpversion (>=0.5.3) ; extra == 'all'", "wheel (>=0.33.1) ; extra == 'all'", "flake8 (>=3.7.7) ; extra == 'all'", "tox (>=3.5.2) ; extra == 'all'", "coverage (>=5.0a4) ; extra == 'all'", "Sphinx (>=2.0.0b1) ; extra == 'all'", "twine (>=1.13.0) ; extra == 'all'", "pytest (>=4.3.0) ; extra == 'all'", "pytest-cov (==2.6.1) ; extra == 'all'", "pytest-raises (>=0.10) ; extra == 'all'", "pytest-runner (>=4.4) ; extra == 'all'", "altair ; extra == 'all'", "jupyterlab ; extra == 'all'", "matplotlib ; extra == 'all'", "bumpversion (>=0.5.3) ; extra == 'dev'", "wheel (>=0.33.1) ; extra == 'dev'", "flake8 (>=3.7.7) ; extra == 'dev'", "tox (>=3.5.2) ; extra == 'dev'", "coverage (>=5.0a4) ; extra == 'dev'", "Sphinx (>=2.0.0b1) ; extra == 'dev'", "twine (>=1.13.0) ; extra == 'dev'", "pytest (>=4.3.0) ; extra == 'dev'", "pytest-cov (==2.6.1) ; extra == 'dev'", "pytest-raises (>=0.10) ; extra == 'dev'", "pytest-runner (>=4.4) ; extra == 'dev'", "firebase-admin (==2.17.0) ; extra == 'google-cloud'", "google-cloud-speech (==1.2.0) ; extra == 'google-cloud'", "google-cloud-storage (==1.17.0) ; extra == 'google-cloud'", "altair ; extra == 'interactive'", "jupyterlab ; extra == 'interactive'", "matplotlib ; extra == 'interactive'", "flake8 ; extra == 'lint'", "appdirs (>=1.4.3) ; extra == 'local'", "pytest-runner ; extra == 'setup'", "codecov ; extra == 'test'", "pytest ; extra == 'test'", "pytest-cov ; extra == 'test'", "pytest-raises ; extra == 'test'" ], "requires_python": "", "summary": "Tools to interact with and deploy CouncilDataProject instances", "version": "2.0.2" }, "last_serial": 5647456, "releases": { "2.0.0": [ { "comment_text": "", "digests": { "md5": "8114b56e78a6c6b90df10642e10a4fa1", "sha256": "998f159dc2915295d8a869844f78b934a6f66c3a3deb588bdc90d4ea51b33f23" }, "downloads": -1, "filename": "cdptools-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8114b56e78a6c6b90df10642e10a4fa1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 58781, "upload_time": "2019-08-07T19:56:54", "url": "https://files.pythonhosted.org/packages/e5/c7/942448d659f5a73eb34095c841fd6960777bb510da9b4aa2080acc168011/cdptools-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8979d4f22ceb03a96547039e16af08d7", "sha256": "f9ccf574245ca521cdd67425f33398579b181498cb591342bac369fd8dd15e99" }, "downloads": -1, "filename": "cdptools-2.0.0.tar.gz", "has_sig": false, "md5_digest": "8979d4f22ceb03a96547039e16af08d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42980, "upload_time": "2019-08-07T19:56:57", "url": "https://files.pythonhosted.org/packages/ec/de/358d7c1c9927db043bc069bb25de34920586942a17de79b3bf4628597998/cdptools-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "517457cd4fc42a428848300a6bb0ea1b", "sha256": "1c6f614e98c8a1f21d814675da8b0b01271d34d2a3b56436b812485e890bd2e3" }, "downloads": -1, "filename": "cdptools-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "517457cd4fc42a428848300a6bb0ea1b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 59522, "upload_time": "2019-08-07T23:13:45", "url": "https://files.pythonhosted.org/packages/a8/f2/8a96273539ded6d3bfc221067bd94f8ae58978251a093c920ff32edd7476/cdptools-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94c5e9f805cc7915036662e3354204ec", "sha256": "1c2d50a23d986f35055920f73390dd04dceb87616b4befa979d7640984d908ab" }, "downloads": -1, "filename": "cdptools-2.0.1.tar.gz", "has_sig": false, "md5_digest": "94c5e9f805cc7915036662e3354204ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43253, "upload_time": "2019-08-07T23:13:46", "url": "https://files.pythonhosted.org/packages/c4/c5/994d5ecf435d22eebc7e07a4139b54d2a44262ed904d50b27ce42e17ee9f/cdptools-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "b30ee9b235e113ed6d7dd17104e7ae19", "sha256": "6bb16c6122e0ffe17c7f74750ad2bc8454eeaef356ddf39207738a2130408117" }, "downloads": -1, "filename": "cdptools-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b30ee9b235e113ed6d7dd17104e7ae19", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 59524, "upload_time": "2019-08-07T23:48:20", "url": "https://files.pythonhosted.org/packages/b1/ac/508b6d89800148263489e7bda925e440f5cb1c56c548442687ee8df3e68a/cdptools-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0918e97515b81767fe5af221a4dfc8c9", "sha256": "26ad8d44a73fc170d39e42d3087fd5e59b9d9b329f57996ecd8bf97d9fe7ef80" }, "downloads": -1, "filename": "cdptools-2.0.2.tar.gz", "has_sig": false, "md5_digest": "0918e97515b81767fe5af221a4dfc8c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43260, "upload_time": "2019-08-07T23:48:24", "url": "https://files.pythonhosted.org/packages/28/13/a73fb9a2f5f199779be9c80567bbc95ed3c8f2a210bd4aaab6156d8731cd/cdptools-2.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b30ee9b235e113ed6d7dd17104e7ae19", "sha256": "6bb16c6122e0ffe17c7f74750ad2bc8454eeaef356ddf39207738a2130408117" }, "downloads": -1, "filename": "cdptools-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b30ee9b235e113ed6d7dd17104e7ae19", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 59524, "upload_time": "2019-08-07T23:48:20", "url": "https://files.pythonhosted.org/packages/b1/ac/508b6d89800148263489e7bda925e440f5cb1c56c548442687ee8df3e68a/cdptools-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0918e97515b81767fe5af221a4dfc8c9", "sha256": "26ad8d44a73fc170d39e42d3087fd5e59b9d9b329f57996ecd8bf97d9fe7ef80" }, "downloads": -1, "filename": "cdptools-2.0.2.tar.gz", "has_sig": false, "md5_digest": "0918e97515b81767fe5af221a4dfc8c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43260, "upload_time": "2019-08-07T23:48:24", "url": "https://files.pythonhosted.org/packages/28/13/a73fb9a2f5f199779be9c80567bbc95ed3c8f2a210bd4aaab6156d8731cd/cdptools-2.0.2.tar.gz" } ] }