1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00

publish: 5.9.2

This commit is contained in:
Steffo 2020-06-22 19:27:11 +02:00
parent 5ad727ce21
commit 6f259d15ec
Signed by: steffo
GPG key ID: 896A80F55F7C97F0
25 changed files with 250 additions and 454 deletions

109
poetry.lock generated
View file

@ -67,7 +67,7 @@ description = "Python package for providing Mozilla's CA Bundle."
name = "certifi" name = "certifi"
optional = false optional = false
python-versions = "*" python-versions = "*"
version = "2020.4.5.1" version = "2020.6.20"
[[package]] [[package]]
category = "main" category = "main"
@ -145,7 +145,7 @@ description = "Date parsing library designed to parse dates from HTML pages"
name = "dateparser" name = "dateparser"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "0.7.4" version = "0.7.6"
[package.dependencies] [package.dependencies]
python-dateutil = "*" python-dateutil = "*"
@ -269,7 +269,7 @@ description = "Internationalized Domain Names in Applications (IDNA)"
name = "idna" name = "idna"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.8" version = "2.9"
[[package]] [[package]]
category = "main" category = "main"
@ -403,24 +403,24 @@ description = "Alternative regular expression module, to replace re."
name = "regex" name = "regex"
optional = false optional = false
python-versions = "*" python-versions = "*"
version = "2020.5.14" version = "2020.6.8"
[[package]] [[package]]
category = "main" category = "main"
description = "Python HTTP for Humans." description = "Python HTTP for Humans."
name = "requests" name = "requests"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "2.21.0" version = "2.24.0"
[package.dependencies] [package.dependencies]
certifi = ">=2017.4.17" certifi = ">=2017.4.17"
chardet = ">=3.0.2,<3.1.0" chardet = ">=3.0.2,<4"
idna = ">=2.5,<2.9" idna = ">=2.5,<3"
urllib3 = ">=1.21.1,<1.25" urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26"
[package.extras] [package.extras]
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"]
[[package]] [[package]]
@ -443,7 +443,7 @@ description = "A multipurpose bot and web framework"
name = "royalnet" name = "royalnet"
optional = false optional = false
python-versions = ">=3.8,<4.0" python-versions = ">=3.8,<4.0"
version = "5.8.13" version = "5.9.1"
[package.dependencies] [package.dependencies]
dateparser = ">=0.7.2,<0.8.0" dateparser = ">=0.7.2,<0.8.0"
@ -600,12 +600,12 @@ description = "Module for interacting with various Steam features"
name = "steam" name = "steam"
optional = false optional = false
python-versions = "*" python-versions = "*"
version = "1.0.1" version = "1.0.2"
[package.dependencies] [package.dependencies]
cachetools = ">=3.0.0" cachetools = ">=3.0.0"
pycryptodomex = ">=3.7.0" pycryptodomex = ">=3.7.0"
requests = ">=2.9.1,<2.22.0" requests = ">=2.9.1"
six = ">=1.10" six = ">=1.10"
vdf = ">=3.3" vdf = ">=3.3"
@ -644,11 +644,12 @@ category = "main"
description = "HTTP library with thread-safe connection pooling, file post, and more." description = "HTTP library with thread-safe connection pooling, file post, and more."
name = "urllib3" name = "urllib3"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
version = "1.24.3" version = "1.25.9"
[package.extras] [package.extras]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] brotli = ["brotlipy (>=0.6.0)"]
secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)", "ipaddress"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]
[[package]] [[package]]
@ -709,10 +710,10 @@ description = "YouTube video downloader"
name = "youtube-dl" name = "youtube-dl"
optional = false optional = false
python-versions = "*" python-versions = "*"
version = "2020.6.6" version = "2020.6.16.1"
[metadata] [metadata]
content-hash = "9245b7ae163a3746554cd31e3b20294d26aa3534cc78303a419ac54850db55cb" content-hash = "2e70b5afc7b2a39eb6a79be841489343c689c49f5a1f60659df93ca44cc0382e"
python-versions = "^3.8" python-versions = "^3.8"
[metadata.files] [metadata.files]
@ -763,8 +764,8 @@ cachetools = [
{file = "cachetools-4.1.0.tar.gz", hash = "sha256:1d057645db16ca7fe1f3bd953558897603d6f0b9c51ed9d11eb4d071ec4e2aab"}, {file = "cachetools-4.1.0.tar.gz", hash = "sha256:1d057645db16ca7fe1f3bd953558897603d6f0b9c51ed9d11eb4d071ec4e2aab"},
] ]
certifi = [ certifi = [
{file = "certifi-2020.4.5.1-py2.py3-none-any.whl", hash = "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304"}, {file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"},
{file = "certifi-2020.4.5.1.tar.gz", hash = "sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519"}, {file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"},
] ]
cffi = [ cffi = [
{file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"}, {file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"},
@ -834,8 +835,8 @@ cryptography = [
{file = "cryptography-2.9.2.tar.gz", hash = "sha256:a0c30272fb4ddda5f5ffc1089d7405b7a71b0b0f51993cb4e5dbb4590b2fc229"}, {file = "cryptography-2.9.2.tar.gz", hash = "sha256:a0c30272fb4ddda5f5ffc1089d7405b7a71b0b0f51993cb4e5dbb4590b2fc229"},
] ]
dateparser = [ dateparser = [
{file = "dateparser-0.7.4-py2.py3-none-any.whl", hash = "sha256:1b1f0e3034f82d1f92b45fa445826da6a36d67af8a1169e04869685594276011"}, {file = "dateparser-0.7.6-py2.py3-none-any.whl", hash = "sha256:7552c994f893b5cb8fcf103b4cd2ff7f57aab9bfd2619fdf0cf571c0740fd90b"},
{file = "dateparser-0.7.4.tar.gz", hash = "sha256:fb5bfde4795fa4b179fe05c2c25b3981f785de26bec37e247dee1079c63d5689"}, {file = "dateparser-0.7.6.tar.gz", hash = "sha256:e875efd8c57c85c2d02b238239878db59ff1971f5a823457fcc69e493bf6ebfa"},
] ]
decorator = [ decorator = [
{file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"},
@ -877,8 +878,8 @@ humanfriendly = [
{file = "humanfriendly-8.2.tar.gz", hash = "sha256:bf52ec91244819c780341a3438d5d7b09f431d3f113a475147ac9b7b167a3d12"}, {file = "humanfriendly-8.2.tar.gz", hash = "sha256:bf52ec91244819c780341a3438d5d7b09f431d3f113a475147ac9b7b167a3d12"},
] ]
idna = [ idna = [
{file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, {file = "idna-2.9-py2.py3-none-any.whl", hash = "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"},
{file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, {file = "idna-2.9.tar.gz", hash = "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb"},
] ]
multidict = [ multidict = [
{file = "multidict-4.7.6-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:275ca32383bc5d1894b6975bb4ca6a7ff16ab76fa622967625baeebcf8079000"}, {file = "multidict-4.7.6-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:275ca32383bc5d1894b6975bb4ca6a7ff16ab76fa622967625baeebcf8079000"},
@ -1014,39 +1015,39 @@ pytz = [
{file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"}, {file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"},
] ]
regex = [ regex = [
{file = "regex-2020.5.14-cp27-cp27m-win32.whl", hash = "sha256:e565569fc28e3ba3e475ec344d87ed3cd8ba2d575335359749298a0899fe122e"}, {file = "regex-2020.6.8-cp27-cp27m-win32.whl", hash = "sha256:fbff901c54c22425a5b809b914a3bfaf4b9570eee0e5ce8186ac71eb2025191c"},
{file = "regex-2020.5.14-cp27-cp27m-win_amd64.whl", hash = "sha256:d466967ac8e45244b9dfe302bbe5e3337f8dc4dec8d7d10f5e950d83b140d33a"}, {file = "regex-2020.6.8-cp27-cp27m-win_amd64.whl", hash = "sha256:112e34adf95e45158c597feea65d06a8124898bdeac975c9087fe71b572bd938"},
{file = "regex-2020.5.14-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:27ff7325b297fb6e5ebb70d10437592433601c423f5acf86e5bc1ee2919b9561"}, {file = "regex-2020.6.8-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:92d8a043a4241a710c1cf7593f5577fbb832cf6c3a00ff3fc1ff2052aff5dd89"},
{file = "regex-2020.5.14-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ea55b80eb0d1c3f1d8d784264a6764f931e172480a2f1868f2536444c5f01e01"}, {file = "regex-2020.6.8-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bae83f2a56ab30d5353b47f9b2a33e4aac4de9401fb582b55c42b132a8ac3868"},
{file = "regex-2020.5.14-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:c9bce6e006fbe771a02bda468ec40ffccbf954803b470a0345ad39c603402577"}, {file = "regex-2020.6.8-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:b2ba0f78b3ef375114856cbdaa30559914d081c416b431f2437f83ce4f8b7f2f"},
{file = "regex-2020.5.14-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:d881c2e657c51d89f02ae4c21d9adbef76b8325fe4d5cf0e9ad62f850f3a98fd"}, {file = "regex-2020.6.8-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:95fa7726d073c87141f7bbfb04c284901f8328e2d430eeb71b8ffdd5742a5ded"},
{file = "regex-2020.5.14-cp36-cp36m-win32.whl", hash = "sha256:99568f00f7bf820c620f01721485cad230f3fb28f57d8fbf4a7967ec2e446994"}, {file = "regex-2020.6.8-cp36-cp36m-win32.whl", hash = "sha256:e3cdc9423808f7e1bb9c2e0bdb1c9dc37b0607b30d646ff6faf0d4e41ee8fee3"},
{file = "regex-2020.5.14-cp36-cp36m-win_amd64.whl", hash = "sha256:70c14743320a68c5dac7fc5a0f685be63bc2024b062fe2aaccc4acc3d01b14a1"}, {file = "regex-2020.6.8-cp36-cp36m-win_amd64.whl", hash = "sha256:c78e66a922de1c95a208e4ec02e2e5cf0bb83a36ceececc10a72841e53fbf2bd"},
{file = "regex-2020.5.14-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a7c37f048ec3920783abab99f8f4036561a174f1314302ccfa4e9ad31cb00eb4"}, {file = "regex-2020.6.8-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:08997a37b221a3e27d68ffb601e45abfb0093d39ee770e4257bd2f5115e8cb0a"},
{file = "regex-2020.5.14-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:89d76ce33d3266173f5be80bd4efcbd5196cafc34100fdab814f9b228dee0fa4"}, {file = "regex-2020.6.8-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2f6f211633ee8d3f7706953e9d3edc7ce63a1d6aad0be5dcee1ece127eea13ae"},
{file = "regex-2020.5.14-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:51f17abbe973c7673a61863516bdc9c0ef467407a940f39501e786a07406699c"}, {file = "regex-2020.6.8-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:55b4c25cbb3b29f8d5e63aeed27b49fa0f8476b0d4e1b3171d85db891938cc3a"},
{file = "regex-2020.5.14-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:ce5cc53aa9fbbf6712e92c7cf268274eaff30f6bd12a0754e8133d85a8fb0f5f"}, {file = "regex-2020.6.8-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:89cda1a5d3e33ec9e231ece7307afc101b5217523d55ef4dc7fb2abd6de71ba3"},
{file = "regex-2020.5.14-cp37-cp37m-win32.whl", hash = "sha256:8044d1c085d49673aadb3d7dc20ef5cb5b030c7a4fa253a593dda2eab3059929"}, {file = "regex-2020.6.8-cp37-cp37m-win32.whl", hash = "sha256:690f858d9a94d903cf5cada62ce069b5d93b313d7d05456dbcd99420856562d9"},
{file = "regex-2020.5.14-cp37-cp37m-win_amd64.whl", hash = "sha256:c2062c7d470751b648f1cacc3f54460aebfc261285f14bc6da49c6943bd48bdd"}, {file = "regex-2020.6.8-cp37-cp37m-win_amd64.whl", hash = "sha256:1700419d8a18c26ff396b3b06ace315b5f2a6e780dad387e4c48717a12a22c29"},
{file = "regex-2020.5.14-cp38-cp38-manylinux1_i686.whl", hash = "sha256:329ba35d711e3428db6b45a53b1b13a0a8ba07cbbcf10bbed291a7da45f106c3"}, {file = "regex-2020.6.8-cp38-cp38-manylinux1_i686.whl", hash = "sha256:654cb773b2792e50151f0e22be0f2b6e1c3a04c5328ff1d9d59c0398d37ef610"},
{file = "regex-2020.5.14-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:579ea215c81d18da550b62ff97ee187b99f1b135fd894a13451e00986a080cad"}, {file = "regex-2020.6.8-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:52e1b4bef02f4040b2fd547357a170fc1146e60ab310cdbdd098db86e929b387"},
{file = "regex-2020.5.14-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:3a9394197664e35566242686d84dfd264c07b20f93514e2e09d3c2b3ffdf78fe"}, {file = "regex-2020.6.8-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:cf59bbf282b627130f5ba68b7fa3abdb96372b24b66bdf72a4920e8153fc7910"},
{file = "regex-2020.5.14-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ce367d21f33e23a84fb83a641b3834dd7dd8e9318ad8ff677fbfae5915a239f7"}, {file = "regex-2020.6.8-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5aaa5928b039ae440d775acea11d01e42ff26e1561c0ffcd3d805750973c6baf"},
{file = "regex-2020.5.14-cp38-cp38-win32.whl", hash = "sha256:1386e75c9d1574f6aa2e4eb5355374c8e55f9aac97e224a8a5a6abded0f9c927"}, {file = "regex-2020.6.8-cp38-cp38-win32.whl", hash = "sha256:97712e0d0af05febd8ab63d2ef0ab2d0cd9deddf4476f7aa153f76feef4b2754"},
{file = "regex-2020.5.14-cp38-cp38-win_amd64.whl", hash = "sha256:7e61be8a2900897803c293247ef87366d5df86bf701083b6c43119c7c6c99108"}, {file = "regex-2020.6.8-cp38-cp38-win_amd64.whl", hash = "sha256:6ad8663c17db4c5ef438141f99e291c4d4edfeaacc0ce28b5bba2b0bf273d9b5"},
{file = "regex-2020.5.14.tar.gz", hash = "sha256:ce450ffbfec93821ab1fea94779a8440e10cf63819be6e176eb1973a6017aff5"}, {file = "regex-2020.6.8.tar.gz", hash = "sha256:e9b64e609d37438f7d6e68c2546d2cb8062f3adb27e6336bc129b51be20773ac"},
] ]
requests = [ requests = [
{file = "requests-2.21.0-py2.py3-none-any.whl", hash = "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b"}, {file = "requests-2.24.0-py2.py3-none-any.whl", hash = "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"},
{file = "requests-2.21.0.tar.gz", hash = "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e"}, {file = "requests-2.24.0.tar.gz", hash = "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b"},
] ]
riotwatcher = [ riotwatcher = [
{file = "riotwatcher-2.7.1-py2.py3-none-any.whl", hash = "sha256:3fb03b20f768cea7830d54c6d301a8341c67223625ac8536d26d1c140af3dcb0"}, {file = "riotwatcher-2.7.1-py2.py3-none-any.whl", hash = "sha256:3fb03b20f768cea7830d54c6d301a8341c67223625ac8536d26d1c140af3dcb0"},
{file = "riotwatcher-2.7.1.tar.gz", hash = "sha256:5349271c7e00637b7619491a6070e66603705db60558ea2a690e7016f6e6d9a4"}, {file = "riotwatcher-2.7.1.tar.gz", hash = "sha256:5349271c7e00637b7619491a6070e66603705db60558ea2a690e7016f6e6d9a4"},
] ]
royalnet = [ royalnet = [
{file = "royalnet-5.8.13-py3-none-any.whl", hash = "sha256:77bc201477db59e172caae049ba5edac5de7134cef5ef03d113636e4b9fd4f83"}, {file = "royalnet-5.9.1-py3-none-any.whl", hash = "sha256:be5998c80d261d774ac7f70931cacb09c3e843ad838529aec51be54dc7091027"},
{file = "royalnet-5.8.13.tar.gz", hash = "sha256:42c8772e03bdd9400990f853fe477d09759c547da2d300df536cd49f42159203"}, {file = "royalnet-5.9.1.tar.gz", hash = "sha256:e1296389277b0773d2a0b73497165f869e413a22bcc046538b9030efd9090be2"},
] ]
royalspells = [ royalspells = [
{file = "royalspells-3.2.tar.gz", hash = "sha256:2bd4a9a66514532e35c02c3907425af48c7cb292364c4843c795719a82b25dfe"}, {file = "royalspells-3.2.tar.gz", hash = "sha256:2bd4a9a66514532e35c02c3907425af48c7cb292364c4843c795719a82b25dfe"},
@ -1093,7 +1094,7 @@ starlette = [
{file = "starlette-0.12.13.tar.gz", hash = "sha256:9597bc28e3c4659107c1c4a45ec32dc45e947d78fe56230222be673b2c36454a"}, {file = "starlette-0.12.13.tar.gz", hash = "sha256:9597bc28e3c4659107c1c4a45ec32dc45e947d78fe56230222be673b2c36454a"},
] ]
steam = [ steam = [
{file = "steam-1.0.1.tar.gz", hash = "sha256:7a2635dc46a18a86f608c8b9f8e042126cf9bd7b8e8e9ca6dcacb0998cb56ec5"}, {file = "steam-1.0.2.tar.gz", hash = "sha256:ca7c026848338ca2a004c0cb73d362c94e5c1a74815c8605d34fce3a6662f9c0"},
] ]
toml = [ toml = [
{file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"}, {file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"},
@ -1115,8 +1116,8 @@ tzlocal = [
{file = "tzlocal-2.1.tar.gz", hash = "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44"}, {file = "tzlocal-2.1.tar.gz", hash = "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44"},
] ]
urllib3 = [ urllib3 = [
{file = "urllib3-1.24.3-py2.py3-none-any.whl", hash = "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb"}, {file = "urllib3-1.25.9-py2.py3-none-any.whl", hash = "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"},
{file = "urllib3-1.24.3.tar.gz", hash = "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4"}, {file = "urllib3-1.25.9.tar.gz", hash = "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527"},
] ]
uvicorn = [ uvicorn = [
{file = "uvicorn-0.10.9-py3-none-any.whl", hash = "sha256:dc7119b28e15c4c737315c5a570081b0a5a7d8d5c1e8a70a7be70043d88b23a7"}, {file = "uvicorn-0.10.9-py3-none-any.whl", hash = "sha256:dc7119b28e15c4c737315c5a570081b0a5a7d8d5c1e8a70a7be70043d88b23a7"},
@ -1181,6 +1182,6 @@ yarl = [
{file = "yarl-1.4.2.tar.gz", hash = "sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b"}, {file = "yarl-1.4.2.tar.gz", hash = "sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b"},
] ]
youtube-dl = [ youtube-dl = [
{file = "youtube_dl-2020.6.6-py2.py3-none-any.whl", hash = "sha256:813310fb7ab265c379e9aebb2bd6cde6995f9a8f22a06d2ff81c05dfab7da864"}, {file = "youtube_dl-2020.6.16.1-py2.py3-none-any.whl", hash = "sha256:e54b307048bb18164729fb278013af6d5477c69c3d995147205a16f22a61296b"},
{file = "youtube_dl-2020.6.6.tar.gz", hash = "sha256:74e6cc7395060fc39f0b8e21c1e4707486da904c96145bd875187bda2da83b04"}, {file = "youtube_dl-2020.6.16.1.tar.gz", hash = "sha256:9fc0389a1bbbeb609a5bb4ad5630dea107a9d1a24c73721c611a78c234309a75"},
] ]

View file

@ -2,7 +2,7 @@
[tool.poetry] [tool.poetry]
name = "royalpack" name = "royalpack"
version = "5.8.23" version = "5.9.0"
description = "A Royalnet command pack for the Royal Games community" description = "A Royalnet command pack for the Royal Games community"
authors = ["Stefano Pigozzi <ste.pigozzi@gmail.com>"] authors = ["Stefano Pigozzi <ste.pigozzi@gmail.com>"]
license = "AGPL-3.0+" license = "AGPL-3.0+"
@ -25,7 +25,7 @@
steam = "*" steam = "*"
[tool.poetry.dependencies.royalnet] [tool.poetry.dependencies.royalnet]
version = "~5.8.14" version = "~5.9.2"
# Maybe... there is a way to make these selectable? # Maybe... there is a way to make these selectable?
extras = [ extras = [
"telegram", "telegram",

View file

@ -1,43 +1,31 @@
# Imports go here! # Imports go here!
from .api_bio_get import ApiBioGetStar from .api_bio import ApiBioSetStar
from .api_bio_set import ApiBioSetStar from .api_diario import ApiDiarioGetStar
from .api_diario_get import ApiDiarioGetStar from .api_diario_list import ApiDiarioPagesStar
from .api_diario_list import ApiDiarioListStar
from .api_discord_cv import ApiDiscordCvStar from .api_discord_cv import ApiDiscordCvStar
from .api_discord_play import ApiDiscordPlayStar from .api_discord_play import ApiDiscordPlayStar
from .api_wiki_edit import ApiWikiEditStar from .api_fiorygi import ApiFiorygiStar
from .api_wiki_get import ApiWikiGetStar
from .api_wiki_list import ApiWikiListStar
from .api_fiorygi_get import ApiFiorygiGetStar
from .api_diario_random import ApiDiarioRandomStar from .api_diario_random import ApiDiarioRandomStar
from .api_polls_create import ApiPollsCreate from .api_poll import ApiPollStar
from .api_polls_get import ApiPollsGet from .api_poll_list import ApiPollsListStar
from .api_polls_list import ApiPollsList
from .api_cvstats_latest import ApiCvstatsLatestStar from .api_cvstats_latest import ApiCvstatsLatestStar
from .api_cvstats_avg import ApiCvstatsAvgStar from .api_cvstats_avg import ApiCvstatsAvgStar
from .api_user_get_ryg import ApiUserGetRygStar from .api_user_ryg import ApiUserRygStar
from .api_user_find_ryg import ApiUserFindRygStar
# Enter the PageStars of your Pack here! # Enter the PageStars of your Pack here!
available_page_stars = [ available_page_stars = [
ApiBioGetStar,
ApiBioSetStar, ApiBioSetStar,
ApiDiarioGetStar, ApiDiarioGetStar,
ApiDiarioListStar, ApiDiarioPagesStar,
ApiDiscordCvStar, ApiDiscordCvStar,
ApiDiscordPlayStar, ApiDiscordPlayStar,
ApiWikiEditStar, ApiFiorygiStar,
ApiWikiGetStar,
ApiWikiListStar,
ApiFiorygiGetStar,
ApiDiarioRandomStar, ApiDiarioRandomStar,
ApiPollsCreate, ApiPollStar,
ApiPollsGet, ApiPollsListStar,
ApiPollsList,
ApiCvstatsLatestStar, ApiCvstatsLatestStar,
ApiCvstatsAvgStar, ApiCvstatsAvgStar,
ApiUserGetRygStar, ApiUserRygStar,
ApiUserFindRygStar,
] ]
# Don't change this, it should automatically generate __all__ # Don't change this, it should automatically generate __all__

View file

@ -0,0 +1,45 @@
import royalnet.utils as ru
from royalnet.backpack.tables import *
from royalnet.constellation.api import *
from ..tables import Bio
class ApiBioSetStar(ApiStar):
path = "/api/bio/v2"
methods = ["GET", "PUT"]
parameters = {
"get": {
"uid": "The id of the user to get the bio of."
},
"put": {
"contents": "The contents of the bio."
}
}
auth = {
"get": False,
"put": True,
}
tags = ["bio"]
async def get(self, data: ApiData) -> ru.JSON:
"""Get the bio of a specific user."""
user = await User.find(self.alchemy, data.session, data.int("uid"))
return user.bio.json() if user.bio else None
async def put(self, data: ApiData) -> ru.JSON:
"""Set the bio of current user."""
contents = data["contents"]
BioT = self.alchemy.get(Bio)
user = await data.user()
bio = user.bio
if bio is None:
bio = BioT(user=user, contents=contents)
data.session.add(bio)
else:
bio.contents = contents
await data.session_commit()
return bio.json()

View file

@ -1,22 +0,0 @@
from royalnet.utils import *
from royalnet.backpack.tables import *
from royalnet.constellation.api import *
from ..utils import find_user_api
class ApiBioGetStar(ApiStar):
path = "/api/bio/get/v1"
summary = "Get the bio of a Royalnet user."
parameters = {
"id": "The user to get the bio of."
}
tags = ["bio"]
async def api(self, data: ApiData) -> dict:
user = await find_user_api(data["id"], self.alchemy, data.session)
if user.bio is None:
raise NotFoundError("User has no bio set.")
return user.bio.json()

View file

@ -1,33 +0,0 @@
import royalnet.utils as ru
from royalnet.backpack.tables import *
from royalnet.constellation.api import *
from ..tables import Bio
class ApiBioSetStar(ApiStar):
path = "/api/bio/set/v1"
methods = ["PUT"]
summary = "Set the bio of the logged in Royalnet user."
parameters = {
"contents": "The contents of the bio."
}
requires_auth = True
tags = ["bio"]
async def api(self, data: ApiData) -> ru.JSON:
contents = data["contents"]
BioT = self.alchemy.get(Bio)
user = await data.user()
bio = user.bio
if bio is None:
bio = BioT(user=user, contents=contents)
data.session.add(bio)
else:
bio.contents = contents
await data.session_commit()
return bio.json()

View file

@ -7,13 +7,10 @@ from ..tables import Cvstats
class ApiCvstatsAvgStar(ApiStar): class ApiCvstatsAvgStar(ApiStar):
path = "/api/cvstats/avg/v1" path = "/api/cvstats/avg/v1"
methods = ["GET"]
summary = "Get some averages on the cvstats."
tags = ["cvstats"] tags = ["cvstats"]
async def api(self, data: ApiData) -> ru.JSON: async def get(self, data: ApiData) -> ru.JSON:
"""Get some averages on the cvstats."""
results = data.session.execute(""" results = data.session.execute("""
SELECT * SELECT *
FROM ( FROM (

View file

@ -7,13 +7,10 @@ from ..tables import Cvstats
class ApiCvstatsLatestStar(ApiStar): class ApiCvstatsLatestStar(ApiStar):
path = "/api/cvstats/latest/v1" path = "/api/cvstats/latest/v1"
methods = ["GET"]
summary = "Get the latest 500 cvstats."
tags = ["cvstats"] tags = ["cvstats"]
async def api(self, data: ApiData) -> ru.JSON: async def get(self, data: ApiData) -> ru.JSON:
"""Get the latest 500 cvstats recorded."""
CvstatsT = self.alchemy.get(Cvstats) CvstatsT = self.alchemy.get(Cvstats)
cvstats = data.session.query(CvstatsT).order_by(CvstatsT.timestamp.desc()).limit(500).all() cvstats = data.session.query(CvstatsT).order_by(CvstatsT.timestamp.desc()).limit(500).all()

View file

@ -4,21 +4,19 @@ from ..tables import *
class ApiDiarioGetStar(ApiStar): class ApiDiarioGetStar(ApiStar):
path = "/api/diario/get/v1" path = "/api/diario/v2"
summary = "Get the diario entry with a specific id."
parameters = { parameters = {
"id": "The id of the diario entry to get." "get": {
"id": "The id of the diario entry to get."
}
} }
tags = ["diario"] tags = ["diario"]
async def api(self, data: ApiData) -> dict: async def get(self, data: ApiData) -> JSON:
try: """Get a specific diario entry."""
diario_id = int(data["id"]) diario_id = data.int("id")
except ValueError:
raise InvalidParameterError("'id' is not a valid int.")
entry: Diario = await asyncify(data.session.query(self.alchemy.get(Diario)).get, diario_id) entry: Diario = await asyncify(data.session.query(self.alchemy.get(Diario)).get, diario_id)
if entry is None: if entry is None:
raise NotFoundError("No such diario entry.") raise NotFoundError("No such diario entry.")

View file

@ -4,18 +4,19 @@ from royalnet.utils import *
from ..tables import * from ..tables import *
class ApiDiarioListStar(ApiStar): class ApiDiarioPagesStar(ApiStar):
path = "/api/diario/list/v1" path = "/api/diario/pages/v1"
summary = "Get a list of up to 500 diario entries."
parameters = { parameters = {
"page": "The diario page you want to get. Can be negative to get the entries in reverse order." "get": {
"page": "The diario page you want to get. Can be negative to get the entries in reverse order."
}
} }
tags = ["diario"] tags = ["diario"]
async def api(self, data: ApiData) -> dict: async def get(self, data: ApiData) -> JSON:
"""Get a diario page made of up to 500 diario entries."""
page_str = data["page"] page_str = data["page"]
try: try:
page = int(page_str) page = int(page_str)

View file

@ -8,15 +8,16 @@ from sqlalchemy import func
class ApiDiarioRandomStar(ApiStar): class ApiDiarioRandomStar(ApiStar):
path = "/api/diario/random/v1" path = "/api/diario/random/v1"
summary = "Get random diario entries."
parameters = { parameters = {
"amount": "The number of diario entries to get." "get": {
"amount": "The number of diario entries to get."
}
} }
tags = ["diario"] tags = ["diario"]
async def api(self, data: ApiData) -> JSON: async def get(self, data: ApiData) -> JSON:
"""Get random diario entries."""
DiarioT = self.alchemy.get(Diario) DiarioT = self.alchemy.get(Diario)
try: try:
amount = int(data["amount"]) amount = int(data["amount"])

View file

@ -1,13 +1,15 @@
import royalnet.utils as ru
from royalnet.constellation.api import * from royalnet.constellation.api import *
class ApiDiscordCvStar(ApiStar): class ApiDiscordCvStar(ApiStar):
path = "/api/discord/cv/v1" path = "/api/discord/cv/v1"
summary = "Get the members status of a single Discord guild. Equivalent to calling /cv in a chat."
tags = ["discord"] tags = ["discord"]
async def api(self, data: ApiData) -> dict: async def get(self, data: ApiData) -> ru.JSON:
"""Get the members status of a single Discord guild.
Equivalent to calling /cv in a chat."""
response = await self.interface.call_herald_event("discord", "discord_cv") response = await self.interface.call_herald_event("discord", "discord_cv")
return response return response

View file

@ -7,19 +7,22 @@ log = logging.getLogger(__name__)
class ApiDiscordPlayStar(ApiStar): class ApiDiscordPlayStar(ApiStar):
path = "/api/discord/play/v1" path = "/api/discord/play/v2"
summary = "Add a audio file to the RoyalQueue of a Discord Guild." methods = ["POST"]
parameters = { parameters = {
"url": "The url of the audio file to add.", "post": {
"user": "The name to display in the File Added message.", "url": "The url of the audio file to add.",
"guild_id": "The id of the guild owning the RoyalQueue to add the audio file to." "user": "The name to display in the File Added message.",
"guild_id": "The id of the guild owning the RoyalQueue to add the audio file to.",
}
} }
tags = ["discord"] tags = ["discord"]
async def api(self, data: ApiData) -> dict: async def post(self, data: ApiData) -> dict:
"""Add a audio file to the RoyalQueue of a Discord Guild."""
url = data["url"] url = data["url"]
user = data.get("user") user = data.get("user")
guild_id_str = data.get("guild_id") guild_id_str = data.get("guild_id")

View file

@ -2,23 +2,23 @@ from typing import *
from royalnet.utils import * from royalnet.utils import *
from royalnet.backpack.tables import * from royalnet.backpack.tables import *
from royalnet.constellation.api import * from royalnet.constellation.api import *
from ..utils import find_user_api from ..tables import Fiorygi
from ..tables import Fiorygi, FiorygiTransaction
class ApiFiorygiGetStar(ApiStar): class ApiFiorygiStar(ApiStar):
path = "/api/user/fiorygi/get/v1" path = "/api/fiorygi/v2"
summary = "Get the fiorygi of a Royalnet user."
parameters = { parameters = {
"id": "The user to get the fiorygi of." "get": {
"uid": "The user to get the fiorygi of."
}
} }
tags = ["user"] tags = ["fiorygi"]
async def api(self, data: ApiData) -> JSON: async def get(self, data: ApiData) -> JSON:
user: User = await find_user_api(data["id"], self.alchemy, data.session) """Get fiorygi information about a specific user."""
user = await User.find(self.alchemy, data.session, data.int("uid"))
if user.fiorygi is None: if user.fiorygi is None:
return { return {
"fiorygi": 0, "fiorygi": 0,

View file

@ -0,0 +1,63 @@
from typing import *
import datetime
import uuid
from royalnet.utils import *
from royalnet.constellation.api import *
from ..tables import Poll
class ApiPollStar(ApiStar):
path = "/api/poll/v2"
parameters = {
"get": {
"uuid": "The UUID of the poll to get.",
},
"post": {
"question": "The question to ask in the poll.",
"description": "A longer Markdown-formatted description.",
"expires": "A ISO timestamp of the expiration date for the poll.",
}
}
auth = {
"get": False,
"post": True
}
methods = ["GET", "POST"]
tags = ["poll"]
async def get(self, data: ApiData) -> JSON:
"""Get a specific poll."""
PollT = self.alchemy.get(Poll)
try:
pid = uuid.UUID(data["uuid"])
except (ValueError, AttributeError, TypeError):
raise InvalidParameterError("'uuid' is not a valid UUID.")
poll: Poll = await asyncify(data.session.query(PollT).get, pid)
if poll is None:
raise NotFoundError("No such page.")
return poll.json()
async def post(self, data: ApiData) -> JSON:
"""Create a new poll."""
PollT = self.alchemy.get(Poll)
poll = PollT(
id=uuid.uuid4(),
creator=await data.user(),
created=datetime.datetime.now(),
expires=datetime.datetime.fromisoformat(data["expires"]) if "expires" in data else None,
question=data["question"],
description=data.get("description"),
)
data.session.add(poll)
await data.session_commit()
return poll.json()

View file

@ -5,16 +5,13 @@ from ..tables import Poll
import uuid import uuid
class ApiPollsList(ApiStar): class ApiPollsListStar(ApiStar):
path = "/api/polls/list/v1" path = "/api/poll/list/v2"
summary = "Get a list of all polls." tags = ["poll"]
requires_auth = True async def get(self, data: ApiData) -> JSON:
"""Get a list of all polls."""
tags = ["polls"]
async def api(self, data: ApiData) -> JSON:
PollT = self.alchemy.get(Poll) PollT = self.alchemy.get(Poll)
polls: List[Poll] = await asyncify(data.session.query(PollT).all) polls: List[Poll] = await asyncify(data.session.query(PollT).all)

View file

@ -1,41 +0,0 @@
from typing import *
import datetime
import uuid
from royalnet.utils import *
from royalnet.constellation.api import *
from ..tables import Poll
class ApiPollsCreate(ApiStar):
path = "/api/polls/create/v1"
summary = "Create a new poll."
parameters = {
"question": "The question to ask in the poll.",
"description": "A longer Markdown-formatted description.",
"expires": "A ISO timestamp of the expiration date for the poll.",
}
requires_auth = True
methods = ["POST"]
tags = ["polls"]
async def api(self, data: ApiData) -> JSON:
PollT = self.alchemy.get(Poll)
poll = PollT(
id=uuid.uuid4(),
creator=await data.user(),
created=datetime.datetime.now(),
expires=datetime.datetime.fromisoformat(data["expires"]) if "expires" in data else None,
question=data["question"],
description=data.get("description"),
)
data.session.add(poll)
await data.session_commit()
return poll.json()

View file

@ -1,34 +0,0 @@
from typing import *
import datetime
from royalnet.utils import *
from royalnet.constellation.api import *
from ..tables import Poll
import uuid
class ApiPollsGet(ApiStar):
path = "/api/polls/get/v1"
summary = "Get the poll with a specific id."
parameters = {
"uuid": "The UUID of the poll to get.",
}
requires_auth = True
tags = ["polls"]
async def api(self, data: ApiData) -> JSON:
PollT = self.alchemy.get(Poll)
try:
pid = uuid.UUID(data["uuid"])
except (ValueError, AttributeError, TypeError):
raise InvalidParameterError("'uuid' is not a valid UUID.")
poll: Poll = await asyncify(data.session.query(PollT).get, pid)
if poll is None:
raise NotFoundError("No such page.")
return poll.json()

View file

@ -1,42 +0,0 @@
import royalnet.constellation.api as rca
import royalnet.utils as ru
import royalnet.backpack.tables as rbt
class ApiUserGetRygStar(rca.ApiStar):
summary = "Ottieni le informazioni su un utente della Royal Games."
description = ""
methods = ["GET"]
path = "/api/user/get/ryg/v1"
requires_auth = False
parameters = {"id": "L'id dell'utente di cui vuoi vedere le informazioni."}
tags = ["user"]
async def get_user(self, data: rca.ApiData):
user_id_str = data["id"]
try:
user_id = int(user_id_str)
except (ValueError, TypeError):
raise rca.InvalidParameterError("'id' is not a valid int.")
user: rbt.User = await ru.asyncify(data.session.query(self.alchemy.get(rbt.User)).get, user_id)
if user is None:
raise rca.NotFoundError("No such user.")
return user
async def api(self, data: rca.ApiData) -> dict:
user = await self.get_user(data)
result = {
**user.json(),
"bio": user.bio.json() if user.bio is not None else None,
"fiorygi": user.fiorygi.fiorygi if user.fiorygi is not None else None,
"steam": [steam.json() for steam in user.steam],
"leagueoflegends": [leagueoflegends.json() for leagueoflegends in user.leagueoflegends],
"trivia": user.trivia_score.json() if user.trivia_score is not None else None
}
return result

View file

@ -1,31 +1,40 @@
import royalnet.constellation.api as rca import royalnet.constellation.api as rca
import royalnet.utils as ru import royalnet.utils as ru
import royalnet.backpack.tables as rbt import royalnet.backpack.tables as rbt
from .api_user_get_ryg import ApiUserGetRygStar
class ApiUserFindRygStar(ApiUserGetRygStar): class ApiUserRygStar(rca.ApiStar):
summary = "Ottieni le informazioni su un utente della Royal Games."
description = ""
methods = ["GET"] methods = ["GET"]
path = "/api/user/find/ryg/v1" path = "/api/user/ryg/v2"
requires_auth = False parameters = {
"get": {
parameters = {"alias": "L'alias dell'utente di cui vuoi vedere le informazioni."} "uid": "(Choose one) The id of the user to get information about.",
"alias": "(Choose one) The alias of the user to get information about.",
}
}
tags = ["user"] tags = ["user"]
async def get_user(self, data: rca.ApiData): async def get_user(self, data: rca.ApiData):
user = await rbt.User.find(self.alchemy, data.session, data["alias"]) uid = data.int("uid", optional=True)
alias = data.str("alias", optional=True)
if uid:
user = await rbt.User.find(self.alchemy, data.session, uid)
elif alias:
user = await rbt.User.find(self.alchemy, data.session, alias)
else:
raise rca.MissingParameterError("Neither uid or alias were specified.")
if user is None: if user is None:
raise rca.NotFoundError("No such user.") raise rca.NotFoundError("No such user.")
return user return user
async def api(self, data: rca.ApiData) -> dict: async def get(self, data: rca.ApiData) -> dict:
"""Get Royalpack information about a user."""
user = await self.get_user(data) user = await self.get_user(data)
result = { result = {
**user.json(), **user.json(),

View file

@ -1,64 +0,0 @@
import uuid
import royalnet.utils as ru
from royalnet.backpack.tables import *
from royalnet.constellation.api import *
from ..tables import WikiPage
class ApiWikiEditStar(ApiStar):
path = "/api/wiki/edit/v1"
methods = ["POST"]
summary = "Edit the contents of a wiki page, or create a new one."
parameters = {
"id": "The id of the wiki page to edit. Leave empty to create a new one.",
"title": "The new title of the wiki page.",
"contents": "The new contents of the wiki page.",
"format": "The format of the wiki page. The default is markdown.",
"theme": "The theme of the wiki page. The default is default."
}
requires_auth = True
tags = ["wiki"]
async def api(self, data: ApiData) -> ru.JSON:
page_id = data.get("id")
title = data["title"]
contents = data["contents"]
format = data["format"]
theme = data["theme"]
WikiPageT = self.alchemy.get(WikiPage)
user = await data.user()
if not ("admin" in user.roles or "member" in user.roles or "bot" in user.roles):
raise ForbiddenError("You do not have sufficient permissions to edit this page.")
if page_id is None:
page = WikiPageT(
page_id=uuid.uuid4(),
title=title,
contents=contents,
format=format,
theme=theme
)
data.session.add(page)
else:
page = await ru.asyncify(
data.session
.query(WikiPageT)
.filter_by(page_id=uuid.UUID(page_id))
.one_or_none
)
if page is None:
raise NotFoundError(f"No page with the id {repr(page_id)} found.")
page.title = title
page.contents = contents
page.format = format
page.theme = theme
await data.session_commit()
return page.json_full()

View file

@ -1,30 +0,0 @@
from starlette.requests import Request
from starlette.responses import *
from royalnet.constellation import *
from royalnet.utils import *
from ..tables import *
import uuid
from royalnet.constellation.api import *
class ApiWikiGetStar(ApiStar):
path = "/api/wiki/get/v1"
summary = "Get information about a specific wiki page."
parameters = {
"id": "The id of the wiki page to get information for."
}
tags = ["wiki"]
async def api(self, data: ApiData) -> dict:
wikipage_id_str = data["id"]
try:
wikipage_id = uuid.UUID(wikipage_id_str)
except (ValueError, AttributeError, TypeError):
raise InvalidParameterError("'id' is not a valid UUID.")
wikipage: WikiPage = await asyncify(data.session.query(self.alchemy.get(WikiPage)).get, wikipage_id)
if wikipage is None:
raise NotFoundError("No such page.")
return wikipage.json_full()

View file

@ -1,19 +0,0 @@
from starlette.requests import Request
from starlette.responses import *
from royalnet.constellation import *
from royalnet.utils import *
from royalnet.backpack.tables import *
from ..tables import *
from royalnet.constellation.api import *
class ApiWikiListStar(ApiStar):
path = "/api/wiki/list/v1"
summary = "Get a list of available wiki pages."
tags = ["wiki"]
async def api(self, data: ApiData) -> JSON:
pages: typing.List[WikiPage] = await asyncify(data.session.query(self.alchemy.get(WikiPage)).all)
return [page.json_list() for page in sorted(pages, key=lambda p: p.title)]

View file

@ -1,9 +1,7 @@
from .royalqueue import RoyalQueue from .royalqueue import RoyalQueue
from .finduser import find_user_api
from .royalpool import RoyalPool from .royalpool import RoyalPool
__all__ = [ __all__ = [
"RoyalQueue", "RoyalQueue",
"find_user_api",
"RoyalPool", "RoyalPool",
] ]

View file

@ -1,19 +0,0 @@
from typing import *
from royalnet.constellation.api import *
from royalnet.backpack.tables.users import User
from royalnet.utils import asyncify
async def find_user_api(input: Union[int, str], alchemy, session):
if isinstance(input, int):
user_id = input
elif isinstance(input, str):
try:
user_id = int(input)
except ValueError:
raise InvalidParameterError(f"Invalid user id passed to {find_user_api.__name__}")
else:
raise TypeError(f"Invalid input type passed to {find_user_api.__name__}")
user: User = await asyncify(session.query(alchemy.get(User)).get, user_id)
if user is None:
raise NotFoundError("No such user.")
return user