Ejemplo n.º 1
0
    async def validate(
        self,
        method: str,
        data: dict,
        response: typing.Any,
        ctx_api: typing.Union["ABCAPI", "API"],
    ) -> typing.Union[typing.Any, typing.NoReturn]:
        if isinstance(response, dict):
            return response
        elif isinstance(response, str):
            return json.loads(response)

        logger.info(
            f"VK returned object of invalid type ({type(response)})."
            f"Request will be rescheduled with {ctx_api.request_rescheduler.__class__.__name__!r}"
        )

        return await self.validate(
            method,
            data,
            await
            ctx_api.request_rescheduler.reschedule(ctx_api, method, data,
                                                   response),
            ctx_api,
        )
Ejemplo n.º 2
0
    async def validate(
        self,
        method: str,
        data: dict,
        response: Any,
        ctx_api: Union["ABCAPI", "API"],
    ) -> Union[Any, NoReturn]:
        if isinstance(response, dict):
            return response
        elif isinstance(response, str):
            return json.loads(response)

        logger.info(
            "VK returned object of invalid type ({}). Request will be rescheduled with {}",
            type(response).__name__,
            ctx_api.request_rescheduler.__class__.__name__,
        )

        return await self.validate(
            method,
            data,
            await
            ctx_api.request_rescheduler.reschedule(ctx_api, method, data,
                                                   response),
            ctx_api,
        )
Ejemplo n.º 3
0
def test_template_generator():
    assert (json.loads(
        template_gen(
            TemplateElement(
                photo_id="-109837093_457242811",
                action={"type": "open_photo"},
                buttons=[{
                    "action": {
                        "type": "text",
                        "label": "text",
                        "payload": "{}"
                    }
                }],
            ),
            TemplateElement(
                photo_id="-109837093_457242811",
                action={"type": "open_photo"},
                buttons=[{
                    "action": {
                        "type": "text",
                        "label": "text 2",
                        "payload": "{}"
                    }
                }],
            ),
        )) == TEMPLATE_DICT)
Ejemplo n.º 4
0
 async def upload_files(self, upload_url: str, files: dict) -> dict:
     async with self.api.http as session:
         raw_response = await session.request_text("POST",
                                                   upload_url,
                                                   data=files)
         response = json.loads(raw_response)
     return response
Ejemplo n.º 5
0
def test_keyboard_generator():
    with pytest.deprecated_call():
        assert json.loads(
            keyboard_gen(
                [
                    [{"label": "I love nuggets", "payload": {"love": "nuggets"}}],
                    [
                        {
                            "type": "callback",
                            "label": "Eat nuggets",
                            "payload": {"eat": "nuggets"},
                            "color": "positive",
                        }
                    ],
                ],
                one_time=True,
            )
        ) == json.loads(KEYBOARD_JSON)
Ejemplo n.º 6
0
 def get_payload_json(
     self,
     throw_error: bool = False,
     unpack_failure: Callable[[str], Union[dict, str]] = lambda payload: payload,
 ) -> Optional[Union[dict, str]]:
     if self.payload is None:
         return None
     try:
         return json.loads(self.payload)
     except (ValueError, TypeError) as e:
         if throw_error:
             raise e from e
     return unpack_failure(self.payload)
Ejemplo n.º 7
0
    def __init__(
        self,
        title: Optional[str] = None,
        description: Optional[str] = None,
        photo_id: Optional[str] = None,
        buttons: Optional[Union[List[dict], str]] = None,
        action: Optional[dict] = None,
    ):
        assert buttons, "Buttons are required"
        assert photo_id or title, "photo_id or title is required"

        if isinstance(buttons, str):
            buttons = json.loads(buttons)  # type: ignore

        if isinstance(buttons, dict):
            buttons = buttons["buttons"][0]  # type: ignore
        self.raw: dict = {
            k: v
            for k, v in locals().items() if v is not None and k != "self"
        }
Ejemplo n.º 8
0
    def __init__(
        self,
        title: Optional[str] = None,
        description: Optional[str] = None,
        photo_id: Optional[str] = None,
        buttons: Optional[List[dict]] = None,
        action: Optional[dict] = None,
    ):
        assert buttons, "Buttons are required"
        assert photo_id or title, "photo_id or title is required"

        if isinstance(buttons, str):
            buttons = json.loads(buttons)

        if isinstance(buttons, dict):
            buttons = buttons.get("buttons")[0]  # taking only first row

        self.raw: dict = {
            k: v
            for k, v in locals().items() if v is not None and k != "self"
        }
Ejemplo n.º 9
0
 async def upload_files(self, upload_url: str, files: dict) -> dict:
     raw_response = await self.api.http_client.request_text(upload_url,
                                                            method="POST",
                                                            data=files)
     return json.loads(raw_response)