Beispiel #1
0
def get_administrators(page=1, limit=10):
    """Retrieves a list of administrators
    :param page: Page number
    :type page: int
    :param limit: Maximum number of results to show
    :type limit: int
    :returns: JSON string of list of administrators; status code
    :rtype: (str, int)
    """

    # initialize query
    query = Query.make(
        Administrator, Administrator.id.asc(), {
            'id.asc': Administrator.id.asc(),
            'id.desc': Administrator.id.desc(),
            'username.asc': Administrator.username.asc(),
            'username.desc': Administrator.username.desc(),
            'joined_at.asc': Administrator.joined_at.asc(),
            'joined_at.desc': Administrator.joined_at.desc(),
            'created_at.asc': Administrator.created_at.asc(),
            'created_at.desc': Administrator.created_at.desc(),
            'updated_at.asc': Administrator.updated_at.asc(),
            'updated_at.desc': Administrator.updated_at.desc(),
        }, request.args, Query.STATUS_FILTER_ADMIN)

    # filter query based on URL parameters
    if request.args.get('role', '').isnumeric():
        query = query.filter(
            Administrator.roles.any(Role.id == int(request.args.get('role'))))
    if request.args.get('username', None) is not None:
        query = query.filter(
            Administrator.username.ilike('%' + request.args.get('username') +
                                         '%'))
    if request.args.get('email', None) is not None:
        temp_user = Administrator(email=request.args.get('email'))
        query = query.filter(
            Administrator.email_digest == temp_user.email_digest)

    # retrieve and return results
    results = list(query.limit(limit).offset((page - 1) * limit))
    if len(results) > 0:

        # prep initial output
        output = {
            'administrators':
            AdministratorAdminSchema(many=True).dump(results),
            'page': page,
            'limit': limit,
            'total': query.count()
        }

        # add pagination URIs and return
        output.update(
            Pager.get_uris('admin_administrators.get_administrators', page,
                           limit, output['total'], request.args))
        return jsonify(output), 200

    return '', 204
def get_roles(page=1, limit=10, role_type=None):
    """Retrieves a list of roles.

    :param page: Page number
    :type page: int
    :param limit: Maximum number of results to show
    :type limit: int
    :param role_type: Type of role to filter by: `admin` | `user`
    :type role_type: str
    :returns: JSON string of list of roles; status code
    :rtype: (str, int)
    """

    # initialize query
    query = Query.make(
        Role, Role.id.asc(), {
            'id.asc': Role.id.asc(),
            'id.desc': Role.id.desc(),
            'name.asc': Role.name.asc(),
            'name.desc': Role.name.desc(),
            'created_at.asc': Role.created_at.asc(),
            'created_at.desc': Role.created_at.desc(),
            'updated_at.asc': Role.updated_at.asc(),
            'updated_at.desc': Role.updated_at.desc(),
        }, request.args, Query.STATUS_FILTER_NONE)

    # filter query based on URL parameters
    if role_type in ['admin', 'user']:
        query = query.filter(Role.is_admin_role == bool(role_type == 'admin'))
    if request.args.get('name', None) is not None:
        query = query.filter(
            Role.name.ilike('%' + request.args.get('name') + '%'))

    # retrieve and return results
    results = list(query.limit(limit).offset((page - 1) * limit))
    if len(results) > 0:

        # prep initial output
        output = {
            'roles': RoleAdminSchema(many=True).dump(results),
            'page': page,
            'limit': limit,
            'total': query.count()
        }

        # add pagination URIs and return
        output.update(
            Pager.get_uris('admin_roles.get_roles',
                           page,
                           limit,
                           output['total'],
                           request.args,
                           role_type=role_type))
        return jsonify(output), 200

    return '', 204
Beispiel #3
0
def get_logins(page=1, limit=25):
    """Retrieves a list of logins.

    :param page: Page number
    :type page: int
    :param limit: Maximum number of results to show
    :type limit: int
    :returns: JSON string of list of logins; status code
    :rtype: (str, int)
    """

    # initialize query
    query = Query.make(
        Login, Login.id.asc(), {
            'id.asc': Login.id.asc(),
            'id.desc': Login.id.desc(),
            'attempt_date.asc': Login.attempt_date.asc(),
            'attempt_date.desc': Login.attempt_date.desc(),
        }, request.args, Query.STATUS_FILTER_NONE)

    # filter query based on URL parameters
    if request.args.get('user_id', None) is not None:
        query = query.filter(Login.user_id == request.args.get('user_id'))
    if request.args.get('username', None) is not None:
        query = query.filter(
            Login.username.ilike('%' + request.args.get('username') + '%'))
    if request.args.get('ip_address', None) is not None:
        query = query.filter(
            Login.ip_address.ilike('%' + request.args.get('ip_address') + '%'))
    if request.args.get('api', None) is not None:
        query = query.filter(Login.api.in_(request.args.get('api').split(',')))
    if request.args.get('success', None) is not None:
        query = query.filter(
            Login.success.in_(request.args.get('success').split(',')))

    # retrieve and return results
    results = list(query.limit(limit).offset((page - 1) * limit))
    if len(results) > 0:

        # prep initial output
        output = {
            'logins': LoginAdminSchema(many=True).dump(results),
            'page': page,
            'limit': limit,
            'total': query.count()
        }

        # add pagination URIs and return
        output.update(
            Pager.get_uris('admin_logins.get_logins', page, limit,
                           output['total'], request.args))
        return jsonify(output), 200

    return '', 204
