Ejemplo n.º 1
0
    def test_check_status_expect(self):
        api = MockApi(200)
        resp = MockResp(200)
        resp.caller = api
        resp.input_kwargs = None

        Consumer._check_status(resp)
Ejemplo n.º 2
0
    def test_routing_on_default(self):
        consumer = Consumer('base_uri')
        consumer.router = {'key1': 'base_uri1', 'key2': 'base_uri2'}

        route = consumer.routing('other_key')

        assert route.base_uri == 'base_uri'
Ejemplo n.º 3
0
    def test_check_status_code_is_str(self):
        api = MockApi(200)
        resp = MockResp('200')

        resp.caller = api
        resp.input_kwargs = None

        Consumer._check_status(resp)
Ejemplo n.º 4
0
    def test_check_status_not_expect(self):
        api = MockApi(200)
        resp = MockResp(401)
        resp.caller = api
        resp.input_kwargs = None

        with self.assertRaises(StatusCodeUnexpectedError):
            Consumer._check_status(resp)
Ejemplo n.º 5
0
    def test_route(self):
        api1 = MockApi()
        api2 = MockApi()

        consumer = Consumer('base_uri')

        consumer.apis['api1'] = api1
        consumer.apis['api2'] = api2

        route = Route(consumer, 'selected_uri')

        assert route.api1 == 'selected_uri'
Ejemplo n.º 6
0
    def test_api_deco_invalid_on_request(self):
        cs = Consumer('http://test')

        with self.assertRaises(ValueError):

            @cs.get('/uri', on_request=['test'])
            def api_func(resp):
                pass
Ejemplo n.º 7
0
    def test_api_deco_invalid_arg_validators(self):
        cs = Consumer('http://test')

        with self.assertRaises(ValueError):

            @cs.get('/uri', arg_validators=['test'])
            def api_func(resp):
                pass
Ejemplo n.º 8
0
def consumer():
    class OnRequest(object):

        def __init__(self):
            self.called = False

        def __call__(self, request_meta):
            self.called = True

    on_request = OnRequest()

    consumer = Consumer('http://httpbin.org')

    @jsonify
    @consumer.get('/basic-auth/{username}/{password}',
                  on_request=on_request)
    def basic_auth(resp):
        """
        <meta>
            args:
                auth
        </meta>
        """

    @jsonify
    @consumer.post('/post')
    def form_post(resp):
        """
        <meta>
            args:
                form:
                    - field1
                    - field2
        </meta>
        """

    @jsonify
    @consumer.post('/post')
    def file_post(resp):
        """
        <meta>
            args:
                file:
                    - file
        </meta>
        """

    @consumer.get('/status/{status_code=404}')
    def unexpected_status_code(resp):
        """
        <meta>
            expected_status_code: 200
        </meta>
        """
        return resp.status_code

    return consumer
Ejemplo n.º 9
0
    def test_hook_without_return(self):
        api = MockApi(200)
        resp = MockResp(200)
        resp.hook1_hooked = False
        resp.hook2_hooked = False

        resp.caller = api
        resp.input_kwargs = None
        consumer = Consumer('base_uri')

        @consumer.resp_hook
        def hook1(resp):
            resp.hook1_hooked = True

        @consumer.resp_hook
        def hook2(resp):
            resp.hook2_hooked = True

        result = consumer.hook(resp)

        self.assertIs(result, None)
        self.assertEqual(resp.hook1_hooked, True)
        self.assertEqual(resp.hook2_hooked, True)
Ejemplo n.º 10
0
# -*- coding: utf-8 -*-

from doclink import Consumer
from ..endpoints import api as endpoints
from .. import utils

consumer = Consumer(endpoints.base_uri, expected_status_code=200)
consumer.resp_hook(utils.preprocess_resp)


@consumer.get(endpoints.media_info)
def media_info(resp):
    """Get media basic info from Penguin.

    Args:
        access_token (str): access_token.
        openid (str): openid.

    Returns:
        dict: the header image, the nick name. For example:
            {
                "header": "http://inews.gtimg.com/newsapp_ls/0/183849551_100100/0",
                "nick": "测试"
            }

    <meta>
        args:
            query:
                - access_token
                - openid:
                    required: False
Ejemplo n.º 11
0
# -*- coding: utf-8 -*-
#
#   Project: payunion
#    Author: Luo Yufu
#
#   Copyright (c) 2018 麦禾互动. All rights reserved.

from doclink import Consumer

from . import utils

auth_consumer = Consumer('https://api.weixin.qq.com/sns/')

auth_consumer.resp_hook(utils.json_hook)


@auth_consumer.get('jscode2session')
def jscode2session(resp):
    """
    <meta>
        args:
            query:
                - appid
                - secret
                - js_code
                - grant_type: authorization_code
        expected_status_code: 200
    </meta>
    """
    return resp.json
Ejemplo n.º 12
0
#      File: http_api.py
#   Project: payunion
#    Author: Yi Yuhao
#    Create: 2018/6/20
#
#   Copyright (c) 2018 麦禾互动. All rights reserved.

from doclink import Consumer

from .config import WechatHttpApiConfig as Conf

consumer = Consumer(Conf.base_url, expected_status_code=200)


@consumer.resp_hook
def json_hook(resp):
    resp.json = resp.json()


@consumer.get(Conf.code_to_session)
def code_to_session(resp):
    """Exchange access_token from auth code.

    Ags:
        appid (str): wechat mini program app id
        secret (str): app secret
        js_code (str): 登录时获取的 code
        grant_type (str): 填写为'authorization_code'

    Returns:
        dict: openid, session_key.