Exemplo n.º 1
0
 def named_cursor(
     self,
     args: typing.Dict,
     prefetch: typing.Optional[int] = None,
     timeout: typing.Optional[float] = None,
 ):
     """Extended version of `cursor` with support of the named
     parameters."""
     prepared_args = query_module.QueryParamsDictConverter().prepare_asyncpg_args(args, self._params_order_list)
     return super().cursor(*prepared_args, prefetch=prefetch, timeout=timeout)
Exemplo n.º 2
0
    async def named_fetchrow(
            self,
            args: typing.Dict,
            timeout: typing.Optional[float] = None) -> asyncpg.Record:
        """Extended version of `fetchrow` with support of the named parameters.

        :param args: Dict with the parameters values.
        :param timeout: Optional timeout value in seconds.
        """
        prepared_args = query_module.QueryParamsDictConverter(
        ).prepare_asyncpg_args(args, self._params_order_list)
        return await super().fetchrow(*prepared_args, timeout=timeout)
Exemplo n.º 3
0
 async def named_fetch(
         self,
         query: str,
         args: typing.Dict,
         timeout: typing.Optional[float] = None
 ) -> typing.List[asyncpg.Record]:
     """Extended versions of `fetch` with support of the named
     parameters."""
     converted_query, asyncpg_args = self._prepare_asyncpg_parameters(
         query, args, query_module.QueryParamsDictConverter())
     return await super().fetch(converted_query,
                                *asyncpg_args,
                                timeout=timeout)
Exemplo n.º 4
0
def test_dict_converter_prepare_asyncpg_args():
    """Test `prepare_asyncpg_args` for dict converter."""
    converter = query.QueryParamsDictConverter()

    asyncpg_args = converter.prepare_asyncpg_args(
        {
            'some_field_1': '1',
            'some_field_2': '2',
            'some_field_3': '3'
        },
        ['some_field_1', 'some_field_2', 'some_field_3'],
    )

    assert asyncpg_args == ['1', '2', '3']
Exemplo n.º 5
0
 async def named_fetchval(
         self,
         query: str,
         args: typing.Dict,
         column: int = 0,
         timeout: typing.Optional[float] = None
 ) -> typing.Optional[typing.Any]:
     """Extended versions of `fetchval` with support of the named
     parameters."""
     converted_query, asyncpg_args = self._prepare_asyncpg_parameters(
         query, args, query_module.QueryParamsDictConverter())
     return await super().fetchval(converted_query,
                                   *asyncpg_args,
                                   column=column,
                                   timeout=timeout)
Exemplo n.º 6
0
 def named_cursor(
     self,
     query: str,
     args: typing.Dict,
     prefetch: typing.Optional[int] = None,
     timeout: typing.Optional[float] = None,
 ) -> cursor.CursorFactory:
     """Extended version of `cursor` with support of the named
     parameters."""
     converted_query, asyncpg_args = self._prepare_asyncpg_parameters(
         query, args, query_module.QueryParamsDictConverter())
     return super().cursor(converted_query,
                           *asyncpg_args,
                           prefetch=prefetch,
                           timeout=timeout)
Exemplo n.º 7
0
    async def named_execute(self,
                            query: str,
                            args: typing.Dict,
                            timeout: typing.Optional[float] = None) -> str:
        """Extended versions of `execute` with support of the named parameters.

        :param query: SQL query to execute (could include named parameters).
        :param args: Dict with the parameters values.
        :param timeout: Optional timeout value in seconds.
        """
        converted_query, asyncpg_args = self._prepare_asyncpg_parameters(
            query, args, query_module.QueryParamsDictConverter())
        query_result: str = await super().execute(converted_query,
                                                  *asyncpg_args,
                                                  timeout=timeout)
        return query_result
Exemplo n.º 8
0
    async def named_fetchval(
            self,
            args: typing.Dict,
            column: int = 0,
            timeout: typing.Optional[float] = None) -> typing.Any:
        """Extended version of `fetchval` with support of the named parameters.

        :param args: Dict with the parameters values.
        :param column: Numeric index within the record of the value to return.
        :param timeout: Optional timeout value in seconds.
        """
        prepared_args = query_module.QueryParamsDictConverter(
        ).prepare_asyncpg_args(args, self._params_order_list)
        return await super().fetchval(*prepared_args,
                                      column=column,
                                      timeout=timeout)