Beispiel #4
0
def get_app_keys(page=1, limit=10):
    """Retrieves a list of application keys

    :param page: Page number
    :type page: int
    :param limit: Maximum number of results to show
    :type limit: int
    :returns: JSON string of list of application keys; status code
    :rtype: (str, int)
    """

    # initialize query
    query = Query.make(
        AppKey, AppKey.id.asc(), {
            'id.asc': AppKey.id.asc(),
            'id.desc': AppKey.id.desc(),
            'application.asc': AppKey.application.asc(),
            'application.desc': AppKey.application.desc(),
            'created_at.asc': AppKey.created_at.asc(),
            'created_at.desc': AppKey.created_at.desc(),
            'updated_at.asc': AppKey.updated_at.asc(),
            'updated_at.desc': AppKey.updated_at.desc(),
        }, request.args, Query.STATUS_FILTER_ADMIN)

    # filter query based on URL parameters
    if request.args.get('application', None) is not None:
        query = query.filter(
            AppKey.application.ilike('%' + request.args.get('application') +
                                     '%'))
    if request.args.get('key', None) is not None:
        query = query.filter(
            AppKey.key.ilike('%' + request.args.get('key') + '%'))

    # retrieve and return results
    results = list(query.limit(limit).offset((page - 1) * limit))
    if len(results) > 0:

        # prep initial output
        output = {
            'app_keys': AppKeyAdminSchema(many=True).dump(results),
            'page': page,
            'limit': limit,
            'total': query.count()
        }

        # add pagination URIs and return
        output.update(
            Pager.get_uris('admin_app_keys.get_app_keys', page, limit,
                           output['total'], request.args))
        return jsonify(output), 200

    return '', 204
Beispiel #5
0
def get_notifications(page=1, limit=10):
    """Retrieves a list of notifications.

    :param page: Page number
    :type page: int
    :param limit: Maximum number of results to show
    :type limit: int
    :returns: JSON string of list of notifications; status code
    :rtype: (str, int)
    """

    # initialize query
    query = Query.make(
        Notification,
        Notification.id.asc(),
        {
            'id.asc': Notification.id.asc(),
            'id.desc': Notification.id.desc(),
            'sent_at.asc': Notification.sent_at.asc(),
            'sent_at.desc': Notification.sent_at.desc(),
        },
        request.args,
        Query.STATUS_FILTER_ADMIN)

    # filter query based on URL parameters
    if request.args.get('user_id', None) is not None:
        query = query.filter(
            Notification.user_id == request.args.get('user_id'))
    if request.args.get('channel', None) is not None:
        query = query.filter(
            Notification.channel == request.args.get('channel'))

    # retrieve and return results
    results = list(query.limit(limit).offset((page - 1) * limit))
    if len(results) > 0:

        # prep initial output
        output = {
            'notifications': NotificationAdminSchema(many=True).dump(results),
            'page': page,
            'limit': limit,
            'total': query.count()
        }

        # add pagination URIs and return
        output.update(
            Pager.get_uris('admin_notifications.get_notifications', page,
                           limit, output['total'], request.args))
        return jsonify(output), 200

    return '', 204
Beispiel #6
0
def test_pager_get_uris(app):
    with app.app_context():

        # mock a route
        def mock_path(page=1, limit=10):
            pass

        public = Blueprint('pager_test', __name__)
        public.route("/mock_path/<int:page>/<int:limit>",
                     methods=['GET'])(mock_path)
        app.register_blueprint(public)

        # single page of results
        assert Pager.get_uris('pager_test.mock_path', 1, 20, 10, {}) == {}

        # first page of results
        assert Pager.get_uris('pager_test.mock_path', 1, 10, 50, {}) == {
            'next_uri': 'http://localhost/mock_path/2/10'
        }

        # second page of results
        assert Pager.get_uris('pager_test.mock_path', 2, 15, 50, {}) == {
            'previous_uri': 'http://localhost/mock_path/1/15',
            'next_uri': 'http://localhost/mock_path/3/15'
        }

        # last page of results
        assert Pager.get_uris('pager_test.mock_path', 5, 10, 50, {}) == {
            'previous_uri': 'http://localhost/mock_path/4/10'
        }

        # first page of results with args
        assert Pager.get_uris('pager_test.mock_path', 1, 10, 50,
                              {'foo': 'bar'}) == {
                                  'next_uri':
                                  'http://localhost/mock_path/2/10?foo=bar'
                              }

        # second page of results with args
        assert Pager.get_uris('pager_test.mock_path', 2, 15, 50,
                              {'foo': 'bar'}) == {
                                  'previous_uri':
                                  'http://localhost/mock_path/1/15?foo=bar',
                                  'next_uri':
                                  'http://localhost/mock_path/3/15?foo=bar'
                              }

        # last page of results with args
        assert Pager.get_uris('pager_test.mock_path', 5, 10, 50,
                              {'foo': 'bar'}) == {
                                  'previous_uri':
                                  'http://localhost/mock_path/4/10?foo=bar'
                              }
