diff --git a/index.jinja2.html b/index.jinja2.html new file mode 100644 index 00000000..de5d78f7 --- /dev/null +++ b/index.jinja2.html @@ -0,0 +1,46 @@ + + + + +scraping reddit.com/r/rational recs + + + + + +

scraping reddit.com/r/rational/

+source code +
+ + + + diff --git a/nbs/mjc_003_nonllm.ipynb b/nbs/mjc_003_nonllm.ipynb index 4409604d..5b1409cb 100644 --- a/nbs/mjc_003_nonllm.ipynb +++ b/nbs/mjc_003_nonllm.ipynb @@ -176,6 +176,26 @@ "df_links.to_markdown('../outputs/links2.md')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'Series' object has no attribute 'to_html'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_2936525/1764501736.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf_links\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_html\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'../outputs/links2.html'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 6295\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_accessors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6296\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6297\u001b[0m ):\n\u001b[1;32m 6298\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6299\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'Series' object has no attribute 'to_html'" + ] + } + ], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/nbs/mjc_004_process.ipynb b/nbs/mjc_004_process.ipynb index 44157101..fae12501 100644 --- a/nbs/mjc_004_process.ipynb +++ b/nbs/mjc_004_process.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -27,7 +27,7 @@ "titles_md = defaultdict(list)\n", "\n", "\n", - "title_blocklist = ['patreon', 'here', 'link', 'this', 'delete', 'this one', 'vote', 'image', 'comic explanation', 'this link', 'this thread', 'redact', '(link)', 'this post', 'CLICK THIS LINK', \"here's\", 'wiki', 'report', 'source', 'the wiki']\n", + "title_blocklist = ['patreon', 'here', 'link', 'this', 'delete', 'this one', 'vote', 'image', 'comic explanation', 'this link', 'this thread', 'redact', '(link)', 'this post', 'CLICK THIS LINK', \"here's\", 'wiki', 'report', 'source', 'the wiki', 'reddit - dive into anything', 'top posts', 'a patreon campaign', 'table of contents', 'fanfiction.net', 'this video', 'here.']\n", " \n", "\n", "def remember_md_link_titles(markdown_text):\n", @@ -79,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -88,7 +88,7 @@ "45067" ] }, - "execution_count": 4, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -103,6 +103,8 @@ "from collections import defaultdict\n", "karma = defaultdict(int) # track score\n", "gossip = defaultdict(list) # track number and content of comments... FIXME should include subcomments?\n", + "gossip_threads = defaultdict(list)\n", + "dates = defaultdict(list)\n", "\n", "banned_suffixes = ['jpeg', 'png', 'jpg']\n", "\n", @@ -118,6 +120,8 @@ " for l in links:\n", " karma[l] += comment['score'] / len(links)\n", " gossip[l].append(comment['body'])\n", + " gossip_threads[l].append('https://reddit.com' + comment['permalink'])\n", + " dates[l].append(s['created_utc'])\n", " data += links\n", "\n", "len(data)" @@ -127,6 +131,15 @@ "cell_type": "code", "execution_count": 5, "metadata": {}, + "outputs": [], + "source": [ + "# data" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { @@ -134,7 +147,7 @@ "25797" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -145,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -204,7 +217,7 @@ "dtype: float64" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -216,7 +229,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -225,7 +238,7 @@ "(32085,)" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -237,27 +250,27 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "231 https://github.com/trambelus/UserSim\n", - "104 http://topwebfiction.com/vote.php?for=a-practi...\n", - "63 https://archiveofourown.org/works/11478249/cha...\n", - "61 https://www.fanfiction.net/s/5193644\n", - "60 https://www.fictionpress.com/s/2961893/1/Mothe...\n", - " ... \n", - "2 https://archiveofourown.org/works/22022296/cha...\n", - "2 http://craphound.com/down/\n", - "2 http://www.youngwizards.com/ErrantryWiki/index...\n", - "2 https://forums.sufficientvelocity.com/threads/...\n", - "2 http://knowyourmeme.com/memes/you-here-s-your-you\n", - "Length: 3382, dtype: object" + "63 https://archiveofourown.org/works/11478249/cha...\n", + "61 https://www.fanfiction.net/s/5193644\n", + "60 https://www.fictionpress.com/s/2961893/1/Mothe...\n", + "55 https://www.fanfiction.net/s/10360716/1/The-Me...\n", + "48 https://twigserial.wordpress.com/\n", + " ... \n", + "2 https://www.fimfiction.net/story/132779/onto-t...\n", + "2 https://archiveofourown.org/works/22022296/cha...\n", + "2 http://craphound.com/down/\n", + "2 http://www.youngwizards.com/ErrantryWiki/index...\n", + "2 https://forums.sufficientvelocity.com/threads/...\n", + "Length: 3129, dtype: object" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -268,29 +281,29 @@ " 'redact', 'pastebin', 'wikipedia', 'docs.google', 'discord','tvtropes.org', 'ask_wikibot', 'autowiki', 'banned',\n", " # pateron.com ?\n", " 'reddit.com/user/', 'xkcd', 'ebay', 'youtubot',\n", - "\n", - " \n", + " 'reddit.com/r/rational',\n", + " # 'sneakpeekbot', 'RemindMeBot', \n", + " # 'WikiSummarizerBot', 'bot/', 'Bot/',\n", + " 'knowyourmeme.com', 'UserSim',\n", + " 'vote.php',\n", " ]\n", "\n", + "\n", "allowlist = ['hfy']\n", "df_links = df_links[~df_links.index.str.contains('|'.join(blocklist), regex=True) | df_links.index.str.contains('|'.join(allowlist), regex=True)]\n", "df_links = df_links[df_links.index.str.startswith('http')]\n", "df_links = df_links[df_links > 1]\n", + "\n", + "# if it has reddit and bot in the title, it's probably a bot\n", + "df_links = df_links[~(df_links.index.str.contains('reddit', case=False) & df_links.index.str.contains('bot', case=False))]\n", + "\n", + "# QC\n", "pd.Series(df_links.index, index=df_links.values)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "TODO\n", - "- [ ] dedup\n", - "- [ ] convert to title" - ] - }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -299,13 +312,13 @@ "" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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9Sk/P9/7z6NGjVJ2draGDBmiv//97+rVq5eNkwGh4cEHH/T+88iRIzVq1Cjdcsst2rp1q8aNG2fjZOZyOp367LPPOlwvCPtxRsdP8fHx6tatW6cr6BsbG5WYmGjTVOEnLi5Ot912m6qrq5WYmKhz587pzJkzHbbhmATXxe/tlX4WEhMTO12kf+HCBZ0+fZpjE2Q333yz4uPjVV1dLYljEWhz5szRu+++qy1btmjQoEHe5Vfz+ygxMfGSPzcX18E/hI6fIiMjlZGRodLSUu8yj8ej0tJS5eTk2DhZeGltbdUXX3yhAQMGKCMjQz169OhwTPbv368jR45wTIJo6NChSkxM7PB9b25u1vbt273f95ycHJ05c0aVlZXebTZv3iyPx6Ps7OwunzmcHD16VKdOndKAAQMkcSwCxbIszZkzR++88442b96soUOHdlh/Nb+PcnJy9Omnn3YIz40bNyomJkapqald80BMZvfV0CZ46623rKioKKukpMSqqqqyHnvsMSsuLq7DFfQIrHnz5llbt261ampqrI8++sjKzc214uPjrePHj1uWZVmPP/64NXjwYGvz5s3Wzp07rZycHCsnJ8fmqa9/LS0t1u7du63du3dbkqzi4mJr9+7d1uHDhy3LsqwlS5ZYcXFx1j//+U9r37591uTJk62hQ4da33zzjXcfEyZMsH7wgx9Y27dvtz788ENr2LBh1kMPPWTXQ7puXelYtLS0WPPnz7fKy8utmpoaa9OmTdadd95pDRs2zDp79qx3HxwL/z3xxBNWbGystXXrVqu+vt57+/rrr73bfN/vowsXLlgjRoywxo8fb+3Zs8fasGGDddNNN1kLFy604yEZh9AJkN///vfW4MGDrcjISCsrK8v65JNP7B7JaNOmTbMGDBhgRUZGWgMHDrSmTZtmVVdXe9d/88031pNPPmn16dPH6t27tzVlyhSrvr7exonNsGXLFktSp1tBQYFlWd++xPzXv/61lZCQYEVFRVnjxo2z9u/f32Efp06dsh566CHrxhtvtGJiYqyZM2daLS0tNjya69uVjsXXX39tjR8/3rrpppusHj16WEOGDLFmz57d6X++OBb+u9QxkGStXLnSu83V/D46dOiQlZ+fb/Xq1cuKj4+35s2bZ50/f76LH42ZHJZlWV19FgkAAKArcI0OAAAwFqEDAACMRegAAABjEToAAMBYhA4AADAWoQMAAIxF6AAAAGMROgAAwFiEDgAAMBahAwAAjEXoAAAAYxE6AADAWP8PKuegfVrv7wEAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -320,11 +333,11 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "df_links.to_markdown('../outputs/links2.md')" + "# df_links.to_markdown('../outputs/links2.md')" ] }, { @@ -338,7 +351,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -348,31 +361,28 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ + "# #DEBUG clear\n", "# import shutil\n", "# shutil.rmtree(f_cache)" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# dedup using title\n", - "# TODO add comments\n", - "# df3 = df2.groupby('title').sum().sort_values('score', ascending=False)\n", - "# df3x\n", "\n", "from pathlib import Path\n", "from bs4 import BeautifulSoup\n", "import cloudscraper\n", "\n", "\n", - "\n", "session = cloudscraper.create_scraper()\n", "\n", "\n", @@ -412,18 +422,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "870c42623e0744d4ac8162db4d4d62aa", + "model_id": "e2d57613745940d6b8331f07a843dbe5", "version_major": 2, "version_minor": 0 }, "text/plain": [ - " 0%| | 0/3382 [00:00: Failed to resolve 'delphicserial.com' ([Errno -2] Name or service not known)\"))\n", + "failed to get title for http://delphicserial.com/2017/10/21/ch01/: HTTPConnectionPool(host='delphicserial.com', port=80): Max retries exceeded with url: /2017/10/21/ch01/ (Caused by NameResolutionError(\": Failed to resolve 'delphicserial.com' ([Errno -2] Name or service not known)\"))\n", "failed to get title for http://github.com/lizardsrock4: 404 Client Error: Not Found for url: https://github.com/lizardsrock4\n", + "failed to get title for https://np.reddit.com/r/OutOfTheLoop/comments/3fbrg3/is_there_a_reason_why_the_arm_is_always_missing/ctn5gbf/: 429 Client Error: Too Many Requests for url: https://np.reddit.com/r/OutOfTheLoop/comments/3fbrg3/is_there_a_reason_why_the_arm_is_always_missing/ctn5gbf/\n", "failed to get title for https://www.fictionpress.com/s/3198066/1/Fimbulwinter: 403 Client Error: Forbidden for url: https://www.fictionpress.com/s/3198066/1/Fimbulwinter\n", "failed to get title for https://www.fanfiction.net/s/10263221: 403 Client Error: Forbidden for url: https://www.fanfiction.net/s/10263221\n", + "failed to get title for https://np.reddit.com/r/noveltranslations/comments/3u1zuf/cn_coiling_dragon_book_21_chapter_44/: 429 Client Error: Too Many Requests for url: https://np.reddit.com/r/noveltranslations/comments/3u1zuf/cn_coiling_dragon_book_21_chapter_44/\n", "failed to get title for https://www.biorxiv.org/content/biorxiv/early/2016/05/26/055699.full.pdf: 'NoneType' object has no attribute 'text'\n", "failed to get title for http://webfictionguide.com/listings/game-by-god-sludge-reformation/: 410 Client Error: Gone for url: http://webfictionguide.com/listings/game-by-god-sludge-reformation/\n", - "failed to get title for http://www.epubsbook.com/2015/3975.html: HTTPConnectionPool(host='www.epubsbook.com', port=80): Max retries exceeded with url: /2015/3975.html (Caused by NameResolutionError(\": Failed to resolve 'www.epubsbook.com' ([Errno -2] Name or service not known)\"))\n", + "failed to get title for http://www.epubsbook.com/2015/3975.html: HTTPConnectionPool(host='www.epubsbook.com', port=80): Max retries exceeded with url: /2015/3975.html (Caused by NameResolutionError(\": Failed to resolve 'www.epubsbook.com' ([Errno -2] Name or service not known)\"))\n", "failed to get title for http://www.terminally-incoherent.com/blog/2011/07/08/perfect-imperfection-perfekcyjna-niedoskonalosc-by-jacek-dukaj/: HTTPConnectionPool(host='www.terminally-incoherent.com', port=80): Read timed out. (read timeout=5)\n", - "failed to get title for http://gregegan.customer.netspace.net.au/ORTHOGONAL/ORTHOGONAL.html: HTTPConnectionPool(host='gregegan.customer.netspace.net.au', port=80): Max retries exceeded with url: /ORTHOGONAL/ORTHOGONAL.html (Caused by ConnectTimeoutError(, 'Connection to gregegan.customer.netspace.net.au timed out. (connect timeout=5)'))\n" + "failed to get title for http://gregegan.customer.netspace.net.au/ORTHOGONAL/ORTHOGONAL.html: HTTPConnectionPool(host='gregegan.customer.netspace.net.au', port=80): Max retries exceeded with url: /ORTHOGONAL/ORTHOGONAL.html (Caused by ConnectTimeoutError(, 'Connection to gregegan.customer.netspace.net.au timed out. (connect timeout=5)'))\n" ] }, { @@ -470,48 +482,60 @@ " score\n", " comments\n", " num_comments\n", + " comment_urls\n", + " dates\n", " \n", " \n", " \n", " \n", " 0\n", - " https://github.com/trambelus/UserSim\n", - " GitHub - trambelus/UserSim: Here's what you so...\n", - " 149.162162\n", - " [Can't wait to get to the Great War ended.\\n\\n...\n", - " 231\n", - " \n", - " \n", - " 1\n", - " http://topwebfiction.com/vote.php?for=a-practi...\n", - " Vote for A Practical Guide to Evil on TopWebFi...\n", - " 257.333333\n", - " [[Vote for A Practical Guide to Evil on TopWeb...\n", - " 104\n", - " \n", - " \n", - " 2\n", " https://archiveofourown.org/works/11478249/cha...\n", " Worth the Candle\n", " 328.040476\n", " [>>interestingly blend ...\\n\\n>`[g]`enres\\n\\n>...\n", " 63\n", + " [https://reddit.com/r/rational/comments/1c4mxk...\n", + " [1713189611.0, 1503163699.0, 1506215679.0, 150...\n", " \n", " \n", - " 3\n", + " 1\n", " https://www.fanfiction.net/s/5193644\n", " Time Braid\n", " 116.619421\n", " [* [*Waves Arisen*](https://wertifloke.wordpre...\n", " 61\n", + " [https://reddit.com/r/rational/comments/11wjn0...\n", + " [1679320813.0, 1682949618.0, 1429816392.0, 143...\n", " \n", " \n", - " 4\n", + " 2\n", " https://www.fictionpress.com/s/2961893/1/Mothe...\n", " Mother of Learning\n", " 209.998729\n", " [And [Mother of Learning](https://www.fictionp...\n", " 60\n", + " [https://reddit.com/r/rational/comments/2br02d...\n", + " [1406342508.0, 1417735601.0, 1418670015.0, 141...\n", + " \n", + " \n", + " 3\n", + " https://www.fanfiction.net/s/10360716/1/The-Me...\n", + " The Metropolitan Man\n", + " 300.614797\n", + " [~ [*Death Note: L, Anonymity & Eluding Entrop...\n", + " 55\n", + " [https://reddit.com/r/rational/comments/134n9q...\n", + " [1682949618.0, 1687788016.0, 1400177222.0, 140...\n", + " \n", + " \n", + " 4\n", + " https://twigserial.wordpress.com/\n", + " Twig\n", + " 244.894859\n", + " [The protagonist of [Twig](https://twigserial....\n", + " 48\n", + " [https://reddit.com/r/rational/comments/17ucgu...\n", + " [1699887610.0, 1725890413.0, 1450408569.0, 147...\n", " \n", " \n", " ...\n", @@ -520,96 +544,134 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 3377\n", + " 3124\n", + " https://www.fimfiction.net/story/132779/onto-t...\n", + " Onto the Pony Planet\n", + " 0.666667\n", + " [So these aren't quite uplifty, for various re...\n", + " 2\n", + " [https://reddit.com/r/rational/comments/a4a9ys...\n", + " [1544271356.0, 1568646297.0]\n", + " \n", + " \n", + " 3125\n", " https://archiveofourown.org/works/22022296/cha...\n", " Blood Crest\n", " 16.333333\n", " [[Blood Crest](https://archiveofourown.org/wor...\n", " 2\n", + " [https://reddit.com/r/rational/comments/u6dueo...\n", + " [1650290410.0, 1651500009.0]\n", " \n", " \n", - " 3378\n", + " 3126\n", " http://craphound.com/down/\n", " link to the author's site, where CC-licensed d...\n", " 10.666667\n", " [[link to the author's site, where CC-licensed...\n", " 2\n", + " [https://reddit.com/r/rational/comments/23tdjs...\n", + " [1398298405.0, 1410439827.0]\n", " \n", " \n", - " 3379\n", + " 3127\n", " http://www.youngwizards.com/ErrantryWiki/index...\n", " Lone Power\n", " 5.833333\n", " [Alternate Character Interpretations are one t...\n", " 2\n", + " [https://reddit.com/r/rational/comments/3j2pty...\n", + " [1441022185.0, 1467990282.0]\n", " \n", " \n", - " 3380\n", + " 3128\n", " https://forums.sufficientvelocity.com/threads/...\n", " Suffer Not\n", " 3.857143\n", " [u/axiomsofdominion mentioned a character with...\n", " 2\n", - " \n", - " \n", - " 3381\n", - " http://knowyourmeme.com/memes/you-here-s-your-you\n", - " (You)\n", - " 0.545455\n", - " [I was dragged out to see [the newest *Star Tr...\n", - " 2\n", + " [https://reddit.com/r/rational/comments/n1cm3n...\n", + " [1619725874.0, 1628517619.0]\n", " \n", " \n", "\n", - "

3382 rows × 5 columns

\n", + "

3129 rows × 7 columns

\n", "" ], "text/plain": [ " url \\\n", - "0 https://github.com/trambelus/UserSim \n", - "1 http://topwebfiction.com/vote.php?for=a-practi... \n", - "2 https://archiveofourown.org/works/11478249/cha... \n", - "3 https://www.fanfiction.net/s/5193644 \n", - "4 https://www.fictionpress.com/s/2961893/1/Mothe... \n", + "0 https://archiveofourown.org/works/11478249/cha... \n", + "1 https://www.fanfiction.net/s/5193644 \n", + "2 https://www.fictionpress.com/s/2961893/1/Mothe... \n", + "3 https://www.fanfiction.net/s/10360716/1/The-Me... \n", + "4 https://twigserial.wordpress.com/ \n", "... ... \n", - "3377 https://archiveofourown.org/works/22022296/cha... \n", - "3378 http://craphound.com/down/ \n", - "3379 http://www.youngwizards.com/ErrantryWiki/index... \n", - "3380 https://forums.sufficientvelocity.com/threads/... \n", - "3381 http://knowyourmeme.com/memes/you-here-s-your-you \n", + "3124 https://www.fimfiction.net/story/132779/onto-t... \n", + "3125 https://archiveofourown.org/works/22022296/cha... \n", + "3126 http://craphound.com/down/ \n", + "3127 http://www.youngwizards.com/ErrantryWiki/index... \n", + "3128 https://forums.sufficientvelocity.com/threads/... \n", "\n", " title score \\\n", - "0 GitHub - trambelus/UserSim: Here's what you so... 149.162162 \n", - "1 Vote for A Practical Guide to Evil on TopWebFi... 257.333333 \n", - "2 Worth the Candle 328.040476 \n", - "3 Time Braid 116.619421 \n", - "4 Mother of Learning 209.998729 \n", + "0 Worth the Candle 328.040476 \n", + "1 Time Braid 116.619421 \n", + "2 Mother of Learning 209.998729 \n", + "3 The Metropolitan Man 300.614797 \n", + "4 Twig 244.894859 \n", "... ... ... \n", - "3377 Blood Crest 16.333333 \n", - "3378 link to the author's site, where CC-licensed d... 10.666667 \n", - "3379 Lone Power 5.833333 \n", - "3380 Suffer Not 3.857143 \n", - "3381 (You) 0.545455 \n", + "3124 Onto the Pony Planet 0.666667 \n", + "3125 Blood Crest 16.333333 \n", + "3126 link to the author's site, where CC-licensed d... 10.666667 \n", + "3127 Lone Power 5.833333 \n", + "3128 Suffer Not 3.857143 \n", "\n", - " comments num_comments \n", - "0 [Can't wait to get to the Great War ended.\\n\\n... 231 \n", - "1 [[Vote for A Practical Guide to Evil on TopWeb... 104 \n", - "2 [>>interestingly blend ...\\n\\n>`[g]`enres\\n\\n>... 63 \n", - "3 [* [*Waves Arisen*](https://wertifloke.wordpre... 61 \n", - "4 [And [Mother of Learning](https://www.fictionp... 60 \n", - "... ... ... \n", - "3377 [[Blood Crest](https://archiveofourown.org/wor... 2 \n", - "3378 [[link to the author's site, where CC-licensed... 2 \n", - "3379 [Alternate Character Interpretations are one t... 2 \n", - "3380 [u/axiomsofdominion mentioned a character with... 2 \n", - "3381 [I was dragged out to see [the newest *Star Tr... 2 \n", + " comments num_comments \\\n", + "0 [>>interestingly blend ...\\n\\n>`[g]`enres\\n\\n>... 63 \n", + "1 [* [*Waves Arisen*](https://wertifloke.wordpre... 61 \n", + "2 [And [Mother of Learning](https://www.fictionp... 60 \n", + "3 [~ [*Death Note: L, Anonymity & Eluding Entrop... 55 \n", + "4 [The protagonist of [Twig](https://twigserial.... 48 \n", + "... ... ... \n", + "3124 [So these aren't quite uplifty, for various re... 2 \n", + "3125 [[Blood Crest](https://archiveofourown.org/wor... 2 \n", + "3126 [[link to the author's site, where CC-licensed... 2 \n", + "3127 [Alternate Character Interpretations are one t... 2 \n", + "3128 [u/axiomsofdominion mentioned a character with... 2 \n", "\n", - "[3382 rows x 5 columns]" + " comment_urls \\\n", + "0 [https://reddit.com/r/rational/comments/1c4mxk... \n", + "1 [https://reddit.com/r/rational/comments/11wjn0... \n", + "2 [https://reddit.com/r/rational/comments/2br02d... \n", + "3 [https://reddit.com/r/rational/comments/134n9q... \n", + "4 [https://reddit.com/r/rational/comments/17ucgu... \n", + "... ... \n", + "3124 [https://reddit.com/r/rational/comments/a4a9ys... \n", + "3125 [https://reddit.com/r/rational/comments/u6dueo... \n", + "3126 [https://reddit.com/r/rational/comments/23tdjs... \n", + "3127 [https://reddit.com/r/rational/comments/3j2pty... \n", + "3128 [https://reddit.com/r/rational/comments/n1cm3n... \n", + "\n", + " dates \n", + "0 [1713189611.0, 1503163699.0, 1506215679.0, 150... \n", + "1 [1679320813.0, 1682949618.0, 1429816392.0, 143... \n", + "2 [1406342508.0, 1417735601.0, 1418670015.0, 141... \n", + "3 [1682949618.0, 1687788016.0, 1400177222.0, 140... \n", + "4 [1699887610.0, 1725890413.0, 1450408569.0, 147... \n", + "... ... \n", + "3124 [1544271356.0, 1568646297.0] \n", + "3125 [1650290410.0, 1651500009.0] \n", + "3126 [1398298405.0, 1410439827.0] \n", + "3127 [1441022185.0, 1467990282.0] \n", + "3128 [1619725874.0, 1628517619.0] \n", + "\n", + "[3129 rows x 7 columns]" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -625,8 +687,10 @@ " title = urls\n", " comments = gossip[urls]\n", " score = karma[urls]\n", + " comment_urls = gossip_threads[urls]\n", " num_comments = len(comments)\n", - " data2.append(dict(url=urls, title=title, score=score, comments=comments, num_comments=num_comments))\n", + " created_utc = dates[urls]\n", + " data2.append(dict(url=urls, title=title, score=score, comments=comments, num_comments=num_comments, comment_urls=comment_urls, dates=created_utc))\n", "\n", "df2 = pd.DataFrame(data2)\n", "df2" @@ -634,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -693,7 +757,7 @@ "Name: count, dtype: int64" ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -707,7 +771,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -735,6 +799,8 @@ " num_comments\n", " comments\n", " url\n", + " comment_urls\n", + " dates\n", " \n", " \n", " title\n", @@ -742,6 +808,8 @@ " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -751,41 +819,44 @@ " 22\n", " [I do have a subreddit set up for this over at...\n", " https://www.patreon.com/alexanderwales\n", + " [https://reddit.com/r/rational/comments/331re9...\n", + " [1429380255.0, 1432400450.0, 1436482846.0, 146...\n", " \n", " \n", " Worth the Candle\n", " 661.062143\n", " 108\n", " [>>interestingly blend ...\\n\\n>`[g]`enres\\n\\n>...\n", - " http://archiveofourown.org/works/11478249?view...\n", + " https://archiveofourown.org/works/11478249/cha...\n", + " [https://reddit.com/r/rational/comments/1c4mxk...\n", + " [1713189611.0, 1503163699.0, 1506215679.0, 150...\n", " \n", " \n", " Worm\n", " 414.596255\n", " 78\n", " [[Kitty Cat Kill Sat](https://www.royalroad.co...\n", - " https://parahumans.wordpress.com/\\nhttps://par...\n", - " \n", - " \n", - " Cordyceps\n", - " 361.148810\n", - " 45\n", - " [If you like that, be sure to read [CORDYCEPS]...\n", - " https://www.reddit.com/r/rational/comments/4c2...\n", + " https://parahumans.wordpress.com\\nhttps://para...\n", + " [https://reddit.com/r/rational/comments/16rsx5...\n", + " [1695650418.0, 1699887610.0, 1706540412.0, 171...\n", " \n", " \n", " Twig\n", " 346.983574\n", " 63\n", " [The protagonist of [Twig](https://twigserial....\n", - " https://twigserial.wordpress.com/2014/12/24/ta...\n", + " https://twigserial.wordpress.com/about/\\nhttps...\n", + " [https://reddit.com/r/rational/comments/17ucgu...\n", + " [1699887610.0, 1725890413.0, 1450408569.0, 147...\n", " \n", " \n", " With This Ring\n", " 329.593551\n", " 59\n", " [> puts out more chapters faster than any web ...\n", - " https://forum.questionablequesting.com/threads...\n", + " https://forums.sufficientvelocity.com/threads/...\n", + " [https://reddit.com/r/rational/comments/52bbjb...\n", + " [1473635989.0, 1481638770.0, 1514051962.0, 152...\n", " \n", " \n", " The Metropolitan Man\n", @@ -793,69 +864,80 @@ " 57\n", " [~ [*Death Note: L, Anonymity & Eluding Entrop...\n", " https://alexanderwales.com/the-metropolitan-ma...\n", + " [https://reddit.com/r/rational/comments/134n9q...\n", + " [1682949618.0, 1687788016.0, 1400177222.0, 140...\n", + " \n", + " \n", + " Cordyceps\n", + " 311.815476\n", + " 41\n", + " [If you like that, be sure to read [CORDYCEPS]...\n", + " http://archiveofourown.org/works/6178036/chapt...\n", + " [https://reddit.com/r/rational/comments/1eqehs...\n", + " [1723471212.0, 1504188940.0, 1504579227.0, 150...\n", " \n", " \n", " Mother of Learning\n", " 303.770050\n", " 83\n", " [And [Mother of Learning](https://www.fictionp...\n", - " https://www.fictionpress.com/s/2961893\\nhttps:...\n", - " \n", - " \n", - " Reddit - Dive into anything\n", - " 300.528777\n", - " 354\n", - " [**Here's a sneak peek of /r/slatestarcodex us...\n", - " https://www.reddit.com/r/rational/comments/32m...\n", + " https://www.royalroad.com/fiction/21220/mother...\n", + " [https://reddit.com/r/rational/comments/2br02d...\n", + " [1406342508.0, 1417735601.0, 1418670015.0, 141...\n", " \n", " \n", " Time Braid\n", " 280.345557\n", " 99\n", " [* [*Waves Arisen*](https://wertifloke.wordpre...\n", - " https://www.fanfiction.net/s/5193644/1/Time-Br...\n", + " https://www.fanfiction.net/s/5193644\\nhttps://...\n", + " [https://reddit.com/r/rational/comments/11wjn0...\n", + " [1679320813.0, 1682949618.0, 1429816392.0, 143...\n", " \n", " \n", " Unsong\n", " 268.748647\n", " 40\n", " [Hey all, welcome back! A few quick notes: fir...\n", - " http://unsongbook.com/\\nhttp://unsongbook.com/...\n", + " https://unsongbook.com/\\nhttp://unsongbook.com...\n", + " [https://reddit.com/r/rational/comments/4m0odi...\n", + " [1464778693.0, 1465166191.0, 1465595369.0, 148...\n", " \n", " \n", " Seventh Horcrux\n", " 267.237103\n", " 30\n", " [My favorite harry potter fan fics:\\n\\n- [Seve...\n", - " https://www.fanfiction.net/s/10677106/1/Sevent...\n", - " \n", - " \n", - " Vote for A Practical Guide to Evil on TopWebFiction!\n", - " 257.333333\n", - " 104\n", - " [[Vote for A Practical Guide to Evil on TopWeb...\n", - " http://topwebfiction.com/vote.php?for=a-practi...\n", + " https://m.fanfiction.net/s/10677106/1/Seventh-...\n", + " [https://reddit.com/r/rational/comments/11qai9...\n", + " [1678716009.0, 1681135215.0, 1436741473.0, 144...\n", " \n", " \n", " A Practical Guide to Evil\n", " 235.768723\n", " 48\n", " [[*Mother of Learning*](https://www.royalroad....\n", - " https://practicalguidetoevil.wordpress.com\\nht...\n", + " https://practicalguidetoevil.wordpress.com/sum...\n", + " [https://reddit.com/r/rational/comments/1adxac...\n", + " [1706540412.0, 1464188682.0, 1473635989.0, 148...\n", " \n", " \n", " Pale\n", " 205.378788\n", " 33\n", " [Wildbow's latest webserial, [Pale](https://pa...\n", - " https://palewebserial.wordpress.com/\\nhttps://...\n", + " https://palewebserial.wordpress.com/about/\\nht...\n", + " [https://reddit.com/r/rational/comments/111b60...\n", + " [1676300410.0, 1678114814.0, 1691416815.0, 169...\n", " \n", " \n", " Pact\n", " 197.108141\n", " 36\n", " [Let's talk about the horror genre. 'Supernatu...\n", - " https://pactwebserial.wordpress.com/2013/12/17...\n", + " https://www.mediamdpodcast.com/pact-audiobook-...\n", + " [https://reddit.com/r/rational/comments/4yjexh...\n", + " [1471619081.0, 1473635989.0, 1546640293.0, 155...\n", " \n", " \n", " Only Villains Do That\n", @@ -863,27 +945,35 @@ " 19\n", " [Hey! Sorry for the very-late reply. I'll try...\n", " https://www.royalroad.com/fiction/40182/only-v...\n", + " [https://reddit.com/r/rational/comments/13bqbg...\n", + " [1683554474.0, 1684764016.0, 1712584828.0, 172...\n", " \n", " \n", " The Waves Arisen\n", " 190.232117\n", " 49\n", " [* [*Waves Arisen*](https://wertifloke.wordpre...\n", - " https://www.mediafire.com/folder/487cxoa13guhn...\n", + " https://wertifloke.wordpress.com/about/\\nhttps...\n", + " [https://reddit.com/r/rational/comments/11wjn0...\n", + " [1679320813.0, 1680530414.0, 1681135215.0, 168...\n", " \n", " \n", " The Fall of Doc Future\n", " 189.239524\n", " 37\n", " [Stumbled on this again: If you haven't seen i...\n", - " https://docfuture.tumblr.com/post/82363551272/...\n", + " http://docfuture.tumblr.com/post/82363551272/f...\n", + " [https://reddit.com/r/rational/comments/2pn8xf...\n", + " [1418872070.0, 1423787328.0, 1431566469.0, 143...\n", " \n", " \n", " Moloch\n", " 188.208333\n", " 24\n", " [>I'm pretty sure one of us is telepathically ...\n", - " https://slatestarcodex.com/2014/07/30/meditati...\n", + " http://slatestarcodex.com/2014/07/30/meditatio...\n", + " [https://reddit.com/r/rational/comments/2oub3w...\n", + " [1418192928.0, 1420136565.0, 1421706703.0, 142...\n", " \n", " \n", " Marked for Death\n", @@ -891,6 +981,8 @@ " 47\n", " [[Marked for Death](https://forums.sufficientv...\n", " https://forums.sufficientvelocity.com/threads/...\n", + " [https://reddit.com/r/rational/comments/101em0...\n", + " [1672671609.0, 1681740016.0, 1686578416.0, 168...\n", " \n", " \n", " Purple Days\n", @@ -898,6 +990,8 @@ " 25\n", " [Highly recommend [Purple Days](https://forums...\n", " https://forums.spacebattles.com/threads/purple...\n", + " [https://reddit.com/r/rational/comments/11k144...\n", + " [1678114814.0, 1679320813.0, 1688392816.0, 169...\n", " \n", " \n", " Dungeon Keeper Ami\n", @@ -905,41 +999,35 @@ " 29\n", " [Fan fics only:\\n\\nDungeon Keeper/Sailor Moon:...\n", " https://forums.sufficientvelocity.com/threads/...\n", + " [https://reddit.com/r/rational/comments/12hjo5...\n", + " [1681135215.0, 1685973616.0, 1474749889.0, 148...\n", " \n", " \n", " Delve\n", " 161.627273\n", " 28\n", " [## Good RoyalRoad (forgot to add this list wh...\n", - " https://www.royalroad.com/fiction/25225/delve/...\n", - " \n", - " \n", - " To the Stars\n", - " 156.662500\n", - " 27\n", - " [In the unusual but excellent category, I have...\n", - " https://archiveofourown.org/works/777002/chapt...\n", + " https://www.royalroad.com/fiction/25225/delve\\...\n", + " [https://reddit.com/r/rational/comments/1bt4gk...\n", + " [1711980017.0, 1711980017.0, 1718028015.0, 172...\n", " \n", " \n", " Sanitize\n", " 153.624272\n", " 31\n", " [[Sanitize](https://www.fanfiction.net/s/12431...\n", - " https://m.fanfiction.net/s/12431866/1/Sanitize...\n", + " https://archiveofourown.org/works/20721824/\\nh...\n", + " [https://reddit.com/r/rational/comments/123nq9...\n", + " [1679925615.0, 1687183218.0, 1692021625.0, 170...\n", " \n", " \n", " Fine Structure\n", " 151.857429\n", " 40\n", " [Join us at /r/qntm! Spoilers!\\n\\nAlso, [*Fine...\n", - " http://qntm.org/structure\\nhttp://qntm.org/ra\\...\n", - " \n", - " \n", - " GitHub - trambelus/UserSim: Here's what you sound like...\n", - " 149.162162\n", - " 231\n", - " [Can't wait to get to the Great War ended.\\n\\n...\n", - " https://github.com/trambelus/UserSim\n", + " http://qntm.org/ra\\nhttp://qntm.org/structure\\...\n", + " [https://reddit.com/r/rational/comments/1rykc1...\n", + " [1386036340.0, 1402010390.0, 1418670015.0, 141...\n", " \n", " \n", " Ar'Kendrithyst\n", @@ -947,6 +1035,8 @@ " 30\n", " [Have you read [Ar'Kendrythist](https://www.ro...\n", " https://www.royalroad.com/fiction/26727/arkend...\n", + " [https://reddit.com/r/rational/comments/101em0...\n", + " [1672671609.0, 1678114814.0, 1681740016.0, 168...\n", " \n", " \n", " Branches on the Tree of Time\n", @@ -954,6 +1044,8 @@ " 28\n", " [I [already tried my hand at Terminator](https...\n", " https://www.fanfiction.net/s/9658524/1/Branche...\n", + " [https://reddit.com/r/rational/comments/1tftsf...\n", + " [1387683947.0, 1389822389.0, 1409033440.0, 142...\n", " \n", " \n", " Harry Potter and the Natural 20\n", @@ -961,20 +1053,62 @@ " 42\n", " [My favorite harry potter fan fics:\\n\\n- [Seve...\n", " https://www.fanfiction.net/s/8096183/1/Harry-P...\n", + " [https://reddit.com/r/rational/comments/11qai9...\n", + " [1678716009.0, 1403215249.0, 1406342508.0, 141...\n", " \n", " \n", " Lord of the Mysteries\n", " 140.916667\n", " 20\n", " [[Lord of the Mysteries](https://www.wuxiaworl...\n", - " https://boxnovel.com/novel/lord-of-the-mysteri...\n", + " https://www.webnovel.com/book/1102273300623450...\n", + " [https://reddit.com/r/rational/comments/dpqyh0...\n", + " [1572543414.0, 1572900976.0, 1574694295.0, 157...\n", " \n", " \n", " The Dark Wizard of Donkerk\n", " 140.219697\n", " 24\n", " [Hey everyone, based on some listener requests...\n", - " http://www.alexanderwales.com/darkWizardNaNo20...\n", + " http://alexanderwales.com/darkWizardNaNo2016.h...\n", + " [https://reddit.com/r/rational/comments/6cclkp...\n", + " [1495312712.0, 1497765557.0, 1525938401.0, 152...\n", + " \n", + " \n", + " The Fifth Defiance\n", + " 136.750000\n", + " 12\n", + " [[The Fifth Defiance](https://thefifthdefiance...\n", + " https://thefifthdefiance.com/about/\\nhttps://t...\n", + " [https://reddit.com/r/rational/comments/111b60...\n", + " [1676300410.0, 1544022361.0, 1567245084.0, 158...\n", + " \n", + " \n", + " Demonology and the Tri-Phasic Model of Trauma: An Integrative Approach\n", + " 135.342857\n", + " 12\n", + " [`•` [*Let Her In 2*](https://www.fanfiction.n...\n", + " https://archiveofourown.org/works/20177950/cha...\n", + " [https://reddit.com/r/rational/comments/17ucgu...\n", + " [1699887610.0, 1574694295.0, 1575299088.0, 157...\n", + " \n", + " \n", + " A Young Woman's Political Record\n", + " 133.492250\n", + " 31\n", + " [Fan fics only:\\n\\nDungeon Keeper/Sailor Moon:...\n", + " https://forums.spacebattles.com/threads/a-youn...\n", + " [https://reddit.com/r/rational/comments/12hjo5...\n", + " [1681135215.0, 1691416815.0, 1704726013.0, 171...\n", + " \n", + " \n", + " Luminosity\n", + " 132.816075\n", + " 33\n", + " [I think I'd really only consider [*Luminosity...\n", + " https://luminous.elcenia.com/story.shtml\\nhttp...\n", + " [https://reddit.com/r/rational/comments/28l8v0...\n", + " [1403215249.0, 1409033440.0, 1436927069.0, 145...\n", " \n", " \n", "\n", @@ -986,16 +1120,14 @@ "a Patreon campaign 880.000000 22 \n", "Worth the Candle 661.062143 108 \n", "Worm 414.596255 78 \n", - "Cordyceps 361.148810 45 \n", "Twig 346.983574 63 \n", "With This Ring 329.593551 59 \n", "The Metropolitan Man 319.948130 57 \n", + "Cordyceps 311.815476 41 \n", "Mother of Learning 303.770050 83 \n", - "Reddit - Dive into anything 300.528777 354 \n", "Time Braid 280.345557 99 \n", "Unsong 268.748647 40 \n", "Seventh Horcrux 267.237103 30 \n", - "Vote for A Practical Guide to Evil on TopWebFic... 257.333333 104 \n", "A Practical Guide to Evil 235.768723 48 \n", "Pale 205.378788 33 \n", "Pact 197.108141 36 \n", @@ -1007,31 +1139,31 @@ "Purple Days 171.386905 25 \n", "Dungeon Keeper Ami 161.841919 29 \n", "Delve 161.627273 28 \n", - "To the Stars 156.662500 27 \n", "Sanitize 153.624272 31 \n", "Fine Structure 151.857429 40 \n", - "GitHub - trambelus/UserSim: Here's what you sou... 149.162162 231 \n", "Ar'Kendrithyst 148.280556 30 \n", "Branches on the Tree of Time 147.401810 28 \n", "Harry Potter and the Natural 20 143.053345 42 \n", "Lord of the Mysteries 140.916667 20 \n", "The Dark Wizard of Donkerk 140.219697 24 \n", + "The Fifth Defiance 136.750000 12 \n", + "Demonology and the Tri-Phasic Model of Trauma: ... 135.342857 12 \n", + "A Young Woman's Political Record 133.492250 31 \n", + "Luminosity 132.816075 33 \n", "\n", " comments \\\n", "title \n", "a Patreon campaign [I do have a subreddit set up for this over at... \n", "Worth the Candle [>>interestingly blend ...\\n\\n>`[g]`enres\\n\\n>... \n", "Worm [[Kitty Cat Kill Sat](https://www.royalroad.co... \n", - "Cordyceps [If you like that, be sure to read [CORDYCEPS]... \n", "Twig [The protagonist of [Twig](https://twigserial.... \n", "With This Ring [> puts out more chapters faster than any web ... \n", "The Metropolitan Man [~ [*Death Note: L, Anonymity & Eluding Entrop... \n", + "Cordyceps [If you like that, be sure to read [CORDYCEPS]... \n", "Mother of Learning [And [Mother of Learning](https://www.fictionp... \n", - "Reddit - Dive into anything [**Here's a sneak peek of /r/slatestarcodex us... \n", "Time Braid [* [*Waves Arisen*](https://wertifloke.wordpre... \n", "Unsong [Hey all, welcome back! A few quick notes: fir... \n", "Seventh Horcrux [My favorite harry potter fan fics:\\n\\n- [Seve... \n", - "Vote for A Practical Guide to Evil on TopWebFic... [[Vote for A Practical Guide to Evil on TopWeb... \n", "A Practical Guide to Evil [[*Mother of Learning*](https://www.royalroad.... \n", "Pale [Wildbow's latest webserial, [Pale](https://pa... \n", "Pact [Let's talk about the horror genre. 'Supernatu... \n", @@ -1043,54 +1175,128 @@ "Purple Days [Highly recommend [Purple Days](https://forums... \n", "Dungeon Keeper Ami [Fan fics only:\\n\\nDungeon Keeper/Sailor Moon:... \n", "Delve [## Good RoyalRoad (forgot to add this list wh... \n", - "To the Stars [In the unusual but excellent category, I have... \n", "Sanitize [[Sanitize](https://www.fanfiction.net/s/12431... \n", "Fine Structure [Join us at /r/qntm! Spoilers!\\n\\nAlso, [*Fine... \n", - "GitHub - trambelus/UserSim: Here's what you sou... [Can't wait to get to the Great War ended.\\n\\n... \n", "Ar'Kendrithyst [Have you read [Ar'Kendrythist](https://www.ro... \n", "Branches on the Tree of Time [I [already tried my hand at Terminator](https... \n", "Harry Potter and the Natural 20 [My favorite harry potter fan fics:\\n\\n- [Seve... \n", "Lord of the Mysteries [[Lord of the Mysteries](https://www.wuxiaworl... \n", "The Dark Wizard of Donkerk [Hey everyone, based on some listener requests... \n", + "The Fifth Defiance [[The Fifth Defiance](https://thefifthdefiance... \n", + "Demonology and the Tri-Phasic Model of Trauma: ... [`•` [*Let Her In 2*](https://www.fanfiction.n... \n", + "A Young Woman's Political Record [Fan fics only:\\n\\nDungeon Keeper/Sailor Moon:... \n", + "Luminosity [I think I'd really only consider [*Luminosity... \n", "\n", - " url \n", + " url \\\n", + "title \n", + "a Patreon campaign https://www.patreon.com/alexanderwales \n", + "Worth the Candle https://archiveofourown.org/works/11478249/cha... \n", + "Worm https://parahumans.wordpress.com\\nhttps://para... \n", + "Twig https://twigserial.wordpress.com/about/\\nhttps... \n", + "With This Ring https://forums.sufficientvelocity.com/threads/... \n", + "The Metropolitan Man https://alexanderwales.com/the-metropolitan-ma... \n", + "Cordyceps http://archiveofourown.org/works/6178036/chapt... \n", + "Mother of Learning https://www.royalroad.com/fiction/21220/mother... \n", + "Time Braid https://www.fanfiction.net/s/5193644\\nhttps://... \n", + "Unsong https://unsongbook.com/\\nhttp://unsongbook.com... \n", + "Seventh Horcrux https://m.fanfiction.net/s/10677106/1/Seventh-... \n", + "A Practical Guide to Evil https://practicalguidetoevil.wordpress.com/sum... \n", + "Pale https://palewebserial.wordpress.com/about/\\nht... \n", + "Pact https://www.mediamdpodcast.com/pact-audiobook-... \n", + "Only Villains Do That https://www.royalroad.com/fiction/40182/only-v... \n", + "The Waves Arisen https://wertifloke.wordpress.com/about/\\nhttps... \n", + "The Fall of Doc Future http://docfuture.tumblr.com/post/82363551272/f... \n", + "Moloch http://slatestarcodex.com/2014/07/30/meditatio... \n", + "Marked for Death https://forums.sufficientvelocity.com/threads/... \n", + "Purple Days https://forums.spacebattles.com/threads/purple... \n", + "Dungeon Keeper Ami https://forums.sufficientvelocity.com/threads/... \n", + "Delve https://www.royalroad.com/fiction/25225/delve\\... \n", + "Sanitize https://archiveofourown.org/works/20721824/\\nh... \n", + "Fine Structure http://qntm.org/ra\\nhttp://qntm.org/structure\\... \n", + "Ar'Kendrithyst https://www.royalroad.com/fiction/26727/arkend... \n", + "Branches on the Tree of Time https://www.fanfiction.net/s/9658524/1/Branche... \n", + "Harry Potter and the Natural 20 https://www.fanfiction.net/s/8096183/1/Harry-P... \n", + "Lord of the Mysteries https://www.webnovel.com/book/1102273300623450... \n", + "The Dark Wizard of Donkerk http://alexanderwales.com/darkWizardNaNo2016.h... \n", + "The Fifth Defiance https://thefifthdefiance.com/about/\\nhttps://t... \n", + "Demonology and the Tri-Phasic Model of Trauma: ... https://archiveofourown.org/works/20177950/cha... \n", + "A Young Woman's Political Record https://forums.spacebattles.com/threads/a-youn... \n", + "Luminosity https://luminous.elcenia.com/story.shtml\\nhttp... \n", + "\n", + " comment_urls \\\n", + "title \n", + "a Patreon campaign [https://reddit.com/r/rational/comments/331re9... \n", + "Worth the Candle [https://reddit.com/r/rational/comments/1c4mxk... \n", + "Worm [https://reddit.com/r/rational/comments/16rsx5... \n", + "Twig [https://reddit.com/r/rational/comments/17ucgu... \n", + "With This Ring [https://reddit.com/r/rational/comments/52bbjb... \n", + "The Metropolitan Man [https://reddit.com/r/rational/comments/134n9q... \n", + "Cordyceps [https://reddit.com/r/rational/comments/1eqehs... \n", + "Mother of Learning [https://reddit.com/r/rational/comments/2br02d... \n", + "Time Braid [https://reddit.com/r/rational/comments/11wjn0... \n", + "Unsong [https://reddit.com/r/rational/comments/4m0odi... \n", + "Seventh Horcrux [https://reddit.com/r/rational/comments/11qai9... \n", + "A Practical Guide to Evil [https://reddit.com/r/rational/comments/1adxac... \n", + "Pale [https://reddit.com/r/rational/comments/111b60... \n", + "Pact [https://reddit.com/r/rational/comments/4yjexh... \n", + "Only Villains Do That [https://reddit.com/r/rational/comments/13bqbg... \n", + "The Waves Arisen [https://reddit.com/r/rational/comments/11wjn0... \n", + "The Fall of Doc Future [https://reddit.com/r/rational/comments/2pn8xf... \n", + "Moloch [https://reddit.com/r/rational/comments/2oub3w... \n", + "Marked for Death [https://reddit.com/r/rational/comments/101em0... \n", + "Purple Days [https://reddit.com/r/rational/comments/11k144... \n", + "Dungeon Keeper Ami [https://reddit.com/r/rational/comments/12hjo5... \n", + "Delve [https://reddit.com/r/rational/comments/1bt4gk... \n", + "Sanitize [https://reddit.com/r/rational/comments/123nq9... \n", + "Fine Structure [https://reddit.com/r/rational/comments/1rykc1... \n", + "Ar'Kendrithyst [https://reddit.com/r/rational/comments/101em0... \n", + "Branches on the Tree of Time [https://reddit.com/r/rational/comments/1tftsf... \n", + "Harry Potter and the Natural 20 [https://reddit.com/r/rational/comments/11qai9... \n", + "Lord of the Mysteries [https://reddit.com/r/rational/comments/dpqyh0... \n", + "The Dark Wizard of Donkerk [https://reddit.com/r/rational/comments/6cclkp... \n", + "The Fifth Defiance [https://reddit.com/r/rational/comments/111b60... \n", + "Demonology and the Tri-Phasic Model of Trauma: ... [https://reddit.com/r/rational/comments/17ucgu... \n", + "A Young Woman's Political Record [https://reddit.com/r/rational/comments/12hjo5... \n", + "Luminosity [https://reddit.com/r/rational/comments/28l8v0... \n", + "\n", + " dates \n", "title \n", - "a Patreon campaign https://www.patreon.com/alexanderwales \n", - "Worth the Candle http://archiveofourown.org/works/11478249?view... \n", - "Worm https://parahumans.wordpress.com/\\nhttps://par... \n", - "Cordyceps https://www.reddit.com/r/rational/comments/4c2... \n", - "Twig https://twigserial.wordpress.com/2014/12/24/ta... \n", - "With This Ring https://forum.questionablequesting.com/threads... \n", - "The Metropolitan Man https://alexanderwales.com/the-metropolitan-ma... \n", - "Mother of Learning https://www.fictionpress.com/s/2961893\\nhttps:... \n", - "Reddit - Dive into anything https://www.reddit.com/r/rational/comments/32m... \n", - "Time Braid https://www.fanfiction.net/s/5193644/1/Time-Br... \n", - "Unsong http://unsongbook.com/\\nhttp://unsongbook.com/... \n", - "Seventh Horcrux https://www.fanfiction.net/s/10677106/1/Sevent... \n", - "Vote for A Practical Guide to Evil on TopWebFic... http://topwebfiction.com/vote.php?for=a-practi... \n", - "A Practical Guide to Evil https://practicalguidetoevil.wordpress.com\\nht... \n", - "Pale https://palewebserial.wordpress.com/\\nhttps://... \n", - "Pact https://pactwebserial.wordpress.com/2013/12/17... \n", - "Only Villains Do That https://www.royalroad.com/fiction/40182/only-v... \n", - "The Waves Arisen https://www.mediafire.com/folder/487cxoa13guhn... \n", - "The Fall of Doc Future https://docfuture.tumblr.com/post/82363551272/... \n", - "Moloch https://slatestarcodex.com/2014/07/30/meditati... \n", - "Marked for Death https://forums.sufficientvelocity.com/threads/... \n", - "Purple Days https://forums.spacebattles.com/threads/purple... \n", - "Dungeon Keeper Ami https://forums.sufficientvelocity.com/threads/... \n", - "Delve https://www.royalroad.com/fiction/25225/delve/... \n", - "To the Stars https://archiveofourown.org/works/777002/chapt... \n", - "Sanitize https://m.fanfiction.net/s/12431866/1/Sanitize... \n", - "Fine Structure http://qntm.org/structure\\nhttp://qntm.org/ra\\... \n", - "GitHub - trambelus/UserSim: Here's what you sou... https://github.com/trambelus/UserSim \n", - "Ar'Kendrithyst https://www.royalroad.com/fiction/26727/arkend... \n", - "Branches on the Tree of Time https://www.fanfiction.net/s/9658524/1/Branche... \n", - "Harry Potter and the Natural 20 https://www.fanfiction.net/s/8096183/1/Harry-P... \n", - "Lord of the Mysteries https://boxnovel.com/novel/lord-of-the-mysteri... \n", - "The Dark Wizard of Donkerk http://www.alexanderwales.com/darkWizardNaNo20... " + "a Patreon campaign [1429380255.0, 1432400450.0, 1436482846.0, 146... \n", + "Worth the Candle [1713189611.0, 1503163699.0, 1506215679.0, 150... \n", + "Worm [1695650418.0, 1699887610.0, 1706540412.0, 171... \n", + "Twig [1699887610.0, 1725890413.0, 1450408569.0, 147... \n", + "With This Ring [1473635989.0, 1481638770.0, 1514051962.0, 152... \n", + "The Metropolitan Man [1682949618.0, 1687788016.0, 1400177222.0, 140... \n", + "Cordyceps [1723471212.0, 1504188940.0, 1504579227.0, 150... \n", + "Mother of Learning [1406342508.0, 1417735601.0, 1418670015.0, 141... \n", + "Time Braid [1679320813.0, 1682949618.0, 1429816392.0, 143... \n", + "Unsong [1464778693.0, 1465166191.0, 1465595369.0, 148... \n", + "Seventh Horcrux [1678716009.0, 1681135215.0, 1436741473.0, 144... \n", + "A Practical Guide to Evil [1706540412.0, 1464188682.0, 1473635989.0, 148... \n", + "Pale [1676300410.0, 1678114814.0, 1691416815.0, 169... \n", + "Pact [1471619081.0, 1473635989.0, 1546640293.0, 155... \n", + "Only Villains Do That [1683554474.0, 1684764016.0, 1712584828.0, 172... \n", + "The Waves Arisen [1679320813.0, 1680530414.0, 1681135215.0, 168... \n", + "The Fall of Doc Future [1418872070.0, 1423787328.0, 1431566469.0, 143... \n", + "Moloch [1418192928.0, 1420136565.0, 1421706703.0, 142... \n", + "Marked for Death [1672671609.0, 1681740016.0, 1686578416.0, 168... \n", + "Purple Days [1678114814.0, 1679320813.0, 1688392816.0, 169... \n", + "Dungeon Keeper Ami [1681135215.0, 1685973616.0, 1474749889.0, 148... \n", + "Delve [1711980017.0, 1711980017.0, 1718028015.0, 172... \n", + "Sanitize [1679925615.0, 1687183218.0, 1692021625.0, 170... \n", + "Fine Structure [1386036340.0, 1402010390.0, 1418670015.0, 141... \n", + "Ar'Kendrithyst [1672671609.0, 1678114814.0, 1681740016.0, 168... \n", + "Branches on the Tree of Time [1387683947.0, 1389822389.0, 1409033440.0, 142... \n", + "Harry Potter and the Natural 20 [1678716009.0, 1403215249.0, 1406342508.0, 141... \n", + "Lord of the Mysteries [1572543414.0, 1572900976.0, 1574694295.0, 157... \n", + "The Dark Wizard of Donkerk [1495312712.0, 1497765557.0, 1525938401.0, 152... \n", + "The Fifth Defiance [1676300410.0, 1544022361.0, 1567245084.0, 158... \n", + "Demonology and the Tri-Phasic Model of Trauma: ... [1699887610.0, 1574694295.0, 1575299088.0, 157... \n", + "A Young Woman's Political Record [1681135215.0, 1691416815.0, 1704726013.0, 171... \n", + "Luminosity [1403215249.0, 1409033440.0, 1436927069.0, 145... " ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -1104,23 +1310,23 @@ "def chain_lists(x:list[list[str]]):\n", " return [item for sublist in x for item in sublist]\n", "\n", - "df3 = df2.groupby('title').agg({'score': 'sum', 'num_comments': 'sum', 'comments': chain_lists, 'url': join_uniq\n", + "df3 = df2.groupby('title').agg({'score': 'sum', 'num_comments': 'sum', 'comments': chain_lists, 'url': join_uniq, 'comment_urls': chain_lists, 'dates': chain_lists\n", " }).sort_values('score', ascending=False)\n", "df3.head(33)" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "((3382, 5), (2908, 4))" + "((3129, 7), (2743, 6))" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1129,6 +1335,123 @@ "df2.shape, df3.shape" ] }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# df3.to_markdown('../outputs/links3.md')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Export to html" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'[{\"title\": \"title\", \"visible\": true, \"searchable\": true}, {\"title\": \"score\", \"visible\": true, \"searchable\": true}, {\"title\": \"num_comments\", \"visible\": true, \"searchable\": true}, {\"title\": \"comments\", \"visible\": false, \"searchable\": false}, {\"title\": \"url\", \"visible\": true, \"searchable\": true}, {\"title\": \"comment_urls\", \"visible\": false, \"searchable\": false}, {\"title\": \"dates\", \"visible\": true, \"searchable\": true}]'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import jinja2\n", + "environment = jinja2.Environment()\n", + "template = open('../index.jinja2.html').read()\n", + "template = environment.from_string(template)\n", + "d = (df3\n", + " .reset_index()\n", + " .sort_values('score', ascending=False)\n", + " )\n", + "\n", + "def url2a(url):\n", + " text = url\n", + " if 'reddit.com/r/rational' in url:\n", + " text = url.split('/')[-2]\n", + " # text = url.replace('https://reddit.com/r/rational/comments/', '')\n", + "\n", + " return f'{text}'\n", + "\n", + "def urls2a(urls, sep='
'):\n", + " if isinstance(urls, str):\n", + " urls = urls.split('\\n')\n", + " \n", + " return sep.join(url2a(u) for u in urls)\n", + "d['url'] = d['url'].apply(urls2a)\n", + "d['score'] = d['score'].round(2)\n", + "d['comment_urls'] = d['comment_urls'].apply(lambda s:urls2a(s, sep=' '))\n", + "\n", + "# TODO comment md to html... if I want to keep them\n", + "\n", + "def get_first_date(x):\n", + " return pd.to_datetime(x, unit='s').min().strftime('%Y-%m-%d %H:%M:%S')\n", + "d['dates'] = d['dates'].apply(get_first_date)\n", + "\n", + "data = d.to_json(orient='values')\n", + "\n", + "hidden = ['comments', 'comment_urls']\n", + "columns=[{\n", + " 'title':c, \n", + " 'visible': c not in hidden,\n", + " 'searchable': c not in hidden,\n", + " } for c in d.columns]\n", + "columns = json.dumps(columns)\n", + "\n", + "\n", + "html = template.render(data=data,\n", + " columns=columns,\n", + " )\n", + "html_out = Path('../outputs/index.html').resolve()\n", + "open(html_out, 'w').write(html)\n", + "columns" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "View the page /media/wassname/SGIronWolf/projects5/rrational/outputs/index.html" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import display, HTML\n", + "htmla = f'View the page {html_out}'\n", + "display(HTML(htmla))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# df3.to_html('../outputs/links3.html')" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1147,9 +1470,34 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'sniffio'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[23], line 4\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mdotenv\u001b[39;00m\n\u001b[1;32m 3\u001b[0m dotenv\u001b[38;5;241m.\u001b[39mload_dotenv()\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenai\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m OpenAI\n\u001b[1;32m 5\u001b[0m client \u001b[38;5;241m=\u001b[39m OpenAI()\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtiktoken\u001b[39;00m\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/openai/__init__.py:8\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mos\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01m_os\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping_extensions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m override\n\u001b[0;32m----> 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m types\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_types\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m NOT_GIVEN, NoneType, NotGiven, Transport, ProxiesTypes\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m file_from_path\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/openai/types/__init__.py:5\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m__future__\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m annotations\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbatch\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Batch \u001b[38;5;28;01mas\u001b[39;00m Batch\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mimage\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Image \u001b[38;5;28;01mas\u001b[39;00m Image\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmodel\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Model \u001b[38;5;28;01mas\u001b[39;00m Model\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/openai/types/batch.py:7\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m List, Optional\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping_extensions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Literal\n\u001b[0;32m----> 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_models\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m BaseModel\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbatch_error\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m BatchError\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbatch_request_counts\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m BatchRequestCounts\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/openai/_models.py:25\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpydantic\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mgenerics\u001b[39;00m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpydantic\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfields\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m FieldInfo\n\u001b[0;32m---> 25\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_types\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 26\u001b[0m Body,\n\u001b[1;32m 27\u001b[0m IncEx,\n\u001b[1;32m 28\u001b[0m Query,\n\u001b[1;32m 29\u001b[0m ModelT,\n\u001b[1;32m 30\u001b[0m Headers,\n\u001b[1;32m 31\u001b[0m Timeout,\n\u001b[1;32m 32\u001b[0m NotGiven,\n\u001b[1;32m 33\u001b[0m AnyMapping,\n\u001b[1;32m 34\u001b[0m HttpxRequestFiles,\n\u001b[1;32m 35\u001b[0m )\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 37\u001b[0m PropertyInfo,\n\u001b[1;32m 38\u001b[0m is_list,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 48\u001b[0m strip_annotated_type,\n\u001b[1;32m 49\u001b[0m )\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_compat\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 51\u001b[0m PYDANTIC_V2,\n\u001b[1;32m 52\u001b[0m ConfigDict,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 61\u001b[0m field_get_default,\n\u001b[1;32m 62\u001b[0m )\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/openai/_types.py:21\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 5\u001b[0m IO,\n\u001b[1;32m 6\u001b[0m TYPE_CHECKING,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 17\u001b[0m Sequence,\n\u001b[1;32m 18\u001b[0m )\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping_extensions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Literal, Protocol, TypeAlias, TypedDict, override, runtime_checkable\n\u001b[0;32m---> 21\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mhttpx\u001b[39;00m\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpydantic\u001b[39;00m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mhttpx\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m URL, Proxy, Timeout, Response, BaseTransport, AsyncBaseTransport\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/httpx/__init__.py:2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m__version__\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m __description__, __title__, __version__\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_api\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_auth\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_client\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/httpx/_api.py:6\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mcontextlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m contextmanager\n\u001b[0;32m----> 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_client\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Client\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_config\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m DEFAULT_TIMEOUT_CONFIG\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_models\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Response\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/httpx/_client.py:12\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtypes\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m TracebackType\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m__version__\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m __version__\n\u001b[0;32m---> 12\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_auth\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Auth, BasicAuth, FunctionAuth\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_config\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 14\u001b[0m DEFAULT_LIMITS,\n\u001b[1;32m 15\u001b[0m DEFAULT_MAX_REDIRECTS,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 19\u001b[0m Timeout,\n\u001b[1;32m 20\u001b[0m )\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_decoders\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m SUPPORTED_DECODERS\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/httpx/_auth.py:12\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01murllib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mrequest\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m parse_http_list\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_exceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ProtocolError\n\u001b[0;32m---> 12\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_models\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Cookies, Request, Response\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m to_bytes, to_str, unquote\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m typing\u001b[38;5;241m.\u001b[39mTYPE_CHECKING: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/httpx/_models.py:11\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mcollections\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mabc\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Mapping\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mhttp\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcookiejar\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Cookie, CookieJar\n\u001b[0;32m---> 11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_content\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ByteStream, UnattachedStream, encode_request, encode_response\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_decoders\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 13\u001b[0m SUPPORTED_DECODERS,\n\u001b[1;32m 14\u001b[0m ByteChunker,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 20\u001b[0m TextDecoder,\n\u001b[1;32m 21\u001b[0m )\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_exceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 23\u001b[0m CookieConflict,\n\u001b[1;32m 24\u001b[0m HTTPStatusError,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 29\u001b[0m request_context,\n\u001b[1;32m 30\u001b[0m )\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/httpx/_content.py:17\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01murllib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mparse\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m urlencode\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_exceptions\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m StreamClosed, StreamConsumed\n\u001b[0;32m---> 17\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_multipart\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m MultipartStream\n\u001b[1;32m 18\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_types\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 19\u001b[0m AsyncByteStream,\n\u001b[1;32m 20\u001b[0m RequestContent,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 24\u001b[0m SyncByteStream,\n\u001b[1;32m 25\u001b[0m )\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m peek_filelike_length, primitive_value_to_str\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/httpx/_multipart.py:16\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpathlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Path\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_types\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 9\u001b[0m AsyncByteStream,\n\u001b[1;32m 10\u001b[0m FileContent,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 14\u001b[0m SyncByteStream,\n\u001b[1;32m 15\u001b[0m )\n\u001b[0;32m---> 16\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 17\u001b[0m format_form_param,\n\u001b[1;32m 18\u001b[0m guess_content_type,\n\u001b[1;32m 19\u001b[0m peek_filelike_length,\n\u001b[1;32m 20\u001b[0m primitive_value_to_str,\n\u001b[1;32m 21\u001b[0m to_bytes,\n\u001b[1;32m 22\u001b[0m )\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_multipart_boundary_from_content_type\u001b[39m(\n\u001b[1;32m 26\u001b[0m content_type: \u001b[38;5;28mbytes\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 27\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mbytes\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 28\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m content_type \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m content_type\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmultipart/form-data\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", + "File \u001b[0;32m/media/wassname/SGIronWolf/projects5/rrational/.venv/lib/python3.10/site-packages/httpx/_utils.py:14\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpathlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Path\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01murllib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mrequest\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m getproxies\n\u001b[0;32m---> 14\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01msniffio\u001b[39;00m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_types\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m PrimitiveData\n\u001b[1;32m 18\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m typing\u001b[38;5;241m.\u001b[39mTYPE_CHECKING: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'sniffio'" + ] + } + ], "source": [ "import os\n", "import dotenv\n", @@ -1171,7 +1519,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1236,7 +1584,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1279,7 +1627,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1288,72 +1636,9 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1ea7a3c5728c4ebdae3c43e11f8da0cc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/99 [00:00 33\u001b[0m \u001b[38;5;241;43m1\u001b[39;49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\n", - "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" - ] - } - ], + "outputs": [], "source": [ "df4 = df3.copy()\n", "df4['description'] = ''\n", @@ -1394,18 +1679,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'https://www.patreon.com/alexanderwales'" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "urls" ] diff --git a/poetry.lock b/poetry.lock index d777f8e9..50693278 100644 --- a/poetry.lock +++ b/poetry.lock @@ -26,20 +26,6 @@ files = [ {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] -[[package]] -name = "ascii" -version = "3.6" -description = "Turns images into ascii art" -optional = false -python-versions = "*" -files = [ - {file = "ascii-3.6.tar.gz", hash = "sha256:b5ffc4cb20ac1789cac80a91319345f26a3e8f3c6d6feff3a220c1b6c5056141"}, -] - -[package.dependencies] -Pillow = "*" -urllib3 = "*" - [[package]] name = "asttokens" version = "2.4.1" @@ -58,39 +44,6 @@ six = ">=1.12.0" astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] -[[package]] -name = "attrs" -version = "24.3.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.8" -files = [ - {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, - {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, -] - -[package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] - -[[package]] -name = "base58" -version = "2.1.1" -description = "Base58 and Base58Check implementation." -optional = false -python-versions = ">=3.5" -files = [ - {file = "base58-2.1.1-py3-none-any.whl", hash = "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2"}, - {file = "base58-2.1.1.tar.gz", hash = "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c"}, -] - -[package.extras] -tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", "pytest-cov", "pytest-flake8"] - [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -216,17 +169,6 @@ files = [ [package.dependencies] pycparser = "*" -[[package]] -name = "chardet" -version = "5.2.0" -description = "Universal encoding detector for Python 3" -optional = false -python-versions = ">=3.7" -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - [[package]] name = "charset-normalizer" version = "3.3.2" @@ -454,17 +396,6 @@ mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pil test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] -[[package]] -name = "cssselect" -version = "1.2.0" -description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cssselect-1.2.0-py2.py3-none-any.whl", hash = "sha256:da1885f0c10b60c03ed5eccbb6b68d6eff248d91976fcde348f395d54c9fd35e"}, - {file = "cssselect-1.2.0.tar.gz", hash = "sha256:666b19839cfaddb9ce9d36bfe4c969132c647b92fc9088c4e23f786b30f1b3dc"}, -] - [[package]] name = "cycler" version = "0.12.1" @@ -537,20 +468,6 @@ files = [ graph = ["objgraph (>=1.7.2)"] profile = ["gprof2dot (>=2022.7.29)"] -[[package]] -name = "ebooklib" -version = "0.18" -description = "Ebook library which can handle EPUB2/EPUB3 and Kindle format" -optional = false -python-versions = "*" -files = [ - {file = "EbookLib-0.18.tar.gz", hash = "sha256:38562643a7bc94d9bf56e9930b4927e4e93b5d1d0917f697a6454db5a1c1a533"}, -] - -[package.dependencies] -lxml = "*" -six = "*" - [[package]] name = "exceptiongroup" version = "1.2.2" @@ -660,105 +577,6 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] -[[package]] -name = "grpcio" -version = "1.68.1" -description = "HTTP/2-based RPC framework" -optional = false -python-versions = ">=3.8" -files = [ - {file = "grpcio-1.68.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:d35740e3f45f60f3c37b1e6f2f4702c23867b9ce21c6410254c9c682237da68d"}, - {file = "grpcio-1.68.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:d99abcd61760ebb34bdff37e5a3ba333c5cc09feda8c1ad42547bea0416ada78"}, - {file = "grpcio-1.68.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:f8261fa2a5f679abeb2a0a93ad056d765cdca1c47745eda3f2d87f874ff4b8c9"}, - {file = "grpcio-1.68.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0feb02205a27caca128627bd1df4ee7212db051019a9afa76f4bb6a1a80ca95e"}, - {file = "grpcio-1.68.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:919d7f18f63bcad3a0f81146188e90274fde800a94e35d42ffe9eadf6a9a6330"}, - {file = "grpcio-1.68.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:963cc8d7d79b12c56008aabd8b457f400952dbea8997dd185f155e2f228db079"}, - {file = "grpcio-1.68.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ccf2ebd2de2d6661e2520dae293298a3803a98ebfc099275f113ce1f6c2a80f1"}, - {file = "grpcio-1.68.1-cp310-cp310-win32.whl", hash = "sha256:2cc1fd04af8399971bcd4f43bd98c22d01029ea2e56e69c34daf2bf8470e47f5"}, - {file = "grpcio-1.68.1-cp310-cp310-win_amd64.whl", hash = "sha256:ee2e743e51cb964b4975de572aa8fb95b633f496f9fcb5e257893df3be854746"}, - {file = "grpcio-1.68.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:55857c71641064f01ff0541a1776bfe04a59db5558e82897d35a7793e525774c"}, - {file = "grpcio-1.68.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4b177f5547f1b995826ef529d2eef89cca2f830dd8b2c99ffd5fde4da734ba73"}, - {file = "grpcio-1.68.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:3522c77d7e6606d6665ec8d50e867f13f946a4e00c7df46768f1c85089eae515"}, - {file = "grpcio-1.68.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d1fae6bbf0816415b81db1e82fb3bf56f7857273c84dcbe68cbe046e58e1ccd"}, - {file = "grpcio-1.68.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:298ee7f80e26f9483f0b6f94cc0a046caf54400a11b644713bb5b3d8eb387600"}, - {file = "grpcio-1.68.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cbb5780e2e740b6b4f2d208e90453591036ff80c02cc605fea1af8e6fc6b1bbe"}, - {file = "grpcio-1.68.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ddda1aa22495d8acd9dfbafff2866438d12faec4d024ebc2e656784d96328ad0"}, - {file = "grpcio-1.68.1-cp311-cp311-win32.whl", hash = "sha256:b33bd114fa5a83f03ec6b7b262ef9f5cac549d4126f1dc702078767b10c46ed9"}, - {file = "grpcio-1.68.1-cp311-cp311-win_amd64.whl", hash = "sha256:7f20ebec257af55694d8f993e162ddf0d36bd82d4e57f74b31c67b3c6d63d8b2"}, - {file = "grpcio-1.68.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:8829924fffb25386995a31998ccbbeaa7367223e647e0122043dfc485a87c666"}, - {file = "grpcio-1.68.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3aed6544e4d523cd6b3119b0916cef3d15ef2da51e088211e4d1eb91a6c7f4f1"}, - {file = "grpcio-1.68.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:4efac5481c696d5cb124ff1c119a78bddbfdd13fc499e3bc0ca81e95fc573684"}, - {file = "grpcio-1.68.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ab2d912ca39c51f46baf2a0d92aa265aa96b2443266fc50d234fa88bf877d8e"}, - {file = "grpcio-1.68.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c87ce2a97434dffe7327a4071839ab8e8bffd0054cc74cbe971fba98aedd60"}, - {file = "grpcio-1.68.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e4842e4872ae4ae0f5497bf60a0498fa778c192cc7a9e87877abd2814aca9475"}, - {file = "grpcio-1.68.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:255b1635b0ed81e9f91da4fcc8d43b7ea5520090b9a9ad9340d147066d1d3613"}, - {file = "grpcio-1.68.1-cp312-cp312-win32.whl", hash = "sha256:7dfc914cc31c906297b30463dde0b9be48e36939575eaf2a0a22a8096e69afe5"}, - {file = "grpcio-1.68.1-cp312-cp312-win_amd64.whl", hash = "sha256:a0c8ddabef9c8f41617f213e527254c41e8b96ea9d387c632af878d05db9229c"}, - {file = "grpcio-1.68.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:a47faedc9ea2e7a3b6569795c040aae5895a19dde0c728a48d3c5d7995fda385"}, - {file = "grpcio-1.68.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:390eee4225a661c5cd133c09f5da1ee3c84498dc265fd292a6912b65c421c78c"}, - {file = "grpcio-1.68.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:66a24f3d45c33550703f0abb8b656515b0ab777970fa275693a2f6dc8e35f1c1"}, - {file = "grpcio-1.68.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c08079b4934b0bf0a8847f42c197b1d12cba6495a3d43febd7e99ecd1cdc8d54"}, - {file = "grpcio-1.68.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8720c25cd9ac25dd04ee02b69256d0ce35bf8a0f29e20577427355272230965a"}, - {file = "grpcio-1.68.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:04cfd68bf4f38f5bb959ee2361a7546916bd9a50f78617a346b3aeb2b42e2161"}, - {file = "grpcio-1.68.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c28848761a6520c5c6071d2904a18d339a796ebe6b800adc8b3f474c5ce3c3ad"}, - {file = "grpcio-1.68.1-cp313-cp313-win32.whl", hash = "sha256:77d65165fc35cff6e954e7fd4229e05ec76102d4406d4576528d3a3635fc6172"}, - {file = "grpcio-1.68.1-cp313-cp313-win_amd64.whl", hash = "sha256:a8040f85dcb9830d8bbb033ae66d272614cec6faceee88d37a88a9bd1a7a704e"}, - {file = "grpcio-1.68.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:eeb38ff04ab6e5756a2aef6ad8d94e89bb4a51ef96e20f45c44ba190fa0bcaad"}, - {file = "grpcio-1.68.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a3869a6661ec8f81d93f4597da50336718bde9eb13267a699ac7e0a1d6d0bea"}, - {file = "grpcio-1.68.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2c4cec6177bf325eb6faa6bd834d2ff6aa8bb3b29012cceb4937b86f8b74323c"}, - {file = "grpcio-1.68.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12941d533f3cd45d46f202e3667be8ebf6bcb3573629c7ec12c3e211d99cfccf"}, - {file = "grpcio-1.68.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80af6f1e69c5e68a2be529990684abdd31ed6622e988bf18850075c81bb1ad6e"}, - {file = "grpcio-1.68.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e8dbe3e00771bfe3d04feed8210fc6617006d06d9a2679b74605b9fed3e8362c"}, - {file = "grpcio-1.68.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:83bbf5807dc3ee94ce1de2dfe8a356e1d74101e4b9d7aa8c720cc4818a34aded"}, - {file = "grpcio-1.68.1-cp38-cp38-win32.whl", hash = "sha256:8cb620037a2fd9eeee97b4531880e439ebfcd6d7d78f2e7dcc3726428ab5ef63"}, - {file = "grpcio-1.68.1-cp38-cp38-win_amd64.whl", hash = "sha256:52fbf85aa71263380d330f4fce9f013c0798242e31ede05fcee7fbe40ccfc20d"}, - {file = "grpcio-1.68.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:cb400138e73969eb5e0535d1d06cae6a6f7a15f2cc74add320e2130b8179211a"}, - {file = "grpcio-1.68.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a1b988b40f2fd9de5c820f3a701a43339d8dcf2cb2f1ca137e2c02671cc83ac1"}, - {file = "grpcio-1.68.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:96f473cdacfdd506008a5d7579c9f6a7ff245a9ade92c3c0265eb76cc591914f"}, - {file = "grpcio-1.68.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:37ea3be171f3cf3e7b7e412a98b77685eba9d4fd67421f4a34686a63a65d99f9"}, - {file = "grpcio-1.68.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ceb56c4285754e33bb3c2fa777d055e96e6932351a3082ce3559be47f8024f0"}, - {file = "grpcio-1.68.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dffd29a2961f3263a16d73945b57cd44a8fd0b235740cb14056f0612329b345e"}, - {file = "grpcio-1.68.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:025f790c056815b3bf53da850dd70ebb849fd755a4b1ac822cb65cd631e37d43"}, - {file = "grpcio-1.68.1-cp39-cp39-win32.whl", hash = "sha256:1098f03dedc3b9810810568060dea4ac0822b4062f537b0f53aa015269be0a76"}, - {file = "grpcio-1.68.1-cp39-cp39-win_amd64.whl", hash = "sha256:334ab917792904245a028f10e803fcd5b6f36a7b2173a820c0b5b076555825e1"}, - {file = "grpcio-1.68.1.tar.gz", hash = "sha256:44a8502dd5de653ae6a73e2de50a401d84184f0331d0ac3daeb044e66d5c5054"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.68.1)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "html5lib" -version = "1.1" -description = "HTML parser based on the WHATWG HTML specification" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, - {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, -] - -[package.dependencies] -six = ">=1.9" -webencodings = "*" - -[package.extras] -all = ["chardet (>=2.2)", "genshi", "lxml"] -chardet = ["chardet (>=2.2)"] -genshi = ["genshi"] -lxml = ["lxml"] - [[package]] name = "idna" version = "3.8" @@ -882,20 +700,21 @@ qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] -name = "js2py" -version = "0.74" -description = "JavaScript to Python Translator & JavaScript interpreter written in 100% pure Python." +name = "jinja2" +version = "3.1.5" +description = "A very fast and expressive template engine." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "Js2Py-0.74-py3-none-any.whl", hash = "sha256:40a508a79e2f8d624e3f2e604f90a1e6f46ac75b416d7f4745939ff4a2e95e09"}, - {file = "Js2Py-0.74.tar.gz", hash = "sha256:39f3a6aa8469180efba3c8677271df27c31332fd1b471df1af2af58b87b8972f"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] -pyjsparser = ">=2.5.1" -six = ">=1.10" -tzlocal = ">=1.2" +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] [[package]] name = "jupyter-client" @@ -1063,43 +882,6 @@ files = [ {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, ] -[[package]] -name = "lightnovel-crawler" -version = "3.7.2" -description = "An app to download novels from online sources and generate e-books." -optional = false -python-versions = ">=3.8" -files = [ - {file = "lightnovel_crawler-3.7.2-py3-none-any.whl", hash = "sha256:a2ab5bfd8cf113916668886373d88214b7285298c42c216c29735cdf15a887e1"}, -] - -[package.dependencies] -ascii = "*" -base58 = ">=2.1.1,<2.2.0" -beautifulsoup4 = ">=4.8.0,<5.0.0" -cloudscraper = ">=1.2.71" -colorama = ">=0.4.0,<0.5.0" -ebooklib = ">=0.17.0,<1.0.0" -html5lib = ">=1.1,<2.0" -js2py = ">=0.71" -lxml = ">=4.0.0,<5.0.0" -packaging = "*" -pillow = ">=6.0.0" -prompt-toolkit = ">=3.0,<4.0" -pycryptodome = ">=3.0.0,<4.0.0" -pyease-grpc = ">=1.6.0" -python-box = ">=6.0.0,<8.0.0" -python-dotenv = ">=0.15.0,<2.0.0" -python-slugify = ">=4.0.0,<9.0.0" -questionary = ">=1.6.0" -readability-lxml = ">=0.8.0,<1.0.0" -regex = "*" -requests = ">=2.20.0,<3.0.0" -selenium = ">=3.141.0" -tqdm = ">=4.60,<5.0" -undetected-chromedriver = ">=3.5.3" -webdriver-manager = "*" - [[package]] name = "loguru" version = "0.7.2" @@ -1118,114 +900,6 @@ win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} [package.extras] dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] -[[package]] -name = "lxml" -version = "4.9.4" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, - {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, - {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, - {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, - {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, - {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, - {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, - {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, - {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, - {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, - {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, - {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, - {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, - {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, - {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, - {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, - {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, - {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, - {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, - {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, - {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, - {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (==0.29.37)"] - [[package]] name = "markdown" version = "3.7" @@ -1241,6 +915,76 @@ files = [ docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + [[package]] name = "matplotlib" version = "3.9.2" @@ -1385,20 +1129,6 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] -[[package]] -name = "outcome" -version = "1.3.0.post0" -description = "Capture the outcome of Python function calls." -optional = false -python-versions = ">=3.7" -files = [ - {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, - {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, -] - -[package.dependencies] -attrs = ">=19.2.0" - [[package]] name = "packaging" version = "24.1" @@ -1682,26 +1412,6 @@ files = [ [package.dependencies] wcwidth = "*" -[[package]] -name = "protobuf" -version = "5.29.2" -description = "" -optional = false -python-versions = ">=3.8" -files = [ - {file = "protobuf-5.29.2-cp310-abi3-win32.whl", hash = "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851"}, - {file = "protobuf-5.29.2-cp310-abi3-win_amd64.whl", hash = "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9"}, - {file = "protobuf-5.29.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a0c53d78383c851bfa97eb42e3703aefdc96d2036a41482ffd55dc5f529466eb"}, - {file = "protobuf-5.29.2-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:494229ecd8c9009dd71eda5fd57528395d1eacdf307dbece6c12ad0dd09e912e"}, - {file = "protobuf-5.29.2-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:b6b0d416bbbb9d4fbf9d0561dbfc4e324fd522f61f7af0fe0f282ab67b22477e"}, - {file = "protobuf-5.29.2-cp38-cp38-win32.whl", hash = "sha256:e621a98c0201a7c8afe89d9646859859be97cb22b8bf1d8eacfd90d5bda2eb19"}, - {file = "protobuf-5.29.2-cp38-cp38-win_amd64.whl", hash = "sha256:13d6d617a2a9e0e82a88113d7191a1baa1e42c2cc6f5f1398d3b054c8e7e714a"}, - {file = "protobuf-5.29.2-cp39-cp39-win32.whl", hash = "sha256:36000f97ea1e76e8398a3f02936aac2a5d2b111aae9920ec1b769fc4a222c4d9"}, - {file = "protobuf-5.29.2-cp39-cp39-win_amd64.whl", hash = "sha256:2d2e674c58a06311c8e99e74be43e7f3a8d1e2b2fdf845eaa347fbd866f23355"}, - {file = "protobuf-5.29.2-py3-none-any.whl", hash = "sha256:fde4554c0e578a5a0bcc9a276339594848d1e89f9ea47b4427c80e5d72f90181"}, - {file = "protobuf-5.29.2.tar.gz", hash = "sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e"}, -] - [[package]] name = "psutil" version = "6.0.0" @@ -1778,47 +1488,6 @@ files = [ {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] -[[package]] -name = "pycryptodome" -version = "3.21.0" -description = "Cryptographic library for Python" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "pycryptodome-3.21.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:dad9bf36eda068e89059d1f07408e397856be9511d7113ea4b586642a429a4fd"}, - {file = "pycryptodome-3.21.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:a1752eca64c60852f38bb29e2c86fca30d7672c024128ef5d70cc15868fa10f4"}, - {file = "pycryptodome-3.21.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ba4cc304eac4d4d458f508d4955a88ba25026890e8abff9b60404f76a62c55e"}, - {file = "pycryptodome-3.21.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cb087b8612c8a1a14cf37dd754685be9a8d9869bed2ffaaceb04850a8aeef7e"}, - {file = "pycryptodome-3.21.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:26412b21df30b2861424a6c6d5b1d8ca8107612a4cfa4d0183e71c5d200fb34a"}, - {file = "pycryptodome-3.21.0-cp27-cp27m-win32.whl", hash = "sha256:cc2269ab4bce40b027b49663d61d816903a4bd90ad88cb99ed561aadb3888dd3"}, - {file = "pycryptodome-3.21.0-cp27-cp27m-win_amd64.whl", hash = "sha256:0fa0a05a6a697ccbf2a12cec3d6d2650b50881899b845fac6e87416f8cb7e87d"}, - {file = "pycryptodome-3.21.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6cce52e196a5f1d6797ff7946cdff2038d3b5f0aba4a43cb6bf46b575fd1b5bb"}, - {file = "pycryptodome-3.21.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:a915597ffccabe902e7090e199a7bf7a381c5506a747d5e9d27ba55197a2c568"}, - {file = "pycryptodome-3.21.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4e74c522d630766b03a836c15bff77cb657c5fdf098abf8b1ada2aebc7d0819"}, - {file = "pycryptodome-3.21.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:a3804675283f4764a02db05f5191eb8fec2bb6ca34d466167fc78a5f05bbe6b3"}, - {file = "pycryptodome-3.21.0-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:2480ec2c72438430da9f601ebc12c518c093c13111a5c1644c82cdfc2e50b1e4"}, - {file = "pycryptodome-3.21.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:de18954104667f565e2fbb4783b56667f30fb49c4d79b346f52a29cb198d5b6b"}, - {file = "pycryptodome-3.21.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de4b7263a33947ff440412339cb72b28a5a4c769b5c1ca19e33dd6cd1dcec6e"}, - {file = "pycryptodome-3.21.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0714206d467fc911042d01ea3a1847c847bc10884cf674c82e12915cfe1649f8"}, - {file = "pycryptodome-3.21.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d85c1b613121ed3dbaa5a97369b3b757909531a959d229406a75b912dd51dd1"}, - {file = "pycryptodome-3.21.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8898a66425a57bcf15e25fc19c12490b87bd939800f39a03ea2de2aea5e3611a"}, - {file = "pycryptodome-3.21.0-cp36-abi3-musllinux_1_2_i686.whl", hash = "sha256:932c905b71a56474bff8a9c014030bc3c882cee696b448af920399f730a650c2"}, - {file = "pycryptodome-3.21.0-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:18caa8cfbc676eaaf28613637a89980ad2fd96e00c564135bf90bc3f0b34dd93"}, - {file = "pycryptodome-3.21.0-cp36-abi3-win32.whl", hash = "sha256:280b67d20e33bb63171d55b1067f61fbd932e0b1ad976b3a184303a3dad22764"}, - {file = "pycryptodome-3.21.0-cp36-abi3-win_amd64.whl", hash = "sha256:b7aa25fc0baa5b1d95b7633af4f5f1838467f1815442b22487426f94e0d66c53"}, - {file = "pycryptodome-3.21.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:2cb635b67011bc147c257e61ce864879ffe6d03342dc74b6045059dfbdedafca"}, - {file = "pycryptodome-3.21.0-pp27-pypy_73-win32.whl", hash = "sha256:4c26a2f0dc15f81ea3afa3b0c87b87e501f235d332b7f27e2225ecb80c0b1cdd"}, - {file = "pycryptodome-3.21.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d5ebe0763c982f069d3877832254f64974139f4f9655058452603ff559c482e8"}, - {file = "pycryptodome-3.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee86cbde706be13f2dec5a42b52b1c1d1cbb90c8e405c68d0755134735c8dc6"}, - {file = "pycryptodome-3.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fd54003ec3ce4e0f16c484a10bc5d8b9bd77fa662a12b85779a2d2d85d67ee0"}, - {file = "pycryptodome-3.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5dfafca172933506773482b0e18f0cd766fd3920bd03ec85a283df90d8a17bc6"}, - {file = "pycryptodome-3.21.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:590ef0898a4b0a15485b05210b4a1c9de8806d3ad3d47f74ab1dc07c67a6827f"}, - {file = "pycryptodome-3.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35e442630bc4bc2e1878482d6f59ea22e280d7121d7adeaedba58c23ab6386b"}, - {file = "pycryptodome-3.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff99f952db3db2fbe98a0b355175f93ec334ba3d01bbde25ad3a5a33abc02b58"}, - {file = "pycryptodome-3.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8acd7d34af70ee63f9a849f957558e49a98f8f1634f86a59d2be62bb8e93f71c"}, - {file = "pycryptodome-3.21.0.tar.gz", hash = "sha256:f7787e0d469bdae763b876174cf2e6c0f7be79808af26b1da96f1a64bcf47297"}, -] - [[package]] name = "pydocstyle" version = "6.3.0" @@ -1836,21 +1505,6 @@ snowballstemmer = ">=2.2.0" [package.extras] toml = ["tomli (>=1.2.3)"] -[[package]] -name = "pyease-grpc" -version = "1.7.0" -description = "Easy gRPC-web client in python" -optional = false -python-versions = "*" -files = [ - {file = "pyease_grpc-1.7.0-py3-none-any.whl", hash = "sha256:279047e03f21f4b65ebe251d527504a8f64d84ccfa028b50bba0e7315321f05e"}, -] - -[package.dependencies] -grpcio = "*" -protobuf = ">=3.19.0" -requests = ">=2.25.0" - [[package]] name = "pyflakes" version = "3.2.0" @@ -1876,17 +1530,6 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] -[[package]] -name = "pyjsparser" -version = "2.7.1" -description = "Fast javascript parser (based on esprima.js)" -optional = false -python-versions = "*" -files = [ - {file = "pyjsparser-2.7.1-py2-none-any.whl", hash = "sha256:2b12842df98d83f65934e0772fa4a5d8b123b3bc79f1af1789172ac70265dd21"}, - {file = "pyjsparser-2.7.1.tar.gz", hash = "sha256:be60da6b778cc5a5296a69d8e7d614f1f870faf94e1b1b6ac591f2ad5d729579"}, -] - [[package]] name = "pylama" version = "8.4.1" @@ -1928,53 +1571,6 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] -[[package]] -name = "pysocks" -version = "1.7.1" -description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, - {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, - {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, -] - -[[package]] -name = "python-box" -version = "7.3.0" -description = "Advanced Python dictionaries with dot notation access" -optional = false -python-versions = ">=3.9" -files = [ - {file = "python_box-7.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a2131477ed02aa3609b348dad0697b70d84968d6440387898bb9075f461ef9bf"}, - {file = "python_box-7.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3284cf583476af63c4f24168b6e1307503322dccd9b3dc2c924f5e69f79e7ab5"}, - {file = "python_box-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:2718cf4c8dcc091d1c56a1a297804ab7973271391a2d2d34d37740820bbd1fda"}, - {file = "python_box-7.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e40fe08b218b3d07a50d6eb1c62edce8d0636d6bd1e563907bc86018a78e5826"}, - {file = "python_box-7.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd13e2b964ed527e03409cb1fb386d8723e0e69caf0f507af60d64102c13d363"}, - {file = "python_box-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:d661fb9c6ff6c730b53fe859754624baa14e37ee3d593525382b20194efad367"}, - {file = "python_box-7.3.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6c3809f78f7c829e45626990a891d93214748938b9c0236dc6d0f2e8c400d325"}, - {file = "python_box-7.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c233b94bf3b95d7d9dc01ed1ee5636800174345810b319eb87219b760edbb54f"}, - {file = "python_box-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:9a22cc82e78225a419c4da02f53d6beb5c5cbd2fe5f63c13dab81e4f27b8c929"}, - {file = "python_box-7.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1f7b93c5ab4027b12ba67baffa8db903557e557250e01b91226d7a1b9688cf77"}, - {file = "python_box-7.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71ed234c1cff7f7197103bb11d98559032c0beac34db0c62dd5bd53e2b2a6963"}, - {file = "python_box-7.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1144c9e5d40a2cbe34d1ec9a13abfc557e8e9e2fbf15f14314c87b6113de178f"}, - {file = "python_box-7.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:df77730baabf45b1682ead1c470e84a530f8ceb0295263a89f0ebc04ef7f363c"}, - {file = "python_box-7.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36bef944e61672b300c1d56d16db8a43ee4af9ab5678492a5e003368d2c64a6e"}, - {file = "python_box-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b35a2262a4e1ccfba90ce8e2018aa367f8a46a519632884006fa3153b266f184"}, - {file = "python_box-7.3.0-py3-none-any.whl", hash = "sha256:b1139bffe91bd317fd686c4c29ffc84115c1967af14112c5c4a8ac51937d530c"}, - {file = "python_box-7.3.0.tar.gz", hash = "sha256:39a85ba457d07122226ca60597882d763549713ab56ac7d55da41c4ad0e89a05"}, -] - -[package.extras] -all = ["msgpack", "ruamel.yaml (>=0.17)", "toml"] -msgpack = ["msgpack"] -pyyaml = ["PyYAML"] -ruamel-yaml = ["ruamel.yaml (>=0.17)"] -toml = ["toml"] -tomli = ["tomli", "tomli-w"] -yaml = ["ruamel.yaml (>=0.17)"] - [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -2003,23 +1599,6 @@ files = [ [package.extras] cli = ["click (>=5.0)"] -[[package]] -name = "python-slugify" -version = "8.0.4" -description = "A Python slugify application that also handles Unicode" -optional = false -python-versions = ">=3.7" -files = [ - {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, - {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, -] - -[package.dependencies] -text-unidecode = ">=1.3" - -[package.extras] -unidecode = ["Unidecode (>=1.1.1)"] - [[package]] name = "pytz" version = "2024.1" @@ -2175,42 +1754,6 @@ files = [ [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} -[[package]] -name = "questionary" -version = "1.10.0" -description = "Python library to build pretty command line user prompts ⭐️" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, - {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, -] - -[package.dependencies] -prompt_toolkit = ">=2.0,<4.0" - -[package.extras] -docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] - -[[package]] -name = "readability-lxml" -version = "0.8.1" -description = "fast html to text parser (article readability tool) with python 3 support" -optional = false -python-versions = "*" -files = [ - {file = "readability-lxml-0.8.1.tar.gz", hash = "sha256:e51fea56b5909aaf886d307d48e79e096293255afa567b7d08bca94d25b1a4e1"}, - {file = "readability_lxml-0.8.1-py3-none-any.whl", hash = "sha256:e0d366a21b1bd6cca17de71a4e6ea16fcfaa8b0a5b4004e39e2c7eff884e6305"}, -] - -[package.dependencies] -chardet = "*" -cssselect = "*" -lxml = "*" - -[package.extras] -test = ["timeout-decorator"] - [[package]] name = "regex" version = "2024.11.6" @@ -2375,25 +1918,6 @@ files = [ {file = "ruff-0.1.15.tar.gz", hash = "sha256:f6dfa8c1b21c913c326919056c390966648b680966febcb796cc9d1aaab8564e"}, ] -[[package]] -name = "selenium" -version = "4.27.1" -description = "Official Python bindings for Selenium WebDriver" -optional = false -python-versions = ">=3.8" -files = [ - {file = "selenium-4.27.1-py3-none-any.whl", hash = "sha256:b89b1f62b5cfe8025868556fe82360d6b649d464f75d2655cb966c8f8447ea18"}, - {file = "selenium-4.27.1.tar.gz", hash = "sha256:5296c425a75ff1b44d0d5199042b36a6d1ef76c04fb775b97b40be739a9caae2"}, -] - -[package.dependencies] -certifi = ">=2021.10.8" -trio = ">=0.17,<1.0" -trio-websocket = ">=0.9,<1.0" -typing_extensions = ">=4.9,<5.0" -urllib3 = {version = ">=1.26,<3", extras = ["socks"]} -websocket-client = ">=1.8,<2.0" - [[package]] name = "six" version = "1.16.0" @@ -2405,17 +1929,6 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - [[package]] name = "snowballstemmer" version = "2.2.0" @@ -2427,17 +1940,6 @@ files = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -optional = false -python-versions = "*" -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - [[package]] name = "soupsieve" version = "2.6" @@ -2468,17 +1970,6 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] -[[package]] -name = "text-unidecode" -version = "1.3" -description = "The most basic Text::Unidecode port" -optional = false -python-versions = "*" -files = [ - {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, - {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, -] - [[package]] name = "tiktoken" version = "0.8.0" @@ -2581,42 +2072,6 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] -[[package]] -name = "trio" -version = "0.27.0" -description = "A friendly Python library for async concurrency and I/O" -optional = false -python-versions = ">=3.8" -files = [ - {file = "trio-0.27.0-py3-none-any.whl", hash = "sha256:68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884"}, - {file = "trio-0.27.0.tar.gz", hash = "sha256:1dcc95ab1726b2da054afea8fd761af74bad79bd52381b84eae408e983c76831"}, -] - -[package.dependencies] -attrs = ">=23.2.0" -cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -idna = "*" -outcome = "*" -sniffio = ">=1.3.0" -sortedcontainers = "*" - -[[package]] -name = "trio-websocket" -version = "0.11.1" -description = "WebSocket library for Trio" -optional = false -python-versions = ">=3.7" -files = [ - {file = "trio-websocket-0.11.1.tar.gz", hash = "sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f"}, - {file = "trio_websocket-0.11.1-py3-none-any.whl", hash = "sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638"}, -] - -[package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -trio = ">=0.11" -wsproto = ">=0.14" - [[package]] name = "typing-extensions" version = "4.12.2" @@ -2639,38 +2094,6 @@ files = [ {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] -[[package]] -name = "tzlocal" -version = "5.2" -description = "tzinfo object for the local timezone" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, - {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, -] - -[package.dependencies] -tzdata = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] - -[[package]] -name = "undetected-chromedriver" -version = "3.5.5" -description = "('Selenium.webdriver.Chrome replacement with compatiblity for Brave, and other Chromium based browsers.', 'Not triggered by CloudFlare/Imperva/hCaptcha and such.', 'NOTE: results may vary due to many factors. No guarantees are given, except for ongoing efforts in understanding detection algorithms.')" -optional = false -python-versions = "*" -files = [ - {file = "undetected-chromedriver-3.5.5.tar.gz", hash = "sha256:9f945e1435005247abe17de316bcfda85b284a4177fd5f25167c78ced33b65ec"}, -] - -[package.dependencies] -requests = "*" -selenium = ">=4.9.0" -websockets = "*" - [[package]] name = "update-checker" version = "0.18.0" @@ -2701,9 +2124,6 @@ files = [ {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] -[package.dependencies] -pysocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} - [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] @@ -2721,33 +2141,6 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] -[[package]] -name = "webdriver-manager" -version = "4.0.2" -description = "Library provides the way to automatically manage drivers for different browsers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "webdriver_manager-4.0.2-py2.py3-none-any.whl", hash = "sha256:75908d92ecc45ff2b9953614459c633db8f9aa1ff30181cefe8696e312908129"}, - {file = "webdriver_manager-4.0.2.tar.gz", hash = "sha256:efedf428f92fd6d5c924a0d054e6d1322dd77aab790e834ee767af392b35590f"}, -] - -[package.dependencies] -packaging = "*" -python-dotenv = "*" -requests = "*" - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - [[package]] name = "websocket-client" version = "1.8.0" @@ -2764,84 +2157,6 @@ docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] -[[package]] -name = "websockets" -version = "14.1" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.9" -files = [ - {file = "websockets-14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29"}, - {file = "websockets-14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179"}, - {file = "websockets-14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2177ee3901075167f01c5e335a6685e71b162a54a89a56001f1c3e9e3d2ad250"}, - {file = "websockets-14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f14a96a0034a27f9d47fd9788913924c89612225878f8078bb9d55f859272b0"}, - {file = "websockets-14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f874ba705deea77bcf64a9da42c1f5fc2466d8f14daf410bc7d4ceae0a9fcb0"}, - {file = "websockets-14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9607b9a442392e690a57909c362811184ea429585a71061cd5d3c2b98065c199"}, - {file = "websockets-14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bea45f19b7ca000380fbd4e02552be86343080120d074b87f25593ce1700ad58"}, - {file = "websockets-14.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:219c8187b3ceeadbf2afcf0f25a4918d02da7b944d703b97d12fb01510869078"}, - {file = "websockets-14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad2ab2547761d79926effe63de21479dfaf29834c50f98c4bf5b5480b5838434"}, - {file = "websockets-14.1-cp310-cp310-win32.whl", hash = "sha256:1288369a6a84e81b90da5dbed48610cd7e5d60af62df9851ed1d1d23a9069f10"}, - {file = "websockets-14.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0744623852f1497d825a49a99bfbec9bea4f3f946df6eb9d8a2f0c37a2fec2e"}, - {file = "websockets-14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:449d77d636f8d9c17952628cc7e3b8faf6e92a17ec581ec0c0256300717e1512"}, - {file = "websockets-14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a35f704be14768cea9790d921c2c1cc4fc52700410b1c10948511039be824aac"}, - {file = "websockets-14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b1f3628a0510bd58968c0f60447e7a692933589b791a6b572fcef374053ca280"}, - {file = "websockets-14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c3deac3748ec73ef24fc7be0b68220d14d47d6647d2f85b2771cb35ea847aa1"}, - {file = "websockets-14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7048eb4415d46368ef29d32133134c513f507fff7d953c18c91104738a68c3b3"}, - {file = "websockets-14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6"}, - {file = "websockets-14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cc1fc87428c1d18b643479caa7b15db7d544652e5bf610513d4a3478dbe823d0"}, - {file = "websockets-14.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89"}, - {file = "websockets-14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9481a6de29105d73cf4515f2bef8eb71e17ac184c19d0b9918a3701c6c9c4f23"}, - {file = "websockets-14.1-cp311-cp311-win32.whl", hash = "sha256:368a05465f49c5949e27afd6fbe0a77ce53082185bbb2ac096a3a8afaf4de52e"}, - {file = "websockets-14.1-cp311-cp311-win_amd64.whl", hash = "sha256:6d24fc337fc055c9e83414c94e1ee0dee902a486d19d2a7f0929e49d7d604b09"}, - {file = "websockets-14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed907449fe5e021933e46a3e65d651f641975a768d0649fee59f10c2985529ed"}, - {file = "websockets-14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:87e31011b5c14a33b29f17eb48932e63e1dcd3fa31d72209848652310d3d1f0d"}, - {file = "websockets-14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc6ccf7d54c02ae47a48ddf9414c54d48af9c01076a2e1023e3b486b6e72c707"}, - {file = "websockets-14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9777564c0a72a1d457f0848977a1cbe15cfa75fa2f67ce267441e465717dcf1a"}, - {file = "websockets-14.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a655bde548ca98f55b43711b0ceefd2a88a71af6350b0c168aa77562104f3f45"}, - {file = "websockets-14.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfff83ca578cada2d19e665e9c8368e1598d4e787422a460ec70e531dbdd58"}, - {file = "websockets-14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6a6c9bcf7cdc0fd41cc7b7944447982e8acfd9f0d560ea6d6845428ed0562058"}, - {file = "websockets-14.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4b6caec8576e760f2c7dd878ba817653144d5f369200b6ddf9771d64385b84d4"}, - {file = "websockets-14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eb6d38971c800ff02e4a6afd791bbe3b923a9a57ca9aeab7314c21c84bf9ff05"}, - {file = "websockets-14.1-cp312-cp312-win32.whl", hash = "sha256:1d045cbe1358d76b24d5e20e7b1878efe578d9897a25c24e6006eef788c0fdf0"}, - {file = "websockets-14.1-cp312-cp312-win_amd64.whl", hash = "sha256:90f4c7a069c733d95c308380aae314f2cb45bd8a904fb03eb36d1a4983a4993f"}, - {file = "websockets-14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3630b670d5057cd9e08b9c4dab6493670e8e762a24c2c94ef312783870736ab9"}, - {file = "websockets-14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36ebd71db3b89e1f7b1a5deaa341a654852c3518ea7a8ddfdf69cc66acc2db1b"}, - {file = "websockets-14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5b918d288958dc3fa1c5a0b9aa3256cb2b2b84c54407f4813c45d52267600cd3"}, - {file = "websockets-14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00fe5da3f037041da1ee0cf8e308374e236883f9842c7c465aa65098b1c9af59"}, - {file = "websockets-14.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8149a0f5a72ca36720981418eeffeb5c2729ea55fa179091c81a0910a114a5d2"}, - {file = "websockets-14.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77569d19a13015e840b81550922056acabc25e3f52782625bc6843cfa034e1da"}, - {file = "websockets-14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf5201a04550136ef870aa60ad3d29d2a59e452a7f96b94193bee6d73b8ad9a9"}, - {file = "websockets-14.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:88cf9163ef674b5be5736a584c999e98daf3aabac6e536e43286eb74c126b9c7"}, - {file = "websockets-14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:836bef7ae338a072e9d1863502026f01b14027250a4545672673057997d5c05a"}, - {file = "websockets-14.1-cp313-cp313-win32.whl", hash = "sha256:0d4290d559d68288da9f444089fd82490c8d2744309113fc26e2da6e48b65da6"}, - {file = "websockets-14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0"}, - {file = "websockets-14.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01bb2d4f0a6d04538d3c5dfd27c0643269656c28045a53439cbf1c004f90897a"}, - {file = "websockets-14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:414ffe86f4d6f434a8c3b7913655a1a5383b617f9bf38720e7c0799fac3ab1c6"}, - {file = "websockets-14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fda642151d5affdee8a430bd85496f2e2517be3a2b9d2484d633d5712b15c56"}, - {file = "websockets-14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd7c11968bc3860d5c78577f0dbc535257ccec41750675d58d8dc66aa47fe52c"}, - {file = "websockets-14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a032855dc7db987dff813583d04f4950d14326665d7e714d584560b140ae6b8b"}, - {file = "websockets-14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7e7ea2f782408c32d86b87a0d2c1fd8871b0399dd762364c731d86c86069a78"}, - {file = "websockets-14.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:39450e6215f7d9f6f7bc2a6da21d79374729f5d052333da4d5825af8a97e6735"}, - {file = "websockets-14.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ceada5be22fa5a5a4cdeec74e761c2ee7db287208f54c718f2df4b7e200b8d4a"}, - {file = "websockets-14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3fc753451d471cff90b8f467a1fc0ae64031cf2d81b7b34e1811b7e2691bc4bc"}, - {file = "websockets-14.1-cp39-cp39-win32.whl", hash = "sha256:14839f54786987ccd9d03ed7f334baec0f02272e7ec4f6e9d427ff584aeea8b4"}, - {file = "websockets-14.1-cp39-cp39-win_amd64.whl", hash = "sha256:d9fd19ecc3a4d5ae82ddbfb30962cf6d874ff943e56e0c81f5169be2fda62979"}, - {file = "websockets-14.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e5dc25a9dbd1a7f61eca4b7cb04e74ae4b963d658f9e4f9aad9cd00b688692c8"}, - {file = "websockets-14.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:04a97aca96ca2acedf0d1f332c861c5a4486fdcba7bcef35873820f940c4231e"}, - {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df174ece723b228d3e8734a6f2a6febbd413ddec39b3dc592f5a4aa0aff28098"}, - {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:034feb9f4286476f273b9a245fb15f02c34d9586a5bc936aff108c3ba1b21beb"}, - {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c308dabd2b380807ab64b62985eaccf923a78ebc572bd485375b9ca2b7dc7"}, - {file = "websockets-14.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d"}, - {file = "websockets-14.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddaa4a390af911da6f680be8be4ff5aaf31c4c834c1a9147bc21cbcbca2d4370"}, - {file = "websockets-14.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4c805c6034206143fbabd2d259ec5e757f8b29d0a2f0bf3d2fe5d1f60147a4a"}, - {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:205f672a6c2c671a86d33f6d47c9b35781a998728d2c7c2a3e1cf3333fcb62b7"}, - {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef440054124728cc49b01c33469de06755e5a7a4e83ef61934ad95fc327fbb0"}, - {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7591d6f440af7f73c4bd9404f3772bfee064e639d2b6cc8c94076e71b2471c1"}, - {file = "websockets-14.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:25225cc79cfebc95ba1d24cd3ab86aaa35bcd315d12fa4358939bd55e9bd74a5"}, - {file = "websockets-14.1-py3-none-any.whl", hash = "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e"}, - {file = "websockets-14.1.tar.gz", hash = "sha256:398b10c77d471c0aab20a845e7a60076b6390bfdaac7a6d2edb0d2c59d75e8d8"}, -] - [[package]] name = "widgetsnbextension" version = "4.0.13" @@ -2867,21 +2182,7 @@ files = [ [package.extras] dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] -[[package]] -name = "wsproto" -version = "1.2.0" -description = "WebSockets state-machine based protocol implementation" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, - {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, -] - -[package.dependencies] -h11 = ">=0.9.0,<1" - [metadata] lock-version = "2.0" python-versions = ">=3.10,<4.0" -content-hash = "ee75fd2fea7b3c6794965877dcd16caf2b57414f87550f98d475316ffce60ded" +content-hash = "c80659b43a5d0c991892e24f288aad5527d5896fc8928413fa59e7fcbeb59c1d" diff --git a/pyproject.toml b/pyproject.toml index 25770457..7a45f269 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ anycache = "^2.2.0" # lightnovel-crawler = "^3.7.2" tiktoken = "^0.8.0" cloudscraper = "^1.2.71" +jinja2 = "^3.1.5" [[tool.poetry.source]] # pytorch cuda needs to compe from another source https://python-poetry.org/docs/dependency-specification/#source-dependencies