Exemple #1
0
class CollateralList(PaginatedListAPI):
    serializer = CollateralSerializer()

    id = StringParam("Id filter")
    debt_id = StringParam("debt_id filter")
    token = StringParam("token filter")
    ##
    oracle = StringParam("oracle filter")
    liquidation_ratio = StringParam("liquidation_ratio filter")
    balance_ration = StringParam("balance_ration filter")
    burn_fee = StringParam("burn_fee filter")
    reward_fee = StringParam("reward_fee filter")
    amount = StringParam("amount filter")
    status = StringParam("status filter")

    def list(self, params, meta, **kwargs):
        filter_params = params.copy()
        filter_params.pop("indent")

        page_size = filter_params.pop("page_size")
        page = filter_params.pop("page")

        offset = page * page_size

        all_objects = Collateral.objects.filter(**filter_params)
        count_objects = all_objects.count()
        meta["resource_count"] = count_objects

        return all_objects.skip(offset).limit(page_size)
Exemple #2
0
class EventsResource(ListResource, PaginatedMixin):
    owner = StringParam('owner id of events')
    start_gt = StringParam('minimum date of event start')
    start_lt = StringParam('maximum date of event\'s start')
    order = StringParam('field to order events by', 'start')

    def list(self, params, meta):
        query = {
            'owner__id': params.get('owner'),
            'start__gt': params.get('start_gt'),
            'start__lt': params.get('start_lt'),
        }

        events = Event.objects(**make_queryset(query)).order_by(
            params.get('order'))
        paginated_events = events.skip(
            params['page'] * params['page_size']).limit(params['page_size'])

        if events.count() > (params['page'] + 1) * params['page_size']:
            meta['has_more'] = True
        else:
            meta['has_more'] = False

        event_schema = EventSchema(many=True)
        result = event_schema.dump(paginated_events)

        self.add_pagination_meta(params, meta)

        return result.data

    @authentication_required
    def on_post(self, req, resp):
        create_schema = CreateEventSchema()
        data, errors = create_schema.load(json.load(req.bounded_stream))
        if errors:
            raise falcon.HTTPBadRequest('Missing data', errors)

        context_user = {
            'id': req.context['user']['id'],
            'name': req.context['user']['name'],
        }

        event = Event(owner=context_user, )

        for key, value in data.items():
            setattr(event, key, value)

        try:
            event.save()
        except ValidationError as err:
            raise falcon.HTTPBadRequest('Invalid data', err.to_dict())

        event_schema = EventSchema()
        event_result = event_schema.dump(event)

        resp.body = json.dumps(event_result.data)
        resp.status = falcon.HTTP_201
class EmailTrackingResource(SaasBase, ListAPI):
    allow_in_public_doc = False
    serializer = EmailSerializer()

    receiver = StringParam("Filter mail by email address")
    account_id = StringParam("Filter mail by account_id")
    provider_mail_id = StringParam("Filter mail by mailgun mail id")

    def __repr__(self):
        return "Get Email Information"

    def resource_name(self):
        return "EmailTrackingResource"

    @require_roles(roles=[ERoles.manager])
    def list(self, params, meta, **kwargs):
        params.pop("indent")
        return self.db.email_filter(**params)
Exemple #4
0
class CommitList(PaginatedListAPI):
    serializer = CommitSerializer()

    id_loan = StringParam("id_loan filter")
    opcode = StringParam("opcode filter")
    proof = StringParam("proof filter")
    address = StringParam("address filter")

    def list(self, params, meta, **kwargs):
        filter_params = params.copy()
        filter_params.pop("indent")

        page_size = filter_params.pop("page_size")
        page = filter_params.pop("page")

        offset = page * page_size

        all_objects = Commit.objects.filter(**filter_params)
        count_objects = all_objects.count()
        meta["resource_count"] = count_objects

        return all_objects.skip(offset).limit(page_size)
Exemple #5
0
class StateList(PaginatedListAPI):
    serializer = StateSerializer()

    status = StringParam("Status filter")

    def list(self, params, meta, **kwargs):
        filter_params = params.copy()
        filter_params.pop("indent")

        page_size = filter_params.pop("page_size")
        page = filter_params.pop("page")

        offset = page * page_size

        all_objects = State.objects.filter(**filter_params)
        count_objects = all_objects.count()
        meta["resource_count"] = count_objects

        return all_objects.skip(offset).limit(page_size)
Exemple #6
0
    class CatList(PaginatedListCreateAPI):
        """
        List of all cats in our API
        """
        serializer = CatSerializer()

        breed = StringParam("set this param to filter cats by breed")

        def list(self, params, meta, **kwargs):
            if 'breed' in params:
                filtered = [
                    cat for cat in CATS_STORAGE
                    if cat['breed'] == params['breed']
                ]
                return filtered
            else:
                return CATS_STORAGE

        def create(self, params, meta, validated, **kwargs):
            validated['id'] = new_id()
            CATS_STORAGE.append(validated)
            return validated
