<h1>CodingPoe <img src="https://psc2.cf2.poecdn.net/favicon.svg" height="35"></h1>
<p><em>A simple package that use Poe AI models</em></p>
</div>
<p align="center">
<a href="https://pypi.org/project/codingpoe/"><img src="https://img.shields.io/pypi/v/codingpoe"></a>
<img alt="Python Version" src="https://img.shields.io/badge/python-3.7+-blue.svg" alt="python">
<img alt="PyPI - Downloads" src="https://img.shields.io/pypi/dm/codingpoe">
<br>
</p>
## Table of Contents:
- [Table of Contents:](#table-of-contents)
- [Highlights:](#highlights)
- [Installation:](#installation)
- [Documentation:](#documentation)
- [Available Bots:](#available-bots)
- [How to get your Token:](#how-to-get-your-token)
- [Basic Usage:](#basic-usage)
- [Misc:](#misc)
- [Copyright:](#copyright)
- [Copyright Notice:](#copyright-notice)
## Highlights:
- Log in with your Quora's token
- Auto Proxy requests
- Get Chat Ids & Chat Codes of bot(s)
- Create new chat thread
- Send messages
- Stream bot responses
- Retrieve suggested replies
- Delete chat threads
- Clear conversation context
- Purge messages of 1 bot
- Purge all messages of user
- Create custom bot
- Edit custom bot
- Delete a custom bot
- Get available bots
- Support multi-chat threads
## Installation:
- First, install this library with the following command:
```sh
pip install codingpoe
```
- You can run an example of this library:
```py
from codingpoe import Poe
token = "TOKEN_HERE"
Poe.chat_with_bot(token)
```
## Documentation:
### Available Bots:
- Assistant (capybara)
- Claude-instant-100k (a2_100k)
- Claude-2-100k (a2_2)
- Claude-instant (a2)
- ChatGPT (chinchilla)
- ChatGPT-16k (agouti)
- GPT-4 (beaver)
- GPT-4-32k (vizcacha)
- Google-PaLM (acouchy)
- Llama-2-7b (llama_2_7b_chat)
- Llama-2-13b (llama_2_13b_chat)
- Llama-2-70b (llama_2_70b_chat)
### How to get your Token:
Sign in at https://www.quora.com/
F12 for Devtools (Right-click + Inspect)
- Chromium: Devtools > Application > Cookies > quora.com
- Firefox: Devtools > Storage > Cookies
- Safari: Devtools > Storage > Cookies
Copy the value of `m-b` cookie
### Basic Usage:
- Connecting to the API
```py
from codingpoe import PoeApi
client = PoeApi("TOKEN_HERE")
# Using Client with proxy (default is False)
client = PoeApi("TOKEN_HERE", proxy=True)
```
- Getting Chat Ids & Chat Codes
```py
# Get chat ids of all bots
client.get_chat_history()
# Output:
# ------------------ Chat History ------------------
# Chat ID | Chat Code | Bot Name
# --------------------------------------------------
# 59727831 | 2i58aywsckpnm0v7wyl | chinchilla
# 59727472 | 2i58bw1nfv0aq7eab6i | chinchilla
# 59726162 | 2i58ciex72dom7im83r | a2
# 59726106 | 2i58campfdh1yn9us8i | a2
# 59726052 | 2i58d5x8am0untzhaxp | a2
# 59724775 | 2i588127auu1k5ilri9 | capybara
# 59724472 | 2i588hu98sfob7dfifx | capybara
# 59724127 | 2i586nb5jwhhvtr8gk4 | a2
# 59722624 | 2i58qnkisefkly649ml | a2
# 59719138 | 2i58xtl3nftynxnsxxi | capybara
# 59667229 | 2i5e3a7vvpbvt4nrif8 | a2
# 59673297 | 2i5gzkx1x2wicy1tzwr | a2
# 59680790 | 2i5hperhw2irsy351gn | capybara
# --------------------------------------------------
print(client.get_chat_history())
# Output:
# {'chinchilla': [{'chatId': 59727831, 'chatCode': '2i58aywsckpnm0v7wyl', 'id': 'Q2hhdDo1OTcyNzgzMQ=='}, {'chatId': 59727472, 'chatCode': '2i58bw1nfv0aq7eab6i', 'id': 'Q2hhdDo1OTcyNzQ3Mg=='}], 'a2': [{'chatId': 59726162, 'chatCode': '2i58ciex72dom7im83r', 'id': 'Q2hhdDo1OTcyNjE2Mg=='}, {'chatId': 59726106, 'chatCode': '2i58campfdh1yn9us8i', 'id': 'Q2hhdDo1OTcyNjEwNg=='}, {'chatId': 59726052, 'chatCode': '2i58d5x8am0untzhaxp', 'id': 'Q2hhdDo1OTcyNjA1Mg=='}, {'chatId': 59724127, 'chatCode': '2i586nb5jwhhvtr8gk4', 'id': 'Q2hhdDo1OTcyNDEyNw=='}, {'chatId': 59722624, 'chatCode': '2i58qnkisefkly649ml', 'id': 'Q2hhdDo1OTcyMjYyNA=='}, {'chatId': 59667229, 'chatCode': '2i5e3a7vvpbvt4nrif8', 'id': 'Q2hhdDo1OTY2NzIyOQ=='}, {'chatId': 59673297, 'chatCode': '2i5gzkx1x2wicy1tzwr', 'id': 'Q2hhdDo1OTY3MzI5Nw=='}], 'capybara': [{'chatId': 59724775, 'chatCode': '2i588127auu1k5ilri9', 'id': 'Q2hhdDo1OTcyNDc3NQ=='}, {'chatId': 59724472, 'chatCode': '2i588hu98sfob7dfifx', 'id': 'Q2hhdDo1OTcyNDQ3Mg=='}, {'chatId': 59719138, 'chatCode': '2i58xtl3nftynxnsxxi', 'id': 'Q2hhdDo1OTcxOTEzOA=='}, {'chatId': 59680790, 'chatCode': '2i5hperhw2irsy351gn', 'id': 'Q2hhdDo1OTY4MDc5MA=='}]}
# Get chat ids of a bot
print(client.get_chat_history("capybara"))
# Output:
# {'capybara': [{'chatId': 59724775, 'chatCode': '2i588127auu1k5ilri9', 'id': 'Q2hhdDo1OTcyNDc3NQ=='}, {'chatId': 59724472, 'chatCode': '2i588hu98sfob7dfifx', 'id': 'Q2hhdDo1OTcyNDQ3Mg=='}, {'chatId': 59719138, 'chatCode': '2i58xtl3nftynxnsxxi', 'id': 'Q2hhdDo1OTcxOTEzOA=='}, {'chatId': 59680790, 'chatCode': '2i5hperhw2irsy351gn', 'id': 'Q2hhdDo1OTY4MDc5MA=='}]}
```
- Sending messages & Streaming responses
```py
bot = "a2"
message = "What is python?"
# Create new chat thread
# Streamed example:
for chunk in client.send_message(bot, message, suggest_replies=True):
print(chunk["response"], end="", flush=True)
print("\n")
# Non-streamed example:
for chunk in client.send_message(bot, message, suggest_replies=True):
pass
print(chunk["text"])
# Retrieve suggested replies
for reply in chunk["suggestedReplies"]:
print(reply)
# You can get chatCode and chatId of created thread to continue the conversation
chatCode = chunk["chatCode"]
chatId = chunk["chatId"]
# Send message to an existing chat thread
# 1. Using chatCode
for chunk in client.send_message(bot, message, chatCode="2i58ciex72dom7im83r", suggest_replies=True):
print(chunk["response"], end="", flush=True)
print("\n")
# 2. Using chatId
for chunk in client.send_message(bot, message, chatId=59726162, suggest_replies=True):
print(chunk["response"], end="", flush=True)
print("\n")
```
> **Note**
> Display names are the same as the codenames for custom bots, you can simply pass the bot's display name into `client.send_message(bot, message)`
- Deleting chat threads
```py
# Delete 1 chat
# Using chatCode
client.delete_chat(bot, chatCode="2i58ciex72dom7im83r")
# Using chatId
client.delete_chat(bot, chatID=59726162)
# Delete n chats
# Using chatCode
client.delete_chat(bot, chatCode=["LIST_OF_CHAT_CODES"])
# Using chatId
client.delete_chat(bot, chatId=["LIST_OF_CHAT_IDS"])
# Delete all chats of a bot
client.delete_chat(bot, del_all=True)
```
- Clearing conversation context
```py
# 1. Using chatCode
client.chat_break(bot, chatCode="2i58ciex72dom7im83r")
# 2. Using chatId
client.chat_break(bot, chatId=59726162)
```
- Purging messages of 1 bot
You can pass the number of messages to be deleted into `client.purge_conversation(bot, chatId, chatCode, count)` (the default is 50)
```py
# 1. Using chatCode
client.purge_conversation(bot, chatCode="2i58ciex72dom7im83r", count=10)
# 2. Using chatId
client.purge_conversation(bot, chatId=59726162, count=10)
```
- Purging all messages of user
```py
client.purge_all_conversations()
```
- Creating a new Bot
```py
client.create_bot("BOT_NAME", "PROMPT_HERE", base_model="a2")
```
- Editing a Bot
```py
client.edit_bot("(NEW)BOT_NAME", "PROMPT_HERE", base_model='chinchilla')
```
- Deleting a Bot
```py
client.delete_bot("BOT_NAME")
```
- Getting available Bots
```py
# Get a defined number of bots (default is 25)
client.get_available_bots(count=10)
# Get all available bots
client.get_available_bots(get_all=True)
```
### Misc:
- How to find chatCode manually?
Here is an example, the chatCode is 2i5bego6rzetfsevv5g
![](https://cdn.discordapp.com/attachments/957946068836950026/1142363043741843506/image.png)
## Copyright:
This program is licensed under the [GNU GPL v3](https://github.com/codingtuto/codingpoe/blob/main/LICENSE).
### Copyright Notice:
```
codingtuto/codingpoe: A simple API wrapper for poe.com using Httpx
Copyright (C) 2023
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
```
Raw data
{
"_id": null,
"home_page": "https://github.com/codingtuto/codingpoe",
"name": "codingpoe",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "python,poe,quora,chatgpt,claude,poe-api,api,codingteam",
"author": "Coding Team",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/ca/8e/81cb65e84a1c37fd3be3b8575fd25d81e2d4019bba9739429c6d8eecd208/codingpoe-1.1.0.tar.gz",
"platform": null,
"description": "<h1>CodingPoe <img src=\"https://psc2.cf2.poecdn.net/favicon.svg\" height=\"35\"></h1>\n\n<p><em>A simple package that use Poe AI models</em></p>\n</div>\n\n<p align=\"center\">\n<a href=\"https://pypi.org/project/codingpoe/\"><img src=\"https://img.shields.io/pypi/v/codingpoe\"></a>\n<img alt=\"Python Version\" src=\"https://img.shields.io/badge/python-3.7+-blue.svg\" alt=\"python\">\n<img alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dm/codingpoe\">\n<br>\n</p>\n\n## Table of Contents:\n- [Table of Contents:](#table-of-contents)\n- [Highlights:](#highlights)\n- [Installation:](#installation)\n- [Documentation:](#documentation)\n - [Available Bots:](#available-bots)\n - [How to get your Token:](#how-to-get-your-token)\n - [Basic Usage:](#basic-usage)\n - [Misc:](#misc)\n- [Copyright:](#copyright)\n - [Copyright Notice:](#copyright-notice)\n\n## Highlights:\n - Log in with your Quora's token\n - Auto Proxy requests\n - Get Chat Ids & Chat Codes of bot(s)\n - Create new chat thread\n - Send messages\n - Stream bot responses\n - Retrieve suggested replies\n - Delete chat threads\n - Clear conversation context\n - Purge messages of 1 bot\n - Purge all messages of user\n - Create custom bot\n - Edit custom bot\n - Delete a custom bot\n - Get available bots\n - Support multi-chat threads\n\n## Installation:\n- First, install this library with the following command:\n```sh\npip install codingpoe\n```\n- You can run an example of this library:\n```py\nfrom codingpoe import Poe\ntoken = \"TOKEN_HERE\"\nPoe.chat_with_bot(token)\n```\n\n## Documentation:\n### Available Bots:\n- Assistant (capybara)\n- Claude-instant-100k (a2_100k)\n- Claude-2-100k (a2_2)\n- Claude-instant (a2)\n- ChatGPT (chinchilla)\n- ChatGPT-16k (agouti)\n- GPT-4 (beaver)\n- GPT-4-32k (vizcacha)\n- Google-PaLM (acouchy)\n- Llama-2-7b (llama_2_7b_chat)\n- Llama-2-13b (llama_2_13b_chat)\n- Llama-2-70b (llama_2_70b_chat)\n\n### How to get your Token:\nSign in at https://www.quora.com/\n\nF12 for Devtools (Right-click + Inspect)\n- Chromium: Devtools > Application > Cookies > quora.com\n- Firefox: Devtools > Storage > Cookies\n- Safari: Devtools > Storage > Cookies\n\nCopy the value of `m-b` cookie\n### Basic Usage:\n- Connecting to the API\n```py\nfrom codingpoe import PoeApi\nclient = PoeApi(\"TOKEN_HERE\")\n\n# Using Client with proxy (default is False)\nclient = PoeApi(\"TOKEN_HERE\", proxy=True)\n```\n- Getting Chat Ids & Chat Codes\n```py\n# Get chat ids of all bots\nclient.get_chat_history()\n# Output:\n# ------------------ Chat History ------------------\n# Chat ID | Chat Code | Bot Name\n# --------------------------------------------------\n# 59727831 | 2i58aywsckpnm0v7wyl | chinchilla \n# 59727472 | 2i58bw1nfv0aq7eab6i | chinchilla \n# 59726162 | 2i58ciex72dom7im83r | a2\n# 59726106 | 2i58campfdh1yn9us8i | a2\n# 59726052 | 2i58d5x8am0untzhaxp | a2\n# 59724775 | 2i588127auu1k5ilri9 | capybara\n# 59724472 | 2i588hu98sfob7dfifx | capybara\n# 59724127 | 2i586nb5jwhhvtr8gk4 | a2\n# 59722624 | 2i58qnkisefkly649ml | a2\n# 59719138 | 2i58xtl3nftynxnsxxi | capybara\n# 59667229 | 2i5e3a7vvpbvt4nrif8 | a2\n# 59673297 | 2i5gzkx1x2wicy1tzwr | a2\n# 59680790 | 2i5hperhw2irsy351gn | capybara\n# --------------------------------------------------\n\nprint(client.get_chat_history())\n# Output:\n# {'chinchilla': [{'chatId': 59727831, 'chatCode': '2i58aywsckpnm0v7wyl', 'id': 'Q2hhdDo1OTcyNzgzMQ=='}, {'chatId': 59727472, 'chatCode': '2i58bw1nfv0aq7eab6i', 'id': 'Q2hhdDo1OTcyNzQ3Mg=='}], 'a2': [{'chatId': 59726162, 'chatCode': '2i58ciex72dom7im83r', 'id': 'Q2hhdDo1OTcyNjE2Mg=='}, {'chatId': 59726106, 'chatCode': '2i58campfdh1yn9us8i', 'id': 'Q2hhdDo1OTcyNjEwNg=='}, {'chatId': 59726052, 'chatCode': '2i58d5x8am0untzhaxp', 'id': 'Q2hhdDo1OTcyNjA1Mg=='}, {'chatId': 59724127, 'chatCode': '2i586nb5jwhhvtr8gk4', 'id': 'Q2hhdDo1OTcyNDEyNw=='}, {'chatId': 59722624, 'chatCode': '2i58qnkisefkly649ml', 'id': 'Q2hhdDo1OTcyMjYyNA=='}, {'chatId': 59667229, 'chatCode': '2i5e3a7vvpbvt4nrif8', 'id': 'Q2hhdDo1OTY2NzIyOQ=='}, {'chatId': 59673297, 'chatCode': '2i5gzkx1x2wicy1tzwr', 'id': 'Q2hhdDo1OTY3MzI5Nw=='}], 'capybara': [{'chatId': 59724775, 'chatCode': '2i588127auu1k5ilri9', 'id': 'Q2hhdDo1OTcyNDc3NQ=='}, {'chatId': 59724472, 'chatCode': '2i588hu98sfob7dfifx', 'id': 'Q2hhdDo1OTcyNDQ3Mg=='}, {'chatId': 59719138, 'chatCode': '2i58xtl3nftynxnsxxi', 'id': 'Q2hhdDo1OTcxOTEzOA=='}, {'chatId': 59680790, 'chatCode': '2i5hperhw2irsy351gn', 'id': 'Q2hhdDo1OTY4MDc5MA=='}]}\n\n# Get chat ids of a bot\nprint(client.get_chat_history(\"capybara\"))\n# Output:\n# {'capybara': [{'chatId': 59724775, 'chatCode': '2i588127auu1k5ilri9', 'id': 'Q2hhdDo1OTcyNDc3NQ=='}, {'chatId': 59724472, 'chatCode': '2i588hu98sfob7dfifx', 'id': 'Q2hhdDo1OTcyNDQ3Mg=='}, {'chatId': 59719138, 'chatCode': '2i58xtl3nftynxnsxxi', 'id': 'Q2hhdDo1OTcxOTEzOA=='}, {'chatId': 59680790, 'chatCode': '2i5hperhw2irsy351gn', 'id': 'Q2hhdDo1OTY4MDc5MA=='}]}\n```\n\n- Sending messages & Streaming responses \n```py\nbot = \"a2\"\nmessage = \"What is python?\"\n\n# Create new chat thread\n# Streamed example:\nfor chunk in client.send_message(bot, message, suggest_replies=True):\n print(chunk[\"response\"], end=\"\", flush=True)\nprint(\"\\n\")\n\n# Non-streamed example:\nfor chunk in client.send_message(bot, message, suggest_replies=True):\n pass\nprint(chunk[\"text\"])\n\n# Retrieve suggested replies\nfor reply in chunk[\"suggestedReplies\"]:\n print(reply)\n\n# You can get chatCode and chatId of created thread to continue the conversation\nchatCode = chunk[\"chatCode\"]\nchatId = chunk[\"chatId\"]\n\n# Send message to an existing chat thread\n# 1. Using chatCode\nfor chunk in client.send_message(bot, message, chatCode=\"2i58ciex72dom7im83r\", suggest_replies=True):\n print(chunk[\"response\"], end=\"\", flush=True)\nprint(\"\\n\")\n# 2. Using chatId\nfor chunk in client.send_message(bot, message, chatId=59726162, suggest_replies=True):\n print(chunk[\"response\"], end=\"\", flush=True)\nprint(\"\\n\")\n```\n> **Note**\n> Display names are the same as the codenames for custom bots, you can simply pass the bot's display name into `client.send_message(bot, message)`\n- Deleting chat threads\n```py\n# Delete 1 chat\n# Using chatCode\nclient.delete_chat(bot, chatCode=\"2i58ciex72dom7im83r\")\n# Using chatId\nclient.delete_chat(bot, chatID=59726162)\n\n# Delete n chats\n# Using chatCode\nclient.delete_chat(bot, chatCode=[\"LIST_OF_CHAT_CODES\"])\n# Using chatId\nclient.delete_chat(bot, chatId=[\"LIST_OF_CHAT_IDS\"])\n\n# Delete all chats of a bot\nclient.delete_chat(bot, del_all=True)\n```\n- Clearing conversation context\n```py\n# 1. Using chatCode\nclient.chat_break(bot, chatCode=\"2i58ciex72dom7im83r\")\n# 2. Using chatId\nclient.chat_break(bot, chatId=59726162)\n```\n- Purging messages of 1 bot\n \nYou can pass the number of messages to be deleted into `client.purge_conversation(bot, chatId, chatCode, count)` (the default is 50)\n \n```py\n# 1. Using chatCode\nclient.purge_conversation(bot, chatCode=\"2i58ciex72dom7im83r\", count=10)\n# 2. Using chatId\nclient.purge_conversation(bot, chatId=59726162, count=10)\n```\n- Purging all messages of user\n```py\nclient.purge_all_conversations()\n```\n- Creating a new Bot\n```py\nclient.create_bot(\"BOT_NAME\", \"PROMPT_HERE\", base_model=\"a2\")\n```\n- Editing a Bot\n```py\nclient.edit_bot(\"(NEW)BOT_NAME\", \"PROMPT_HERE\", base_model='chinchilla')\n```\n- Deleting a Bot\n```py\nclient.delete_bot(\"BOT_NAME\")\n```\n- Getting available Bots\n```py\n# Get a defined number of bots (default is 25)\nclient.get_available_bots(count=10)\n\n# Get all available bots\nclient.get_available_bots(get_all=True)\n```\n\n### Misc:\n- How to find chatCode manually?\n\nHere is an example, the chatCode is 2i5bego6rzetfsevv5g\n\n![](https://cdn.discordapp.com/attachments/957946068836950026/1142363043741843506/image.png)\n\n\n## Copyright:\nThis program is licensed under the [GNU GPL v3](https://github.com/codingtuto/codingpoe/blob/main/LICENSE).\n\n### Copyright Notice:\n```\ncodingtuto/codingpoe: A simple API wrapper for poe.com using Httpx\nCopyright (C) 2023\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <https://www.gnu.org/licenses/>.\n```\n",
"bugtrack_url": null,
"license": "",
"summary": "A simple package that use Poe AI models",
"version": "1.1.0",
"project_urls": {
"Homepage": "https://github.com/codingtuto/codingpoe"
},
"split_keywords": [
"python",
"poe",
"quora",
"chatgpt",
"claude",
"poe-api",
"api",
"codingteam"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "cc5320b648104846be5b4cb4703d2f0cd0e3ada06a42338c3bc85f75b9ed8005",
"md5": "1d6076c8eb682d0589300e0d9624b2d0",
"sha256": "0ddbf7240dd8aaa00487e35419665301c37d5978fb3ba941464e01751ff49a98"
},
"downloads": -1,
"filename": "codingpoe-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1d6076c8eb682d0589300e0d9624b2d0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 32384,
"upload_time": "2023-08-30T12:49:33",
"upload_time_iso_8601": "2023-08-30T12:49:33.995682Z",
"url": "https://files.pythonhosted.org/packages/cc/53/20b648104846be5b4cb4703d2f0cd0e3ada06a42338c3bc85f75b9ed8005/codingpoe-1.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ca8e81cb65e84a1c37fd3be3b8575fd25d81e2d4019bba9739429c6d8eecd208",
"md5": "86c30ace6b3419456c2ad90b687b20f4",
"sha256": "09f12605a419d375f1f76dd25ca40763a677760c81407587f9ed414d26eeb399"
},
"downloads": -1,
"filename": "codingpoe-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "86c30ace6b3419456c2ad90b687b20f4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 35434,
"upload_time": "2023-08-30T12:49:36",
"upload_time_iso_8601": "2023-08-30T12:49:36.471459Z",
"url": "https://files.pythonhosted.org/packages/ca/8e/81cb65e84a1c37fd3be3b8575fd25d81e2d4019bba9739429c6d8eecd208/codingpoe-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-30 12:49:36",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "codingtuto",
"github_project": "codingpoe",
"github_not_found": true,
"lcname": "codingpoe"
}