def test_check_status_expect(self): api = MockApi(200) resp = MockResp(200) resp.caller = api resp.input_kwargs = None Consumer._check_status(resp)
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'
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)
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)
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'
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
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
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
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)
# -*- 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
# -*- 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
# 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.