Exemple #7
0
class LoanList(PaginatedListAPI):
    serializer = LoanSerializer()

    open = BoolParam("Open filter")
    approved = BoolParam("Approved filter")
    cosigner = StringParam("Cosigner filter")
    cosigner__ne = StringParam("Cosigner not filter")
    model = StringParam("Model filter")
    model__ne = StringParam("Model not filter")
    creator = StringParam("Creator filter")
    creator__ne = StringParam("Creator not filter")
    oracle = StringParam("Oracle filter")
    oracle__ne = StringParam("Oracle not filter")
    borrower = StringParam("Borrower filter")
    borrower__ne = StringParam("Borrower not filter")
    callback = StringParam("Callback filter")
    canceled = BoolParam("Canceled filter")
    status = StringParam("Status Filter")
    lender = StringParam("Lender filter")
    lender__ne = StringParam("Lender not filter")
    currency = StringParam("Currency filter")
    currency__ne = StringParam("Currency not filter")

    expiration__lt = StringParam("Expiration lt")
    expiration__lte = StringParam("Expiration lte")
    expiration__gt = StringParam("Expiration gt")
    expiration__gte = StringParam("Expiration gte")

    amount__lt = StringParam("Amount lt")
    amount__lte = StringParam("Amount lte")
    amount__gt = StringParam("Amount gt")
    amount__gte = StringParam("Amount gte")

    created__lt = StringParam("Created lt")
    created__lte = StringParam("Created lte")
    created__gt = StringParam("Created gt")
    created__gte = StringParam("Created gte")


    def list(self, params, meta, **kwargs):
        # Filtering -> Ordering -> Limiting
        filter_params = params.copy()
        filter_params.pop("indent")

        page_size = filter_params.pop("page_size")
        page = filter_params.pop("page")

        offset = page * page_size

        all_objects = Loan.objects.filter(**filter_params)
        count_objects = all_objects.count()
        meta["resource_count"] = count_objects

        return all_objects.skip(offset).limit(page_size)
Exemple #8
0
def test_string_param():
    param = StringParam(details="stringy stringy")
    assert param.value("foo") == "foo"
Exemple #9
0
def test_string_param():
    param = StringParam(details="stringy stringy")
    assert param.value("foo") == "foo"
Exemple #10
0
class DebtList(PaginatedListAPI):
    serializer = DebtSerializer()

    error = BoolParam("Error filter")
    model = StringParam("Model filter")
    model__ne = StringParam("Model not filter")
    creator = StringParam("Creator filter")
    creator__ne = StringParam("Creator not filter")
    oracle = StringParam("Oracle filter")
    oracle__ne = StringParam("Oracle not filter")

    balance__lt = StringParam("Balance lt")
    balance__lte = StringParam("Balance lte")
    balance__gt = StringParam("Balance gt")
    balance__gte = StringParam("Balance gte")

    created__lt = StringParam("Created lt")
    created__lte = StringParam("Created lt")
    created__gt = StringParam("Created gt")
    created__gte = StringParam("Created gte")

    def list(self, params, meta, **kwargs):
        # Filtering -> Ordering -> Limiting

        filter_params = params.copy()
        filter_params.pop("indent")

        page_size = filter_params.pop("page_size")
        page = filter_params.pop("page")

        offset = page * page_size

        all_objects = Debt.objects.filter(**filter_params)
        count_objects = all_objects.count()
        meta["resource_count"] = count_objects

        return all_objects.skip(offset).limit(page_size)
Exemple #11
0
 class DerrivedResource(SomeResource):
     # note: we toggle 'required' to check if was properly overriden
     bar = StringParam(details="overridden parameter", required=True)
Exemple #12
0
 class SomeResource(Resource):
     foo = StringParam(details="give me foo", required=False)
     bar = StringParam(details="give me bar", required=False)
Exemple #13
0
 class SomeResource(Resource):
     required_param = StringParam(details="some param", required=True)
     optional_param = StringParam(details="some param", required=False)
Exemple #14
0
 class ParametrizedResource(TestResource):
     foo = StringParam(details="required foo!", required=True)
