Exemple #1
0
def test_blueprint_registered_multiple_apps():
    app1 = Sanic("app1")
    app2 = Sanic("app2")
    bp = Blueprint("bp")

    @bp.get("/")
    async def handler(request):
        return text(request.route.name)

    app1.blueprint(bp)
    app2.blueprint(bp)

    for app in (app1, app2):
        _, response = app.test_client.get("/")
        assert response.text == f"{app.name}.bp.handler"
def test_bp_group_properties():
    blueprint_1 = Blueprint("blueprint_1", url_prefix="/bp1")
    blueprint_2 = Blueprint("blueprint_2", url_prefix="/bp2")
    group = Blueprint.group(
        blueprint_1,
        blueprint_2,
        version=1,
        version_prefix="/api/v",
        url_prefix="/grouped",
        strict_slashes=True,
    )
    primary = Blueprint.group(group, url_prefix="/primary")

    @blueprint_1.route("/")
    def blueprint_1_default_route(request):
        return text("BP1_OK")

    @blueprint_2.route("/")
    def blueprint_2_default_route(request):
        return text("BP2_OK")

    app = Sanic("PropTest")
    app.blueprint(group)
    app.blueprint(primary)
    app.router.finalize()

    routes = [route.path for route in app.router.routes]

    assert len(routes) == 4
    assert "api/v1/grouped/bp1/" in routes
    assert "api/v1/grouped/bp2/" in routes
    assert "api/v1/primary/grouped/bp1" in routes
    assert "api/v1/primary/grouped/bp2" in routes
def test_blueprint_group_insert():
    blueprint_1 = Blueprint(
        "blueprint_1", url_prefix="/bp1", strict_slashes=True, version=1
    )
    blueprint_2 = Blueprint("blueprint_2", url_prefix="/bp2")
    blueprint_3 = Blueprint("blueprint_3", url_prefix=None)
    group = BlueprintGroup(
        url_prefix="/test", version=1.3, strict_slashes=False
    )
    group.insert(0, blueprint_1)
    group.insert(0, blueprint_2)
    group.insert(0, blueprint_3)

    @blueprint_1.route("/")
    def blueprint_1_default_route(request):
        return text("BP1_OK")

    @blueprint_2.route("/")
    def blueprint_2_default_route(request):
        return text("BP2_OK")

    @blueprint_3.route("/")
    def blueprint_3_default_route(request):
        return text("BP3_OK")

    app = Sanic("PropTest")
    app.blueprint(group)
    app.router.finalize()

    routes = [(route.path, route.strict) for route in app.router.routes]

    assert len(routes) == 3
    assert ("v1/test/bp1/", True) in routes
    assert ("v1.3/test/bp2", False) in routes
    assert ("v1.3/test", False) in routes
Exemple #4
0
    def setUp(self):
        modules.flags_manager.remove_all_flags()

        self.app = Sanic()
        self.app.add_route(test_api, '/test', methods=['POST'])

        init_sanic('test_app', self.app, setup_kuber_config_loader=False)

        flags.DEFINE_INTEGER_FLAG("test")
        self.loader = KuberConfigLoader("test_service")
        self.loader.load_config(
            config_pb2.GlobalConfig(
                flags=[{
                    "name": "test",
                    "type": "INTEGER",
                    "value": {
                        "base_value": {
                            "number_value": 1
                        }
                    }
                }],
                experiments={
                    2:
                    ExperimentDefinition(
                        id=2,
                        flag_values={
                            "test": FlagValue(base_value={"number_value": 2})
                        })
                }))
        self.server = Process(target=self.app.run, args=("127.0.0.1", 8008))
        self.server.start()
        sleep(1)
Exemple #5
0
 def __init__(self):
     self.app = mock.Mock()
     self.app.callable = Sanic("test_gunicorn_worker")
     self.servers = {}
     self.exit_code = 0
     self.cfg = mock.Mock()
     self.notify = mock.Mock()
Exemple #6
0
def test_static_blueprint_name(static_file_directory, file_name):
    app = Sanic("app")
    current_file = inspect.getfile(inspect.currentframe())
    with open(current_file, "rb") as file:
        file.read()

    bp = Blueprint(name="static", url_prefix="/static", strict_slashes=False)

    bp.static(
        "/test.file/",
        get_file_path(static_file_directory, file_name),
        name="static.testing",
        strict_slashes=True,
    )

    app.blueprint(bp)

    uri = app.url_for("static", name="static.testing")
    assert uri == "/static/test.file/"

    _, response = app.test_client.get("/static/test.file")
    assert response.status == 404

    _, response = app.test_client.get("/static/test.file/")
    assert response.status == 200
Exemple #7
0
def create_auxiliary_app():
    app = Sanic("SANIC_DEV_AUX_APP")

    @app.route("/")
    def aux_home(request):
        return json({"status": "ok"})

    return app