def get_regions(country_code, page=1, limit=100):
    """Retrieves a list of regions (states).

    :param country_code: The two character country code to filter regions by
    :type country_code: str
    :param page: Page number
    :type page: int
    :param limit: Maximum number of results to show
    :type limit: int
    :returns: JSON string of list of regions; status code
    :rtype: (str, int)
    """

    # initialize query
    query = Query.make(
        Region,
        Region.name.asc(),
        {
            'id.asc': Region.id.asc(),
            'id.desc': Region.id.desc(),
            'name.asc': Region.name.asc(),
            'name.desc': Region.name.desc(),
            'code_2.asc': Region.code_2.asc(),
            'code_2.desc': Region.code_2.desc(),
        },
        request.args,
        Query.STATUS_FILTER_USER)

    query = query.filter(Region.country.has(code_2=country_code))

    # retrieve and return results
    results = list(query.limit(limit).offset((page - 1) * limit))
    if len(results) > 0:

        # prep initial output
        output = {
            'regions': RegionSchema(many=True).dump(results),
            'page': page,
            'limit': limit,
            'total': query.count()
        }

        # add pagination URIs and return
        output.update(
            Pager.get_uris('public_locations.get_regions', page, limit,
                           output['total'], request.args,
                           country_code=country_code))
        return jsonify(output), 200

    return '', 204
def get_countries(page=1, limit=250):
    """Retrieves a list of countries.

    :param page: Page number
    :type page: int
    :param limit: Maximum number of results to show
    :type limit: int
    :returns: JSON string of list of countries; status code
    :rtype: (str, int)
    """

    # initialize query
    query = Query.make(
        Country,
        Country.name.asc(),
        {
            'id.asc': Country.id.asc(),
            'id.desc': Country.id.desc(),
            'name.asc': Country.name.asc(),
            'name.desc': Country.name.desc(),
            'code_2.asc': Country.code_2.asc(),
            'code_2.desc': Country.code_2.desc(),
            'code_3.asc': Country.code_3.asc(),
            'code_3.desc': Country.code_3.desc(),
        },
        request.args,
        Query.STATUS_FILTER_USER)

    # retrieve and return results
    results = list(query.limit(limit).offset((page - 1) * limit))
    if len(results) > 0:

        # prep initial output
        output = {
            'countries': CountrySchema(many=True).dump(results),
            'page': page,
            'limit': limit,
            'total': query.count()
        }

        # add pagination URIs and return
        output.update(Pager.get_uris('public_locations.get_countries', page,
                                     limit, output['total'], request.args))
        return jsonify(output), 200

    return '', 204
Beispiel #9
0
def get_terms_of_services(page=1, limit=10):
    """Retrieves a list of terms of service.

    :param page: Page number
    :type page: int
    :param limit: Maximum number of results to show
    :type limit: int
    :returns: JSON string of list of terms of service; status code
    :rtype: (str, int)
    """

    # initialize query
    query = Query.make(
        TermsOfService, TermsOfService.id.asc(), {
            'id.asc': TermsOfService.id.asc(),
            'id.desc': TermsOfService.id.desc(),
            'publish_date.asc': TermsOfService.publish_date.asc(),
            'publish_date.desc': TermsOfService.publish_date.desc(),
            'version.asc': TermsOfService.version.asc(),
            'version.desc': TermsOfService.version.desc(),
            'created_at.asc': TermsOfService.created_at.asc(),
            'created_at.desc': TermsOfService.created_at.desc(),
            'updated_at.asc': TermsOfService.updated_at.asc(),
            'updated_at.desc': TermsOfService.updated_at.desc(),
        }, request.args, Query.STATUS_FILTER_ADMIN)

    # retrieve and return results
    results = list(query.limit(limit).offset((page - 1) * limit))
    if len(results) > 0:

        # prep initial output
        output = {
            'terms_of_services':
            TermsOfServiceAdminSchema(many=True).dump(results),
            'page': page,
            'limit': limit,
            'total': query.count()
        }

        # add pagination URIs and return
        output.update(
            Pager.get_uris('admin_terms_of_services.get_terms_of_services',
                           page, limit, output['total'], request.args))
        return jsonify(output), 200

    return '', 204