Exemple #15
0
class LogTrackingResource(SaasBase, PaginatedListAPI):
    """
    Log Tracking Resource
    #### GET
    Retrieve logs with level_name, function_name, page_size ang page params. Only manager user use these resource.
    page_size default value is 10.
    page default value is 0.
    #### Request:

    ```bash
        #bash
        curl \\
             --request GET                                                          \\
             --header "Content-Type: application/json"                              \\
             --header "AUTHORIZATION: 0sOEQfyptM0ZG7kJYkNxmswp_p5y9iX5t61KI1qH83w"  \\
             https://api_baseurl/api/v1/log-tracking?level_name=ERROR&page_size=5&page=1&function_name=find_redis_role
    ```

    ```python
        #pyhon
        import requests
        import json

        header = {
                    "Content-Type": "application/json",
                    "AUTHORIZATION": "0sOEQfyptM0ZG7kJYkNxmswp_p5y9iX5t61KI1qH83w"
                  }
        req = requests.get("https://api_baseurl/api/v1/log-tracking?level_name=ERROR&page_size=5&page=1&function_name=find_redis_role",
                                        header=header)
    ```

    #### Response:
    200 OK.
    ```json
        {
        "content": [
            {
                "amount": "7",
                "creationTime": "2018-02-06 15:55:51.628340",
                "description": "NOAUTH Authentication required.",
                "functionName": "find_redis_role",
                "id": "ba37d570c3364a0abf6681133552ed06",
                "levelName": "ERROR"
            }
        ],
        "meta": {
            "next": "page=2&page_size=5",
            "page": 1,
            "page_size": 5,
            "params": {
                "function_name": "find_redis_role",
                "indent": 0,
                "level_name": "ERROR",
                "page": 1,
                "page_size": 5
            },
            "prev": "page=0&page_size=5"
        }
        }
    ```
    """

    allow_in_public_doc = False
    serializer = LogTrackingSerializer()

    level_name = StringParam(
        "Filter logs by log level. Log level type : WARNING, ERROR",
        validators=[log_level_validator])
    function_name = StringParam("Filter logs by function_name")

    def __repr__(self):
        return "Log Tracking"

    def resource_name(self):
        return "LogTrackingResource"

    @require_roles(roles=[ERoles.manager])
    def list(self, params, meta, **kwargs):
        page_size = params["page_size"]
        page = params["page"]

        filter_params = {
            key: value
            for key, value in params.items()
            if key not in ['page_size', 'page', 'indent']
        }
        logs = self.db.paginated_filter(model=Log,
                                        order_field=Log.creation_time,
                                        page_size=page_size,
                                        page=page,
                                        **filter_params)

        if self.db.count(Log, **filter_params) > (page_size + 1) * page:
            meta['has_more'] = True
        return logs
Exemple #16
0
class CompleteLoanList(PaginatedListAPI):
    serializer = CompleteLoanSerializer()

    open = BoolParam("Open filter")
    approved = BoolParam("Approved filter")
    cosigner = StringParam("Cosigner filter")
    cosigner__ne = StringParam("Cosigner not filter")
    model = StringParam("Model filter")
    model__ne = StringParam("Model not filter")
    creator = StringParam("Creator filter")
    creator__ne = StringParam("Creator not filter")
    oracle = StringParam("Oracle filter")
    oracle__ne = StringParam("Oracle not filter")
    borrower = StringParam("Borrower filter")
    borrower__ne = StringParam("Borrower not filter")
    callback = StringParam("Callback filter")
    canceled = BoolParam("Canceled filter")
    status = StringParam("Status Filter")
    lender = StringParam("Lender filter")
    lender__ne = StringParam("Lender not filter")
    currency = StringParam("Currency filter")
    currency__ne = StringParam("Currency not filter")

    expiration__lt = StringParam("Expiration lt")
    expiration__lte = StringParam("Expiration lte")
    expiration__gt = StringParam("Expiration gt")
    expiration__gte = StringParam("Expiration gte")

    amount__lt = StringParam("Amount lt")
    amount__lte = StringParam("Amount lte")
    amount__gt = StringParam("Amount gt")
    amount__gte = StringParam("Amount gte")

    created__lt = StringParam("Created lt")
    created__lte = StringParam("Created lte")
    created__gt = StringParam("Created gt")
    created__gte = StringParam("Created gte")

    def list(self, params, meta, **kwargs):
        # Filtering -> Ordering -> Limiting
        filter_params = params.copy()
        filter_params.pop("indent")

        page_size = filter_params.pop("page_size")
        page = filter_params.pop("page")

        offset = page * page_size

        all_objects = Loan.objects.filter(**filter_params)
        count_objects = all_objects.count()
        meta["resource_count"] = count_objects

        loan_filtered = all_objects.skip(offset).limit(page_size)

        complete_loans = loan_filtered.aggregate(
            [
                {"$lookup": {"from": "debt", "localField": "_id", "foreignField": "_id", "as": "debt"}},
                {"$lookup": {"from": "config", "localField": "_id", "foreignField": "_id", "as": "config"}},
                {"$lookup": {"from": "state", "localField": "_id", "foreignField": "_id", "as": "state"}},
                {"$lookup": {"from": "collateral", "localField": "_id", "foreignField": "debt_id", "as": "collaterals"}},
                { "$unwind": { "path": "$debt", "preserveNullAndEmptyArrays": True }},
                { "$unwind": { "path": "$state", "preserveNullAndEmptyArrays": True }},
                { "$unwind": { "path": "$config", "preserveNullAndEmptyArrays": True }},
                { "$project": {
                    "id": 1,
                    "open": 1,
                    "approved": 1,
                    "position": 1,
                    "expiration": 1,
                    "amount": 1,
                    "cosigner": 1,
                    "model": 1,
                    "creator": 1,
                    "oracle": 1,
                    "borrower": 1,
                    "callback": 1,
                    "salt": 1,
                    "loanData": 1,
                    "created": 1,
                    "descriptor": 1,
                    "currency": 1,
                    "lender": 1,
                    "status": 1,
                    "canceled": 1,
                    "debt": 1,
                    "state": 1,
                    "collaterals": 1,
                    "config": "$config.data", "id": 1, "open": 1
                    }
                }
            ]
        )

        return list(complete_loans)