Exemple #8
0
def test_blueprint_group_strict_slashes():
    app = Sanic(name="blueprint-group-test")
    bp1 = Blueprint(name="bp1", url_prefix=None, strict_slashes=False)

    bp2 = Blueprint(name="bp2",
                    version=3,
                    url_prefix="/bp2",
                    strict_slashes=None)

    bp3 = Blueprint(name="bp3",
                    version=None,
                    url_prefix="/bp3/",
                    strict_slashes=None)

    @bp1.get("/r1")
    async def bp1_r1(request):
        return json({"from": "bp1/r1"})

    @bp2.get("/r1")
    async def bp2_r1(request):
        return json({"from": "bp2/r1"})

    @bp2.get("/r2/")
    async def bp2_r2(request):
        return json({"from": "bp2/r2"})

    @bp3.get("/r1")
    async def bp3_r1(request):
        return json({"from": "bp3/r1"})

    group = Blueprint.group(
        [bp1, bp2],
        url_prefix="/slash-check/",
        version=1.3,
        strict_slashes=True,
    )

    group2 = Blueprint.group([bp3],
                             url_prefix="/other-prefix/",
                             version="v2",
                             strict_slashes=False)

    app.blueprint(group)
    app.blueprint(group2)

    assert app.test_client.get("/v1.3/slash-check/r1")[1].status == 200
    assert app.test_client.get("/v1.3/slash-check/r1/")[1].status == 200
    assert app.test_client.get("/v3/slash-check/bp2/r1")[1].status == 200
    assert app.test_client.get("/v3/slash-check/bp2/r1/")[1].status == 404
    assert app.test_client.get("/v3/slash-check/bp2/r2")[1].status == 404
    assert app.test_client.get("/v3/slash-check/bp2/r2/")[1].status == 200
    assert app.test_client.get("/v2/other-prefix/bp3/r1")[1].status == 200
def create_app():
    app = Sanic(DEFAULT_SERVICE_NAME)
    api_prefix = f'/{DEFAULT_SERVICE_NAME}'
    api = Blueprint('whreports', url_prefix=api_prefix)

    api.add_route(SmokeResource.as_view(), "/smoke")
    api.add_route(GenerateReportResource.as_view(), "/report")
    api.add_route(StatusReportResource.as_view(), "/report/status/<task_id>")
    api.add_route(DownloadReportResource.as_view(),
                  "/report/download/<task_id>")
    app.blueprint(api)
    import os
    return app
Exemple #10
0
    def __init__(
        self,
        client_public_key: str,
        token: str,
        uri: str = "discord_interaction",
        production: bool = False,
    ) -> None:
        self.sanic = Sanic("hiyobot")
        self.uri = uri
        self.token = token
        self.client_public_key = client_public_key

        self.__setup()
Exemple #11
0
def create_app() -> Sanic:
    app: Sanic = Sanic(name="pait")
    add_doc_route(app)
    app.add_route(test_get, "/api/get/<age>", methods={"GET"})
    app.add_route(test_check_param, "/api/check_param", methods={"GET"})
    app.add_route(test_check_resp, "/api/check_resp", methods={"GET"})
    app.add_route(test_post, "/api/post", methods={"POST"})
    app.add_route(test_depend, "/api/depend", methods={"POST"})
    app.add_route(test_other_field, "/api/other_field", methods={"POST"})
    app.add_route(test_raise_tip, "/api/raise_tip", methods={"POST"})
    app.add_route(TestCbv.as_view(), "/api/cbv")
    app.add_route(test_pait_model, "/api/pait_model", methods={"POST"})
    app.exception(PaitBaseException)(api_exception)
    app.exception(ValidationError)(api_exception)
    return app
Exemple #12
0
def app():
    app = Sanic("test_sanic_app")

    @app.route("/test_get", methods=['GET'])
    async def test_get(request):
        return response.json({"GET": True})

    @app.route("/test_post", methods=['POST'])
    async def test_post(request):
        return response.json({"POST": True})

    @app.route("/test_put", methods=['PUT'])
    async def test_put(request):
        return response.json({"PUT": True})

    @app.route("/test_delete", methods=['DELETE'])
    async def test_delete(request):
        return response.json({"DELETE": True})

    @app.route("/test_patch", methods=['PATCH'])
    async def test_patch(request):
        return response.json({"PATCH": True})

    @app.route("/test_options", methods=['OPTIONS'])
    async def test_options(request):
        return response.json({"OPTIONS": True})

    @app.route("/test_head", methods=['HEAD'])
    async def test_head(request):
        return response.json({"HEAD": True})

    @app.websocket("/test_ws")
    async def test_ws(request, ws):
        data = await ws.recv()
        await ws.send(data)

    @app.route("/test_passing_headers", methods=['GET'])
    async def test_get(request):
        return response.json({"headers": dict(request.headers)})

    @app.listener('before_server_start')
    async def mock_init_db(app, loop):
        await asyncio.sleep(0.01)

    yield app
