예제 #1
0
from src.queries.get_savers_for_track import get_savers_for_track
from src.queries.get_tracks_including_unlisted import get_tracks_including_unlisted
from src.queries.get_stems_of import get_stems_of
from src.queries.get_remixes_of import get_remixes_of
from src.queries.get_remix_track_parents import get_remix_track_parents
from src.queries.get_trending_ids import get_trending_ids
from src.queries.get_trending import TRENDING_LIMIT, TRENDING_TTL_SEC, get_trending

logger = logging.getLogger(__name__)

# Models & namespaces

ns = Namespace('tracks', description='Track related operations')
full_ns = Namespace('tracks', description='Full track operations')

track_response = make_response("track_response", ns, fields.Nested(track))
full_track_response = make_full_response("full_track_response", full_ns,
                                         fields.Nested(track_full))

tracks_response = make_response("tracks_response", ns,
                                fields.List(fields.Nested(track)))
full_tracks_response = make_full_response(
    "full_tracks_response", full_ns, fields.List(fields.Nested(track_full)))

# Get single track


def get_single_track(track_id, current_user_id, endpoint_ns):
    args = {
        "id": [track_id],
        "with_users": True,
예제 #2
0
from src.api.v1.helpers import abort_not_found, decode_with_abort, extend_playlist, extend_track, make_full_response,\
    make_response, success_response, search_parser, abort_bad_request_param, decode_string_id, \
    extend_user, get_default_max, get_current_user_id
from .models.tracks import track
from src.queries.search_queries import SearchKind, search
from src.utils.redis_cache import cache
from src.utils.redis_metrics import record_metrics
from src.queries.get_reposters_for_playlist import get_reposters_for_playlist
from src.queries.get_savers_for_playlist import get_savers_for_playlist

logger = logging.getLogger(__name__)

ns = Namespace('playlists', description='Playlist related operations')
full_ns = Namespace('playlists', description='Full playlist related operations')

playlists_response = make_response("playlist_response", ns, fields.List(fields.Nested(playlist_model)))
full_playlists_response = make_full_response("full_playlist_response", full_ns, fields.List(fields.Nested(full_playlist_model)))

def get_playlist(playlist_id, current_user_id):
    """Returns a single playlist, or None"""
    args = {
        "playlist_id": [playlist_id],
        "with_users": True,
        "current_user_id": current_user_id
    }
    playlists = get_playlists(args)
    if playlists:
        return extend_playlist(playlists[0])
    return None

def get_tracks_for_playlist(playlist_id, current_user_id=None):
예제 #3
0
    parse_bool_param, parse_unix_epoch_param, abort_bad_request_param
from .models.metrics import route_metric, app_name_metric, app_name, plays_metric, \
    genre_metric, route_trailing_metric, app_name_trailing_metric
from src.queries.get_route_metrics import get_route_metrics
from src.queries.get_app_name_metrics import get_app_name_metrics
from src.queries.get_app_names import get_app_names
from src.queries.get_trailing_metrics import get_monthly_trailing_route_metrics, \
    get_trailing_app_metrics
from src.utils.redis_cache import cache

logger = logging.getLogger(__name__)


ns = Namespace('metrics', description='Metrics related operations')

route_metrics_response = make_response("metrics_reponse", ns, fields.List(fields.Nested(route_metric)))
route_metrics_trailing_month_response = make_response("route_metrics_trailing_month_response", ns, fields.Nested(route_trailing_metric))
app_name_response = make_response("app_name_response", ns, fields.List(fields.Nested(app_name)))
app_name_trailing_response = make_response("app_name_trailing_response", ns, fields.List(fields.Nested(app_name_trailing_metric)))
app_name_metrics_response = make_response("app_name_metrics_response", ns, fields.List(fields.Nested(app_name_metric)))
plays_metrics_response = make_response("plays_metrics", ns, fields.List(fields.Nested(plays_metric)))
genre_metrics_response = make_response("genre_metrics", ns, fields.List(fields.Nested(genre_metric)))

metrics_route_parser = reqparse.RequestParser()
metrics_route_parser.add_argument('path', required=False)
metrics_route_parser.add_argument('query_string', required=False)
metrics_route_parser.add_argument('start_time', required=False, type=int)
metrics_route_parser.add_argument('exact', required=False)
metrics_route_parser.add_argument('limit', required=False, type=int)
metrics_route_parser.add_argument('bucket_size', required=False)
metrics_route_parser.add_argument('version', required=False, action='append')
예제 #4
0
from src.api.v1.models.users import user_model_full
from src.queries.get_reposters_for_track import get_reposters_for_track
from src.queries.get_savers_for_track import get_savers_for_track
from src.queries.get_tracks_including_unlisted import get_tracks_including_unlisted
from src.queries.get_stems_of import get_stems_of
from src.queries.get_remixes_of import get_remixes_of
from src.queries.get_remix_track_parents import get_remix_track_parents

logger = logging.getLogger(__name__)

# Models & namespaces

ns = Namespace('tracks', description='Track related operations')
full_ns = Namespace('tracks', description='Full track operations')

track_response = make_response("track_response", ns, fields.Nested(track))
full_track_response = make_full_response(
    "full_track_response", full_ns, fields.Nested(track_full))

tracks_response = make_response(
    "tracks_response", ns, fields.List(fields.Nested(track)))
full_tracks_response = make_full_response(
    "full_tracks_response", full_ns, fields.List(fields.Nested(track_full))
)

# Get single track

def get_single_track(track_id, current_user_id, endpoint_ns):
    args = {
        "id": [track_id],
        "with_users": True,
예제 #5
0
from src.api.v1.helpers import abort_not_found, decode_with_abort, extend_activity, extend_favorite, extend_track, \
    extend_user, format_limit, format_offset, get_current_user_id, make_full_response, make_response, search_parser, success_response, abort_bad_request_param, \
    get_default_max, encode_int_id
from .models.tracks import track, track_full
from .models.activities import activity_model, activity_model_full
from src.utils.redis_cache import cache
from src.utils.redis_metrics import record_metrics
from src.queries.get_top_genre_users import get_top_genre_users

logger = logging.getLogger(__name__)

ns = Namespace('users', description='User related operations')
full_ns = Namespace('users', description='Full user operations')

user_response = make_response("user_response", ns, fields.Nested(user_model))
full_user_response = make_full_response(
    "full_user_response", full_ns, fields.List(fields.Nested(user_model_full)))


def get_single_user(user_id, current_user_id):
    args = {"id": [user_id], "current_user_id": current_user_id}
    users = get_users(args)
    if not users:
        abort_not_found(user_id, ns)
    user = extend_user(users[0])
    return success_response(user)


USER_ROUTE = "/<string:user_id>"
예제 #6
0
import logging  # pylint: disable=C0302
from datetime import datetime
from flask import Flask, Blueprint
from flask_restx import Resource, Namespace, fields, reqparse
from src import api_helpers
from src.api.v1.helpers import make_response, success_response, to_dict
from .models.metrics import route_metric, app_name_metric, app_name
from src.queries.get_route_metrics import get_route_metrics
from src.queries.get_app_name_metrics import get_app_name_metrics
from src.queries.get_app_names import get_app_names

logger = logging.getLogger(__name__)

ns = Namespace('metrics', description='Metrics related operations')

route_metrics_response = make_response(
    "metrics_reponse", ns, fields.List(fields.Nested(route_metric)))
app_name_response = make_response("app_name_response", ns,
                                  fields.List(fields.Nested(app_name)))
app_name_metrics_response = make_response(
    "app_name_metrics_response", ns,
    fields.List(fields.Nested(app_name_metric)))

metrics_route_parser = reqparse.RequestParser()
metrics_route_parser.add_argument('path', required=True)
metrics_route_parser.add_argument('query_string', required=False)
metrics_route_parser.add_argument('start_time', required=True, type=int)
metrics_route_parser.add_argument('limit', required=False, type=int)
metrics_route_parser.add_argument('version', required=False, action='append')


@ns.route("/routes", doc=False)
예제 #7
0
from src.api.v1.helpers import abort_not_found, decode_with_abort, extend_activity, extend_favorite, extend_track, \
    extend_user, format_limit, format_offset, get_current_user_id, make_full_response, make_response, search_parser, success_response, abort_bad_request_param, \
    get_default_max
from .models.tracks import track, track_full
from .models.activities import activity_model, activity_model_full
from src.utils.redis_cache import cache
from src.utils.redis_metrics import record_metrics
from src.queries.get_top_genre_users import get_top_genre_users

logger = logging.getLogger(__name__)

ns = Namespace('users', description='User related operations')
full_ns = Namespace('users', description='Full user operations')

user_response = make_response("user_response", ns, fields.Nested(user_model))
full_user_response = make_full_response(
    "full_user_response", full_ns, fields.List(fields.Nested(user_model_full)))


def get_single_user(user_id, current_user_id):
    args = {"id": [user_id], "current_user_id": current_user_id}
    users = get_users(args)
    if not users:
        abort_not_found(user_id, ns)
    user = extend_user(users[0])
    return success_response(user)


USER_ROUTE = "/<string:user_id>"
예제 #8
0
get_reactions_parser = reqparse.RequestParser(
    argument_class=DescriptiveArgument)
get_reactions_parser.add_argument(
    "type",
    required=False,
    description="The type of reactions for which to query.")
get_reactions_parser.add_argument(
    "tx_signatures",
    required=True,
    action="split",
    description=
    "The `reacted_to` transaction id(s) of the reactions in question.",
)

get_reactions_response = make_response("reactions", ns,
                                       fields.List(fields.Nested(reaction)))


@ns.route("")
class BulkReactions(Resource):
    @record_metrics
    @ns.doc(
        id="Bulk get Reactions",
        description="Gets reactions by transaction_id and type",
        responses={
            200: "Success",
            400: "Bad request",
            500: "Server error"
        },
    )
    @ns.expect(get_reactions_parser)
예제 #9
0
from src.utils import web3_provider
from src.utils.auth_middleware import auth_middleware
from src.utils.db_session import get_db_read_replica
from src.utils.helpers import encode_int_id
from src.utils.redis_cache import cache
from src.utils.redis_metrics import record_metrics

from .models.activities import activity_model, activity_model_full
from .models.tracks import track, track_full

logger = logging.getLogger(__name__)

ns = Namespace("users", description="User related operations")
full_ns = Namespace("users", description="Full user operations")

user_response = make_response("user_response", ns, fields.Nested(user_model))
full_user_response = make_full_response(
    "full_user_response", full_ns, fields.List(fields.Nested(user_model_full))
)


def get_single_user(user_id, current_user_id):
    args = {"id": [user_id], "current_user_id": current_user_id}
    users = get_users(args)
    if not users:
        abort_not_found(user_id, ns)
    user = extend_user(users[0], current_user_id)
    return success_response(user)


USER_ROUTE = "/<string:id>"
예제 #10
0
    undisbursed_challenge,
)
from src.queries.get_attestation import (
    AttestationError,
    get_attestation,
    get_create_sender_attestation,
)
from src.queries.get_undisbursed_challenges import get_undisbursed_challenges
from src.utils.db_session import get_db_read_replica
from src.utils.redis_cache import cache

logger = logging.getLogger(__name__)

ns = Namespace("challenges", description="Challenge related operations")

attestation_response = make_response("attestation_reponse", ns,
                                     fields.Nested(attestation))

attest_route = "/<string:challenge_id>/attest"

attest_parser = reqparse.RequestParser(argument_class=DescriptiveArgument)
attest_parser.add_argument(
    "oracle",
    required=True,
    description="The address of a valid, registered Anti-Abuse Oracle",
)
attest_parser.add_argument(
    "specifier",
    required=True,
    description="The specifier of the user challenge requiring the attestation",
)
attest_parser.add_argument(
예제 #11
0
from src.queries.get_saves import get_saves
from src.queries.get_users import get_users
from src.queries.search_queries import SearchKind, search
from flask_restx import Resource, Namespace, fields
from src.queries.get_tracks import get_tracks
from src.api.v1.helpers import abort_not_found, decode_with_abort, extend_favorite, extend_track, \
     extend_user, make_response, search_parser, success_response
from .models.tracks import track
from src.utils.redis_cache import cache
from src.utils.redis_metrics import record_metrics

logger = logging.getLogger(__name__)

ns = Namespace('users', description='User related operations')

user_response = make_response("user_response", ns, fields.Nested(user_model))


@ns.route("/<string:user_id>")
class User(Resource):
    @record_metrics
    @ns.doc(id="""Get User""",
            params={'user_id': 'A User ID'},
            responses={
                200: 'Success',
                400: 'Bad request',
                500: 'Server error'
            })
    @ns.marshal_with(user_response)
    @cache(ttl_sec=5)
    def get(self, user_id):