Exemplo n.º 9
0
    def named_cursor(
        self,
        args: typing.Dict,
        prefetch: typing.Optional[int] = None,
        timeout: typing.Optional[float] = None,
    ) -> asyncpg.cursor.CursorFactory:
        """Extended version of `cursor` with support of the named parameters.

        :param args: Dict with the parameters values.
        :param prefetch: The number of rows the *cursor iterator* will prefetch (defaults to ``50``.)
        :param timeout: Optional timeout value in seconds.
        """
        prepared_args = query_module.QueryParamsDictConverter(
        ).prepare_asyncpg_args(args, self._params_order_list)
        return super().cursor(*prepared_args,
                              prefetch=prefetch,
                              timeout=timeout)
Exemplo n.º 10
0
    def named_cursor(
        self,
        query: str,
        args: typing.Dict,
        prefetch: typing.Optional[int] = None,
        timeout: typing.Optional[float] = None,
    ) -> cursor.CursorFactory:
        """Extended version of `cursor` with support of the named parameters.

        :param query: SQL query to execute (could include named parameters).
        :param args: Dict with the parameters values.
        :param prefetch: The number of rows the *cursor iterator* will prefetch (defaults to ``50``.)
        :param timeout: Optional timeout value in seconds.
        """
        converted_query, asyncpg_args = self._prepare_asyncpg_parameters(
            query, args, query_module.QueryParamsDictConverter())
        return super().cursor(converted_query,
                              *asyncpg_args,
                              prefetch=prefetch,
                              timeout=timeout)
Exemplo n.º 11
0
    async def named_fetchval(
            self,
            query: str,
            args: typing.Dict,
            column: int = 0,
            timeout: typing.Optional[float] = None
    ) -> typing.Optional[typing.Any]:
        """Extended versions of `fetchval` with support of the named
        parameters.

        :param query: SQL query to execute (could include named parameters).
        :param args: Dict with the parameters values.
        :param column: Numeric index within the record of the value to return.
        :param timeout: Optional timeout value in seconds.
        """
        converted_query, asyncpg_args = self._prepare_asyncpg_parameters(
            query, args, query_module.QueryParamsDictConverter())
        return await super().fetchval(converted_query,
                                      *asyncpg_args,
                                      column=column,
                                      timeout=timeout)
Exemplo n.º 12
0
    async def named_execute(self,
                            query: str,
                            args: typing.Dict,
                            timeout: typing.Optional[float] = None) -> str:
        """Extended versions of `execute` with support of the named
        parameters."""
        # Convert the received query in the parameter to all lower-case
        query = query.lower()
        # Fetch the column string that is passed as part of INTO clause
        query_columns = query.split('into')[1].split('values')[0].strip()
        # Convert the column into list for further detailed logging
        columns = [
            column.strip()
            for column in query_columns[query_columns.index('(') +
                                        1:-1].split(',')
        ]

        number_of_columns = len(columns)
        number_of_values = len(list(args.keys()))

        missing_columns = set(columns) - set(args.keys())

        # Scenario: When the value passed in parameter do not match the number of columns
        if number_of_values < number_of_columns:
            raise KeyError(
                'Values missing. Columns that are missing values: {0}'.format(
                    missing_columns))
        # Scenario: When the expected column id is not received
        if 'id' not in args:
            raise KeyError(
                'Expected column name-> id :: Provided column name-> {}'.
                format(list(args.keys())[0]))

        converted_query, asyncpg_args = self._prepare_asyncpg_parameters(
            query, args, query_module.QueryParamsDictConverter())
        return await super().execute(converted_query,
                                     *asyncpg_args,
                                     timeout=timeout)
Exemplo n.º 13
0
 async def named_fetchval(self, args: typing.Dict, column: int = 0, timeout: typing.Optional[float] = None):
     """Extended version of `fetchval` with support of the named
     parameters."""
     prepared_args = query_module.QueryParamsDictConverter().prepare_asyncpg_args(args, self._params_order_list)
     return await super().fetchval(*prepared_args, column=column, timeout=timeout)