Exemple #13
0
def test_strict_slashes_behavior_adoption():
    app = Sanic("app")
    app.strict_slashes = True
    bp = Blueprint("bp")
    bp2 = Blueprint("bp2", strict_slashes=False)

    @app.get("/test")
    def handler_test(request):
        return text("Test")

    @app.get("/f1", strict_slashes=False)
    def f1(request):
        return text("f1")

    @bp.get("/one", strict_slashes=False)
    def one(request):
        return text("one")

    @bp.get("/second")
    def second(request):
        return text("second")

    @bp2.get("/third")
    def third(request):
        return text("third")

    app.blueprint(bp)
    app.blueprint(bp2)

    assert app.test_client.get("/test")[1].status == 200
    assert app.test_client.get("/test/")[1].status == 404

    assert app.test_client.get("/one")[1].status == 200
    assert app.test_client.get("/one/")[1].status == 200

    assert app.test_client.get("/second")[1].status == 200
    assert app.test_client.get("/second/")[1].status == 404

    assert app.test_client.get("/third")[1].status == 200
    assert app.test_client.get("/third/")[1].status == 200

    assert app.test_client.get("/f1")[1].status == 200
    assert app.test_client.get("/f1/")[1].status == 200
Exemple #14
0
    def __init__(self, service, name: str = None, setting_prefix: str = None):
        """

        :param service:
        :type service:
        :param name:
        :type name: str
        :param setting_prefix:
        :type setting_prefix: str
        """
        super(Web, self).__init__(service, name, setting_prefix)

        self.app = Sanic(self.name)
        self.app.config["SERVICE"] = self.service

        # configure normal route
        self.app.add_route(self.home, "/")

        self.server = None  # type: ignore
Exemple #15
0
def test_blueprint_group_versioning():
    app = Sanic(name="blueprint-group-test")

    bp1 = Blueprint(name="bp1", url_prefix="/bp1")
    bp2 = Blueprint(name="bp2", url_prefix="/bp2", version=2)

    bp3 = Blueprint(name="bp3", url_prefix="/bp3")

    @bp3.get("/r1")
    async def bp3_r1(request):
        return json({"from": "bp3/r1"})

    @bp1.get("/pre-group")
    async def pre_group(request):
        return json({"from": "bp1/pre-group"})

    group = Blueprint.group([bp1, bp2], url_prefix="/group1", version=1)

    group2 = Blueprint.group([bp3])

    @bp1.get("/r1")
    async def r1(request):
        return json({"from": "bp1/r1"})

    @bp2.get("/r2")
    async def r2(request):
        return json({"from": "bp2/r2"})

    @bp2.get("/r3", version=3)
    async def r3(request):
        return json({"from": "bp2/r3"})

    app.blueprint([group, group2])

    assert app.test_client.get("/v1/group1/bp1/r1/")[1].status == 200
    assert app.test_client.get("/v2/group1/bp2/r2")[1].status == 200
    assert app.test_client.get("/v1/group1/bp1/pre-group")[1].status == 200
    assert app.test_client.get("/v3/group1/bp2/r3")[1].status == 200
    assert app.test_client.get("/bp3/r1")[1].status == 200

    assert group.version == 1
    assert group2.strict_slashes is None
Exemple #16
0
def create_app():
    app = Sanic(DEFAULT_SERVICE_NAME)
    api_prefix = f'/{DEFAULT_SERVICE_NAME}'
    api = Blueprint('warehouse', url_prefix=api_prefix)
    api.add_route(SmokeResource.as_view(), "/smoke")

    api.add_route(ClientAllResource().as_view(), "/client")
    api.add_route(ClientResource().as_view(), "/client/<client_id>")

    api.add_route(ParcelTypeAllResource().as_view(), "/parceltype")
    api.add_route(ParcelTypeResource().as_view(), "/parceltype/<type_id>")

    api.add_route(StorageAllResource().as_view(), "/storage")
    api.add_route(StorageResource().as_view(), "/storage/<storage_id>")

    api.add_route(ParcelAllResource().as_view(), "/parcel")
    api.add_route(ParcelResource().as_view(), "/parcel/<parcel_id>")
    api.add_route(ParcelQueryResource().as_view(), "/parcel/<parcel_type>/<storage_id>")
    api.add_route(ParcelReportResource().as_view(), "/parcel/report")

    api.add_route(SupplyAllResource().as_view(), "/supply")
    api.add_route(SupplyResource().as_view(), "/supply/<supply_id>")
    app.blueprint(api)
    return app
