59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
|
import tornado.gen
|
||
|
import tornado.web
|
||
|
|
||
|
from common.sentry import sentry
|
||
|
from common.web import requestsManager
|
||
|
from common.web import cheesegull
|
||
|
from constants import exceptions
|
||
|
from common.log import logUtils as log
|
||
|
|
||
|
MODULE_NAME = "direct"
|
||
|
class handler(requestsManager.asyncRequestHandler):
|
||
|
"""
|
||
|
Handler for /web/osu-search.php
|
||
|
"""
|
||
|
@tornado.web.asynchronous
|
||
|
@tornado.gen.engine
|
||
|
@sentry.captureTornado
|
||
|
def asyncGet(self):
|
||
|
output = ""
|
||
|
try:
|
||
|
try:
|
||
|
# Get arguments
|
||
|
gameMode = self.get_argument("m", None)
|
||
|
if gameMode is not None:
|
||
|
gameMode = int(gameMode)
|
||
|
if gameMode < 0 or gameMode > 3:
|
||
|
gameMode = None
|
||
|
|
||
|
rankedStatus = self.get_argument("r", None)
|
||
|
if rankedStatus is not None:
|
||
|
rankedStatus = int(rankedStatus)
|
||
|
|
||
|
query = self.get_argument("q", "")
|
||
|
page = int(self.get_argument("p", "0"))
|
||
|
if query.lower() in ["newest", "top rated", "most played"]:
|
||
|
query = ""
|
||
|
except ValueError:
|
||
|
raise exceptions.invalidArgumentsException(MODULE_NAME)
|
||
|
|
||
|
# Get data from cheesegull API
|
||
|
log.info("Requested osu!direct search: {}".format(query if query != "" else "index"))
|
||
|
searchData = cheesegull.getListing(rankedStatus=cheesegull.directToApiStatus(rankedStatus), page=page * 100, gameMode=gameMode, query=query)
|
||
|
if searchData is None or searchData is None:
|
||
|
raise exceptions.noAPIDataError()
|
||
|
|
||
|
# Write output
|
||
|
output += "999" if len(searchData) == 100 else str(len(searchData))
|
||
|
output += "\n"
|
||
|
for beatmapSet in searchData:
|
||
|
try:
|
||
|
output += cheesegull.toDirect(beatmapSet) + "\r\n"
|
||
|
except ValueError:
|
||
|
# Invalid cheesegull beatmap (empty beatmapset, cheesegull bug? See Sentry #LETS-00-32)
|
||
|
pass
|
||
|
except (exceptions.noAPIDataError, exceptions.invalidArgumentsException):
|
||
|
output = "0\n"
|
||
|
finally:
|
||
|
self.write(output)
|