{"id":23799786,"url":"https://github.com/python-discord/patsy","last_synced_at":"2026-01-23T13:48:07.334Z","repository":{"id":38961897,"uuid":"413859913","full_name":"python-discord/patsy","owner":"python-discord","description":null,"archived":false,"fork":false,"pushed_at":"2023-12-14T15:48:35.000Z","size":864,"stargazers_count":3,"open_issues_count":6,"forks_count":0,"subscribers_count":22,"default_branch":"main","last_synced_at":"2025-04-13T06:45:49.125Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/python-discord.png","metadata":{"funding":{"patreon":"python_discord","custom":"https://www.redbubble.com/people/pythondiscord"},"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-05T14:48:35.000Z","updated_at":"2024-02-04T19:51:53.000Z","dependencies_parsed_at":"2025-02-21T15:45:30.124Z","dependency_job_id":null,"html_url":"https://github.com/python-discord/patsy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/python-discord/patsy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-discord%2Fpatsy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-discord%2Fpatsy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-discord%2Fpatsy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-discord%2Fpatsy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python-discord","download_url":"https://codeload.github.com/python-discord/patsy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-discord%2Fpatsy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28693331,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T11:01:27.039Z","status":"ssl_error","status_checked_at":"2026-01-23T11:00:26.909Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-01T21:27:24.778Z","updated_at":"2026-01-23T13:48:07.316Z","avatar_url":"https://github.com/python-discord.png","language":"Python","funding_links":["https://patreon.com/python_discord","https://www.redbubble.com/people/pythondiscord"],"categories":[],"sub_categories":[],"readme":"# Patsy\nOur beloved assistant, he only has a few simple tasks here at PyDis, using two halves of a coconut to simulate the hoof-beats of [King Arthur's](https://github.com/python-discord/king-arthur) non-existent horse is not one of them!\n\n![Image of Patsy from Monty Python](https://upload.wikimedia.org/wikipedia/en/thumb/6/6a/Patsy%2C_Monty_Python_and_the_Holy_Grail.jpeg/220px-Patsy%2C_Monty_Python_and_the_Holy_Grail.jpeg)\n\n## Purpose\n[Python](https://github.com/python-discord/bot) will send Patsy message data, including the content, and Patsy will transform and store that data in postgres.\n\nWith this data we plan to inspect what topics get asked about often in help channels, along with which ones go un-answered the most.\n\nTo be GDPR compliant, Python will also give an opt-out command, which will be stored by Patsy, and will be used to determine which messages to store, and which to drop.\n\nDeleted messages will always be deleted from the data set, regardless of opt-out status.\n\n## Env file\nPatsy requires the following environment variables to be present in a `.env` file, found at the project root.\n\nThe following environment variables is only **required in production**\n\n`DATABASE_URL` - An asyncpg connection string to the postgres database `postgresql+asyncpg://pypatsy:pypatsy@postgres:5432/pypatsy`.\n`SECRET_KEY` - A long random string, used to lock down endpoints with auth.\n\nThe following environment variables are only **required in dev**.\n\n`DEBUG` - `true` or `false`. Whether to enable debug mode in the service.\n\n## Running patsy locally\nOnce your `.env` file is setup, you can start this service by running `docker-compose up` in the root directory.\nYou can test it's running be navigating to `http://127.0.0.1:8000/ping`\n\n## Generating migration files\nWith the project running, open another terminal and run ` poetry run task revision \"Migration message here.\"`\n\nThis will create a migration file in the path `alembic_conf/versions`. Make sure to check it over, and fix any flake8 issues.\n\n## Committing\nBefore committing make sure to run `poetry install` and then `poetry run task precommit` to install the project dependencies and the pre-commit hook.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpython-discord%2Fpatsy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpython-discord%2Fpatsy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpython-discord%2Fpatsy/lists"}