Exemple #17
0
 class SomeResource(Resource):
     foo = StringParam(details="give me foo", many=True)
Exemple #18
0
 class ResourceWithDefaults(Resource):
     foo = StringParam(details="foo with defaults", default="default")
     bar = StringParam(details="bar w/o default")
Exemple #19
0
class CatList(PaginatedListCreateAPI):

    def allowed_methods(self):
        """Return list of allowed HTTP methods on this resource.

        This is only for purpose of making resource description.

        Returns:
            list: list of allowed HTTP method names (uppercase)

        """
        alloweds = []

        map = {
            "GET": ["retrieve", "list"],
            "POST": ["create"],
            "PUT": ["update"],
            "PATCH": ["create_bulk"],
            "DELETE": ["delete"],
            "HEAD": ["on_head"],
            "OPTIONS": ["on_options"]}

        for method in map.keys():
            attr_list = [getattr(self, m, False) for m in map[method]]
            if any(attr_list):
                for attr in attr_list:
                    if attr and attr.__doc__ != "Not Implemented":
                        alloweds.append(method)
        return alloweds



    """
    Get a unique message identified by `message_id`.

    > Warning
    >
    > This resource is available only version 1. Please be sure the body is empty. You can not
    > send extra parameters like, `title`, `body`, `receiver`, etc.

    Message response is a json string containing message details, such as:
    ```json
        {
            "title": "Hello World!",
            "body": "This message is sent by someone who you might know or maybe not!",
            "id": "FH4DJ90HF1USD9879SIPXAZ"
        }
    ```

    > Warning
    >
    > Response always contains `id`, `title` and `body` and optionally `receiver`, `sender`.
    > Do not send `sender` while using API version 2.0.
    >
    > See here new paragraph starts.

    Warning ends and regular API explanation goes on here. Message is any


    ### Code Examples:
    ```bash

        curl \\
             --request POST \\
             --header "Content-Type: application/json; charset=utf-8" \\
             --header "Authorization: Basic a42069f7b356f2e9189a88d1a4c7fa647b223cd8c81580b673c3ae37f7e4e102" \\
             --data-binary "{\"project_id\": \"b4392fdb-b6cd-4f3c-82f3-dacf0b3d6432\", \\
                            \"body\": {\"tr\": \"Hello World\"}, \\
                            \"message_tag\": [\"receieved\"]}" \\
             https://zopsm.io/api/v1/message

    ```


    ```python
        import requests
        import json

        header = {"Content-Type": "application/json; charset=utf-8",
                  "Authorization": "Basic a42069f7b356f2e9189a88d1a4c7fa647b223cd8c81580b673c3ae37f7e4e102"}

        payload = {"project_id": "b4392fdb-b6cd-4f3c-82f3-dacf0b3d6432",
                   "message_tag": ["receieved"],
                   "body": {"tr": "Hello World!"}}

        req = requests.post("https://zopsm.io/api/v1/messages",
                                    headers=header, data=json.dumps(payload))

        print(req.status_code, req.reason)
    ```

    ### Possible Errors
    Alognside with generic ones, endpoint can respond with costum errors below:

    - __Message Not Found__: Probably you try to get a deleted or non-existent message.
    - __Illegal Operand__: Please check definition of sets, they must be declared as shown in fields table.

    """

    serializer = CatSerializer()

    breed = StringParam("set this param to filter cats by breed")

    def list(self, params, meta, **kwargs):
        if 'breed' in params:
            filtered = [
                cat for cat in CATS_STORAGE
                if cat['breed'] == params['breed']
            ]
            return filtered
        else:
            return CATS_STORAGE


    def create(self, params, meta, **kwargs):
        """Not Implemented"""
        pass

    def create_bulk(self, params, meta, **kwargs):
        """Not Implemented"""
        pass