Exemple #17
0
        pass
    else:
        url_bytes = b"%s?%s" % (url_bytes, environ['QUERY_STRING'])
    version = environ['VERSION'].decode('utf-8')
    method = environ['METHOD'].decode('utf-8')
    if app is None:
        app = set_request.app
    if transport is None:
        transport = DummyTransport()
    r = SanicRequest(url_bytes, headers, version, method, transport, app)

    with mock.patch.dict(extract_params.__globals__, {'request': r}):
        yield


set_request.app = Sanic("sanic_reques_app")


class UtilsTestSuite(unittest.TestCase):
    def test_extract_params(self):
        with set_request({'QUERY_STRING': b'test=foo&foo=bar'}):
            uri, http_method, body, headers = extract_params()
            self.assertEquals(uri, 'http://127.0.0.1/?test=foo&foo=bar')
            self.assertEquals(http_method, 'GET')
            self.assertEquals(body, {})
            self.assertEquals(headers, Header({'Host': '127.0.0.1'}))

    def test_extract_params_with_urlencoded_json(self):
        wsgi_environ = {
            'QUERY_STRING':
            b'state=%7B%22t%22%3A%22a%22%2C%22i%22%3A%22l%22%7D'
Exemple #18
0
from ManjiApi.response import Response
from ManjiApi.sanic import ManjiApi

from ManjiApi.request.base import BaseRequest
from ManjiApi.request.frame_data import FrameDataRequest
from ManjiApi.request.yoshimitsu_gallery import YoshiGallRequest

from ManjiApi.api import api_endpoint

from aiohttp.client import ClientSession
from asyncio.events import AbstractEventLoop
from sanic.app import Sanic

manjiapi = Sanic("ManjiApi")
manjiapi.blueprint(api_endpoint)


@manjiapi.main_process_start
async def start(manjiapi: ManjiApi, loop: AbstractEventLoop) -> None:
    manjiapi.config.FALLBACK_ERROR_FORMAT = "json"
    manjiapi.ctx.base_request = BaseRequest(ClientSession())
    manjiapi.ctx.yoshigall_request = await YoshiGallRequest.setup()
    manjiapi.ctx.framedata_request = await FrameDataRequest.setup()
    manjiapi.ctx.response = Response


@manjiapi.main_process_stop
async def stop(manjiapi: ManjiApi, loop: AbstractEventLoop) -> None:
    await manjiapi.ctx.base_request.close()
    await manjiapi.ctx.yoshigall_request.close()
    await manjiapi.ctx.framedata_request.close()
Exemple #19
0
import asyncio

from sanic.app import Sanic
from sanic.response import json
from sanic.response import stream

import yaaredis

app = Sanic()


@app.route('/')
async def test(_request):
    return json({'hello': 'world'})


@app.route('/notifications')
async def notification(_request):
    async def _stream(res):
        redis = yaaredis.StrictRedis()
        pub = redis.pubsub()
        await pub.subscribe('test')
        end_time = app.loop.time() + 30
        while app.loop.time() < end_time:
            await redis.publish('test', 111)
            message = None
            while not message:
                message = await pub.get_message()
            res.write(message)
            await asyncio.sleep(0.1)
Exemple #20
0
from sanic.app import Sanic

from service_api import api_v1
from service_api.config import runtime_config
from service_api.constants import DEFAULT_SERVICE_NAME
from service_api.exceptions import setup_exception_handler


app = Sanic(DEFAULT_SERVICE_NAME)
app.config.from_object(runtime_config())
api_v1.load_api(app)
setup_exception_handler(app)
Exemple #21
0
        pass
    else:
        url_bytes = b"%s?%s" % (url_bytes, environ['QUERY_STRING'])
    version = environ['VERSION'].decode('utf-8')
    method = environ['METHOD'].decode('utf-8')
    if app is None:
        app = set_request.app
    if transport is None:
        transport = DummyTransport()
    r = SanicRequest(url_bytes, headers, version, method, transport, app)

    with mock.patch.dict(extract_params.__globals__, {'request': r}):
        yield


set_request.app = Sanic(__name__)


class UtilsTestSuite(unittest.TestCase):
    def test_extract_params(self):
        with set_request({'QUERY_STRING': b'test=foo&foo=bar'}):
            uri, http_method, body, headers = extract_params()
            self.assertEquals(uri, 'http://127.0.0.1/?test=foo&foo=bar')
            self.assertEquals(http_method, 'GET')
            self.assertEquals(body, {})
            self.assertEquals(headers, {'Host': '127.0.0.1'})

    def test_extract_params_with_urlencoded_json(self):
        wsgi_environ = {
            'QUERY_STRING':
            b'state=%7B%22t%22%3A%22a%22%2C%22i%22%3A%22l%22%7D'