diff options
| author | robot-piglet <[email protected]> | 2024-03-08 12:14:09 +0300 |
|---|---|---|
| committer | robot-piglet <[email protected]> | 2024-03-08 12:22:31 +0300 |
| commit | 9584fd808b5bbcd989348a67768064134e3341d9 (patch) | |
| tree | 601ec8deabb8dcdca66d4123cd7a0dcf7d804243 /contrib/python | |
| parent | e8116f70daae60dcbf13132581dba893802ce3fe (diff) | |
Intermediate changes
Diffstat (limited to 'contrib/python')
| -rw-r--r-- | contrib/python/hypothesis/py3/.dist-info/METADATA | 2 | ||||
| -rw-r--r-- | contrib/python/hypothesis/py3/hypothesis/internal/conjecture/data.py | 11 | ||||
| -rw-r--r-- | contrib/python/hypothesis/py3/hypothesis/stateful.py | 19 | ||||
| -rw-r--r-- | contrib/python/hypothesis/py3/hypothesis/strategies/_internal/types.py | 35 | ||||
| -rw-r--r-- | contrib/python/hypothesis/py3/hypothesis/version.py | 2 | ||||
| -rw-r--r-- | contrib/python/hypothesis/py3/ya.make | 2 | ||||
| -rw-r--r-- | contrib/python/pg8000/.dist-info/METADATA | 1073 | ||||
| -rw-r--r-- | contrib/python/pg8000/README.rst | 1071 | ||||
| -rw-r--r-- | contrib/python/pg8000/pg8000/core.py | 10 | ||||
| -rw-r--r-- | contrib/python/pg8000/ya.make | 2 |
10 files changed, 66 insertions, 2161 deletions
diff --git a/contrib/python/hypothesis/py3/.dist-info/METADATA b/contrib/python/hypothesis/py3/.dist-info/METADATA index d883f6dec61..171a09eebbc 100644 --- a/contrib/python/hypothesis/py3/.dist-info/METADATA +++ b/contrib/python/hypothesis/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: hypothesis -Version: 6.98.9 +Version: 6.98.10 Summary: A library for property-based testing Home-page: https://hypothesis.works Author: David R. MacIver and Zac Hatfield-Dodds diff --git a/contrib/python/hypothesis/py3/hypothesis/internal/conjecture/data.py b/contrib/python/hypothesis/py3/hypothesis/internal/conjecture/data.py index 0016f2fa1a7..cdce1afacf8 100644 --- a/contrib/python/hypothesis/py3/hypothesis/internal/conjecture/data.py +++ b/contrib/python/hypothesis/py3/hypothesis/internal/conjecture/data.py @@ -40,7 +40,7 @@ import attr from hypothesis.errors import Frozen, InvalidArgument, StopTest from hypothesis.internal.cache import LRUReusedCache -from hypothesis.internal.compat import floor, int_from_bytes, int_to_bytes +from hypothesis.internal.compat import add_note, floor, int_from_bytes, int_to_bytes from hypothesis.internal.conjecture.floats import float_to_lex, lex_to_float from hypothesis.internal.conjecture.junkdrawer import IntList, uniform from hypothesis.internal.conjecture.utils import ( @@ -1748,14 +1748,17 @@ class ConjectureData: try: if not at_top_level: return strategy.do_draw(self) - else: - assert start_time is not None + assert start_time is not None + key = observe_as or f"generate:unlabeled_{len(self.draw_times)}" + try: strategy.validate() try: return strategy.do_draw(self) finally: - key = observe_as or f"generate:unlabeled_{len(self.draw_times)}" self.draw_times[key] = time.perf_counter() - start_time + except Exception as err: + add_note(err, f"while generating {key[9:]!r} from {strategy!r}") + raise finally: self.stop_example() diff --git a/contrib/python/hypothesis/py3/hypothesis/stateful.py b/contrib/python/hypothesis/py3/hypothesis/stateful.py index bf7271fc4cb..2ab7ef13d52 100644 --- a/contrib/python/hypothesis/py3/hypothesis/stateful.py +++ b/contrib/python/hypothesis/py3/hypothesis/stateful.py @@ -47,6 +47,7 @@ from hypothesis._settings import ( from hypothesis.control import _current_build_context, current_build_context from hypothesis.core import TestFunc, given from hypothesis.errors import InvalidArgument, InvalidDefinition +from hypothesis.internal.compat import add_note from hypothesis.internal.conjecture import utils as cu from hypothesis.internal.healthcheck import fail_health_check from hypothesis.internal.observability import TESTCASE_CALLBACKS @@ -439,18 +440,16 @@ class Rule: bundles = attr.ib(init=False) def __attrs_post_init__(self): - arguments = {} + self.arguments_strategies = {} bundles = [] for k, v in sorted(self.arguments.items()): assert not isinstance(v, BundleReferenceStrategy) if isinstance(v, Bundle): bundles.append(v) consume = isinstance(v, BundleConsumer) - arguments[k] = BundleReferenceStrategy(v.name, consume=consume) - else: - arguments[k] = v + v = BundleReferenceStrategy(v.name, consume=consume) + self.arguments_strategies[k] = v self.bundles = tuple(bundles) - self.arguments_strategy = st.fixed_dictionaries(arguments) self_strategy = st.runner() @@ -978,7 +977,15 @@ class RuleStrategy(SearchStrategy): .filter(lambda r: feature_flags.is_enabled(r.function.__name__)) ) - return (rule, data.draw(rule.arguments_strategy)) + arguments = {} + for k, strat in rule.arguments_strategies.items(): + try: + arguments[k] = data.draw(strat) + except Exception as err: + rname = rule.function.__name__ + add_note(err, f"while generating {k!r} from {strat!r} for rule {rname}") + raise + return (rule, arguments) def is_valid(self, rule): predicates = self.machine._observability_predicates diff --git a/contrib/python/hypothesis/py3/hypothesis/strategies/_internal/types.py b/contrib/python/hypothesis/py3/hypothesis/strategies/_internal/types.py index d91102cb505..7c4e584ee62 100644 --- a/contrib/python/hypothesis/py3/hypothesis/strategies/_internal/types.py +++ b/contrib/python/hypothesis/py3/hypothesis/strategies/_internal/types.py @@ -37,6 +37,7 @@ from hypothesis.errors import HypothesisWarning, InvalidArgument, ResolutionFail from hypothesis.internal.compat import PYPY, BaseExceptionGroup, ExceptionGroup from hypothesis.internal.conjecture.utils import many as conjecture_utils_many from hypothesis.internal.filtering import max_len, min_len +from hypothesis.internal.reflection import get_pretty_function_description from hypothesis.strategies._internal.datetime import zoneinfo # type: ignore from hypothesis.strategies._internal.ipaddress import ( SPECIAL_IPv4_RANGES, @@ -300,16 +301,40 @@ def _get_constraints(args: Tuple[Any, ...]) -> Iterator["at.BaseMetadata"]: yield from at.Len(arg.start or 0, arg.stop) +def _flat_annotated_repr_parts(annotated_type): + # Helper to get a good error message in find_annotated_strategy() below. + type_reps = [ + get_pretty_function_description(a) + for a in annotated_type.__args__ + if not isinstance(a, typing.TypeVar) + ] + metadata_reps = [] + for m in getattr(annotated_type, "__metadata__", ()): + if is_annotated_type(m): + ts, ms = _flat_annotated_repr_parts(m) + type_reps.extend(ts) + metadata_reps.extend(ms) + else: + metadata_reps.append(get_pretty_function_description(m)) + return type_reps, metadata_reps + + def find_annotated_strategy(annotated_type): metadata = getattr(annotated_type, "__metadata__", ()) if any(is_annotated_type(arg) for arg in metadata): - # We are in the case where one of the metadata argument - # is itself an annotated type. Although supported at runtime, - # This shouldn't be allowed: we prefer to raise here + # Annotated[Annotated[T], ...] is perfectly acceptable, but it's all to easy + # to instead write Annotated[T1, Annotated[T2, ...]] - and nobody else checks + # for that at runtime. Once you add generics this can be seriously confusing, + # so we go to some trouble to give a helpful error message. + # For details: https://github.com/HypothesisWorks/hypothesis/issues/3891 + ty_rep = repr(annotated_type).replace("typing.Annotated", "Annotated") + ts, ms = _flat_annotated_repr_parts(annotated_type) + bits = ", ".join([" | ".join(dict.fromkeys(ts or "?")), *dict.fromkeys(ms)]) raise ResolutionFailed( - f"Failed to resolve strategy for the following Annotated type: {annotated_type}." - "Arguments to the Annotated type cannot be Annotated." + f"`{ty_rep}` is invalid because nesting Annotated is only allowed for " + f"the first (type) argument, not for later (metadata) arguments. " + f"Did you mean `Annotated[{bits}]`?" ) for arg in reversed(metadata): if isinstance(arg, st.SearchStrategy): diff --git a/contrib/python/hypothesis/py3/hypothesis/version.py b/contrib/python/hypothesis/py3/hypothesis/version.py index f54f8dc42f6..ce617c47e9f 100644 --- a/contrib/python/hypothesis/py3/hypothesis/version.py +++ b/contrib/python/hypothesis/py3/hypothesis/version.py @@ -8,5 +8,5 @@ # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at https://mozilla.org/MPL/2.0/. -__version_info__ = (6, 98, 9) +__version_info__ = (6, 98, 10) __version__ = ".".join(map(str, __version_info__)) diff --git a/contrib/python/hypothesis/py3/ya.make b/contrib/python/hypothesis/py3/ya.make index 89269430da9..4c7de0c00e3 100644 --- a/contrib/python/hypothesis/py3/ya.make +++ b/contrib/python/hypothesis/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(6.98.9) +VERSION(6.98.10) LICENSE(MPL-2.0) diff --git a/contrib/python/pg8000/.dist-info/METADATA b/contrib/python/pg8000/.dist-info/METADATA index 93aec222db4..291f74df6ff 100644 --- a/contrib/python/pg8000/.dist-info/METADATA +++ b/contrib/python/pg8000/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: pg8000 -Version: 1.30.4 +Version: 1.30.5 Summary: PostgreSQL interface library License: BSD 3-Clause License Project-URL: Homepage, https://github.com/tlocke/pg8000 @@ -1351,839 +1351,13 @@ pg8000 encounters a network problem it'll raise an ``InterfaceError`` with the m Native API Docs --------------- -pg8000.native.Error -``````````````````` - -Generic exception that is the base exception of the other error exceptions. - - -pg8000.native.InterfaceError -```````````````````````````` - -For errors that originate within pg8000. - - -pg8000.native.DatabaseError -``````````````````````````` - -For errors that originate from the server. - -pg8000.native.Connection(user, host='localhost', database=None, port=5432, password=None, source_address=None, unix_sock=None, ssl_context=None, timeout=None, tcp_keepalive=True, application_name=None, replication=None, sock=None) -`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` - -Creates a connection to a PostgreSQL database. - -user - The username to connect to the PostgreSQL server with. If your server character - encoding is not ``ascii`` or ``utf8``, then you need to provide ``user`` as bytes, - eg. ``'my_name'.encode('EUC-JP')``. - -host - The hostname of the PostgreSQL server to connect with. Providing this parameter is - necessary for TCP/IP connections. One of either ``host`` or ``unix_sock`` must be - provided. The default is ``localhost``. - -database - The name of the database instance to connect with. If ``None`` then the PostgreSQL - server will assume the database name is the same as the username. If your server - character encoding is not ``ascii`` or ``utf8``, then you need to provide ``database`` - as bytes, eg. ``'my_db'.encode('EUC-JP')``. - -port - The TCP/IP port of the PostgreSQL server instance. This parameter defaults to - ``5432``, the registered common port of PostgreSQL TCP/IP servers. - -password - The user password to connect to the server with. This parameter is optional; if - omitted and the database server requests password-based authentication, the connection - will fail to open. If this parameter is provided but not - requested by the server, no error will occur. - - If your server character encoding is not ``ascii`` or ``utf8``, then you need to - provide ``password`` as bytes, eg. ``'my_password'.encode('EUC-JP')``. - -source_address - The source IP address which initiates the connection to the PostgreSQL server. The - default is ``None`` which means that the operating system will choose the source - address. - -unix_sock - The path to the UNIX socket to access the database through, for example, - ``'/tmp/.s.PGSQL.5432'``. One of either ``host`` or ``unix_sock`` must be provided. - -ssl_context - This governs SSL encryption for TCP/IP sockets. It can have three values: - - - ``None``, meaning no SSL (the default) - - - ``True``, means use SSL with an |ssl.SSLContext|_ created using - |ssl.create_default_context()|_ - - - An instance of |ssl.SSLContext|_ which will be used to create the SSL connection. - - If your PostgreSQL server is behind an SSL proxy, you can set the pg8000-specific - attribute ``ssl.SSLContext.request_ssl = False``, which tells pg8000 to use an SSL - socket, but not to request SSL from the PostgreSQL server. Note that this means you - can't use SCRAM authentication with channel binding. - -timeout - This is the time in seconds before the connection to the server will time out. The - default is ``None`` which means no timeout. - -tcp_keepalive - If ``True`` then use `TCP keepalive - <https://en.wikipedia.org/wiki/Keepalive#TCP_keepalive>`_. The default is ``True``. - -application_name - Sets the `application_name - <https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-APPLICATION-NAME>`_. - If your server character encoding is not ``ascii`` or ``utf8``, then you need to - provide values as bytes, eg. ``'my_application_name'.encode('EUC-JP')``. The default - is ``None`` which means that the server will set the application name. - -replication - Used to run in `streaming replication mode - <https://www.postgresql.org/docs/current/protocol-replication.html>`_. If your server - character encoding is not ``ascii`` or ``utf8``, then you need to provide values as - bytes, eg. ``'database'.encode('EUC-JP')``. - -sock - A socket-like object to use for the connection. For example, ``sock`` could be a plain - ``socket.socket``, or it could represent an SSH tunnel or perhaps an - ``ssl.SSLSocket`` to an SSL proxy. If an |ssl.SSLContext| is provided, then it will be - used to attempt to create an SSL socket from the provided socket. - -pg8000.native.Connection.notifications -`````````````````````````````````````` - -A deque of server-side `notifications -<https://www.postgresql.org/docs/current/sql-notify.html>`__ received by this database -connection (via the ``LISTEN`` / ``NOTIFY`` PostgreSQL commands). Each list item is a -three-element tuple containing the PostgreSQL backend PID that issued the notify, the -channel and the payload. - - -pg8000.native.Connection.notices -```````````````````````````````` - -A deque of server-side notices received by this database connection. - - -pg8000.native.Connection.parameter_statuses -``````````````````````````````````````````` - -A deque of server-side parameter statuses received by this database connection. - - -pg8000.native.Connection.run(sql, stream=None, types=None, \*\*kwargs) -`````````````````````````````````````````````````````````````````````` - -Executes an sql statement, and returns the results as a ``list``. For example:: - - con.run("SELECT * FROM cities where population > :pop", pop=10000) - -sql - The SQL statement to execute. Parameter placeholders appear as a ``:`` followed by the - parameter name. - -stream - For use with the PostgreSQL `COPY - <http://www.postgresql.org/docs/current/static/sql-copy.html>`__ command. The nature - of the parameter depends on whether the SQL command is ``COPY FROM`` or ``COPY TO``. - - ``COPY FROM`` - The stream parameter must be a readable file-like object or an iterable. If it's an - iterable then the items can be ``str`` or binary. - ``COPY TO`` - The stream parameter must be a writable file-like object. - -types - A dictionary of oids. A key corresponds to a parameter. - -kwargs - The parameters of the SQL statement. - - -pg8000.native.Connection.row_count -`````````````````````````````````` - -This read-only attribute contains the number of rows that the last ``run()`` method -produced (for query statements like ``SELECT``) or affected (for modification statements -like ``UPDATE``. - -The value is -1 if: - -- No ``run()`` method has been performed yet. -- There was no rowcount associated with the last ``run()``. - - -pg8000.native.Connection.columns -```````````````````````````````` - -A list of column metadata. Each item in the list is a dictionary with the following -keys: - -- name -- table_oid -- column_attrnum -- type_oid -- type_size -- type_modifier -- format - - -pg8000.native.Connection.close() -```````````````````````````````` - -Closes the database connection. - - -pg8000.native.Connection.register_out_adapter(typ, out_func) -```````````````````````````````````````````````````````````` - -Register a type adapter for types going out from pg8000 to the server. - -typ - The Python class that the adapter is for. - -out_func - A function that takes the Python object and returns its string representation - in the format that the server requires. - - -pg8000.native.Connection.register_in_adapter(oid, in_func) -`````````````````````````````````````````````````````````` - -Register a type adapter for types coming in from the server to pg8000. - -oid - The PostgreSQL type identifier found in the `pg_type system catalog - <https://www.postgresql.org/docs/current/catalog-pg-type.html>`_. - -in_func - A function that takes the PostgreSQL string representation and returns a corresponding - Python object. - - -pg8000.native.Connection.prepare(sql) -````````````````````````````````````` - -Returns a ``PreparedStatement`` object which represents a `prepared statement -<https://www.postgresql.org/docs/current/sql-prepare.html>`_ on the server. It can -subsequently be repeatedly executed. - -sql - The SQL statement to prepare. Parameter placeholders appear as a ``:`` followed by the - parameter name. - - -pg8000.native.PreparedStatement -``````````````````````````````` - -A prepared statement object is returned by the ``pg8000.native.Connection.prepare()`` -method of a connection. It has the following methods: - - -pg8000.native.PreparedStatement.run(\*\*kwargs) -``````````````````````````````````````````````` - -Executes the prepared statement, and returns the results as a ``tuple``. - -kwargs - The parameters of the prepared statement. - - -pg8000.native.PreparedStatement.close() -``````````````````````````````````````` - -Closes the prepared statement, releasing the prepared statement held on the server. - - -pg8000.native.identifier(ident) -``````````````````````````````` - -Correctly quotes and escapes a string to be used as an `SQL identifier -<https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS>`_. - -ident - The ``str`` to be used as an SQL identifier. - - -pg8000.native.literal(value) -```````````````````````````` - -Correctly quotes and escapes a value to be used as an `SQL literal -<https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS>`_. - -value - The value to be used as an SQL literal. +`Native API Docs <docs/native_api_docs.rst>`_ DB-API 2 Docs ------------- - -Properties -`````````` - - -pg8000.dbapi.apilevel -::::::::::::::::::::: - -The DBAPI level supported, currently "2.0". - - -pg8000.dbapi.threadsafety -::::::::::::::::::::::::: - -Integer constant stating the level of thread safety the DBAPI interface supports. For -pg8000, the threadsafety value is 1, meaning that threads may share the module but not -connections. - - -pg8000.dbapi.paramstyle -::::::::::::::::::::::: - -String property stating the type of parameter marker formatting expected by -the interface. This value defaults to "format", in which parameters are -marked in this format: "WHERE name=%s". - -As an extension to the DBAPI specification, this value is not constant; it can be -changed to any of the following values: - -qmark - Question mark style, eg. ``WHERE name=?`` - -numeric - Numeric positional style, eg. ``WHERE name=:1`` - -named - Named style, eg. ``WHERE name=:paramname`` - -format - printf format codes, eg. ``WHERE name=%s`` - -pyformat - Python format codes, eg. ``WHERE name=%(paramname)s`` - - -pg8000.dbapi.STRING -::::::::::::::::::: - -String type oid. - -pg8000.dbapi.BINARY -::::::::::::::::::: - - -pg8000.dbapi.NUMBER -::::::::::::::::::: - -Numeric type oid. - - -pg8000.dbapi.DATETIME -::::::::::::::::::::: - -Timestamp type oid - - -pg8000.dbapi.ROWID -:::::::::::::::::: - -ROWID type oid - - -Functions -````````` - -pg8000.dbapi.connect(user, host='localhost', database=None, port=5432, password=None, source_address=None, unix_sock=None, ssl_context=None, timeout=None, tcp_keepalive=True, application_name=None, replication=None, sock=None) -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -Creates a connection to a PostgreSQL database. - -user - The username to connect to the PostgreSQL server with. If your server character - encoding is not ``ascii`` or ``utf8``, then you need to provide ``user`` as bytes, - eg. ``'my_name'.encode('EUC-JP')``. - -host - The hostname of the PostgreSQL server to connect with. Providing this parameter is - necessary for TCP/IP connections. One of either ``host`` or ``unix_sock`` must be - provided. The default is ``localhost``. - -database - The name of the database instance to connect with. If ``None`` then the PostgreSQL - server will assume the database name is the same as the username. If your server - character encoding is not ``ascii`` or ``utf8``, then you need to provide ``database`` - as bytes, eg. ``'my_db'.encode('EUC-JP')``. - -port - The TCP/IP port of the PostgreSQL server instance. This parameter defaults to - ``5432``, the registered common port of PostgreSQL TCP/IP servers. - -password - The user password to connect to the server with. This parameter is optional; if - omitted and the database server requests password-based authentication, the - connection will fail to open. If this parameter is provided but not requested by the - server, no error will occur. - - If your server character encoding is not ``ascii`` or ``utf8``, then you need to - provide ``password`` as bytes, eg. ``'my_password'.encode('EUC-JP')``. - -source_address - The source IP address which initiates the connection to the PostgreSQL server. The - default is ``None`` which means that the operating system will choose the source - address. - -unix_sock - The path to the UNIX socket to access the database through, for example, - ``'/tmp/.s.PGSQL.5432'``. One of either ``host`` or ``unix_sock`` must be provided. - -ssl_context - This governs SSL encryption for TCP/IP sockets. It can have three values: - - - ``None``, meaning no SSL (the default) - - ``True``, means use SSL with an |ssl.SSLContext|_ created using - |ssl.create_default_context()|_. - - - An instance of |ssl.SSLContext|_ which will be used to create the SSL connection. - - If your PostgreSQL server is behind an SSL proxy, you can set the pg8000-specific - attribute ``ssl.SSLContext.request_ssl = False``, which tells pg8000 to use an SSL - socket, but not to request SSL from the PostgreSQL server. Note that this means you - can't use SCRAM authentication with channel binding. - -timeout - This is the time in seconds before the connection to the server will time out. The - default is ``None`` which means no timeout. - -tcp_keepalive - If ``True`` then use `TCP keepalive - <https://en.wikipedia.org/wiki/Keepalive#TCP_keepalive>`_. The default is ``True``. - -application_name - Sets the `application_name - <https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-APPLICATION-NAME>`_. If your server character encoding is not ``ascii`` or ``utf8``, then you need to - provide values as bytes, eg. ``'my_application_name'.encode('EUC-JP')``. The default - is ``None`` which means that the server will set the application name. - -replication - Used to run in `streaming replication mode - <https://www.postgresql.org/docs/current/protocol-replication.html>`_. If your server - character encoding is not ``ascii`` or ``utf8``, then you need to provide values as - bytes, eg. ``'database'.encode('EUC-JP')``. - -sock - A socket-like object to use for the connection. For example, ``sock`` could be a plain - ``socket.socket``, or it could represent an SSH tunnel or perhaps an - ``ssl.SSLSocket`` to an SSL proxy. If an |ssl.SSLContext| is provided, then it will be - used to attempt to create an SSL socket from the provided socket. - - -pg8000.dbapi.Date(year, month, day) - -Construct an object holding a date value. - -This property is part of the `DBAPI 2.0 specification -<http://www.python.org/dev/peps/pep-0249/>`_. - -Returns: `datetime.date` - - -pg8000.dbapi.Time(hour, minute, second) -::::::::::::::::::::::::::::::::::::::: - -Construct an object holding a time value. - -Returns: ``datetime.time`` - - -pg8000.dbapi.Timestamp(year, month, day, hour, minute, second) -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -Construct an object holding a timestamp value. - -Returns: ``datetime.datetime`` - - -pg8000.dbapi.DateFromTicks(ticks) -::::::::::::::::::::::::::::::::: - -Construct an object holding a date value from the given ticks value (number of seconds -since the epoch). - -Returns: ``datetime.datetime`` - - -pg8000.dbapi.TimeFromTicks(ticks) -::::::::::::::::::::::::::::::::: - -Construct an object holding a time value from the given ticks value (number of seconds -since the epoch). - -Returns: ``datetime.time`` - - -pg8000.dbapi.TimestampFromTicks(ticks) -:::::::::::::::::::::::::::::::::::::: - -Construct an object holding a timestamp value from the given ticks value (number of -seconds since the epoch). - -Returns: ``datetime.datetime`` - - -pg8000.dbapi.Binary(value) -:::::::::::::::::::::::::: - -Construct an object holding binary data. - -Returns: ``bytes``. - - -Generic Exceptions -`````````````````` - -Pg8000 uses the standard DBAPI 2.0 exception tree as "generic" exceptions. Generally, -more specific exception types are raised; these specific exception types are derived -from the generic exceptions. - -pg8000.dbapi.Warning -:::::::::::::::::::: - -Generic exception raised for important database warnings like data truncations. This -exception is not currently used by pg8000. - - -pg8000.dbapi.Error -:::::::::::::::::: - -Generic exception that is the base exception of all other error exceptions. - - -pg8000.dbapi.InterfaceError -::::::::::::::::::::::::::: - -Generic exception raised for errors that are related to the database interface rather -than the database itself. For example, if the interface attempts to use an SSL -connection but the server refuses, an InterfaceError will be raised. - - -pg8000.dbapi.DatabaseError -:::::::::::::::::::::::::: - -Generic exception raised for errors that are related to the database. This exception is -currently never raised by pg8000. - - -pg8000.dbapi.DataError -:::::::::::::::::::::: - -Generic exception raised for errors that are due to problems with the processed data. -This exception is not currently raised by pg8000. - - -pg8000.dbapi.OperationalError -::::::::::::::::::::::::::::: - -Generic exception raised for errors that are related to the database's operation and not -necessarily under the control of the programmer. This exception is currently never -raised by pg8000. - - -pg8000.dbapi.IntegrityError -::::::::::::::::::::::::::: - -Generic exception raised when the relational integrity of the database is affected. This -exception is not currently raised by pg8000. - - -pg8000.dbapi.InternalError -:::::::::::::::::::::::::: - -Generic exception raised when the database encounters an internal error. This is -currently only raised when unexpected state occurs in the pg8000 interface itself, and -is typically the result of a interface bug. - - -pg8000.dbapi.ProgrammingError -::::::::::::::::::::::::::::: - -Generic exception raised for programming errors. For example, this exception is raised -if more parameter fields are in a query string than there are available parameters. - - -pg8000.dbapi.NotSupportedError -:::::::::::::::::::::::::::::: - -Generic exception raised in case a method or database API was used which is not -supported by the database. - - -Classes -``````` - - -pg8000.dbapi.Connection -::::::::::::::::::::::: - -A connection object is returned by the ``pg8000.connect()`` function. It represents a -single physical connection to a PostgreSQL database. - - -pg8000.dbapi.Connection.autocommit -:::::::::::::::::::::::::::::::::: - -Following the DB-API specification, autocommit is off by default. It can be turned on by -setting this boolean pg8000-specific autocommit property to ``True``. - - -pg8000.dbapi.Connection.close() -::::::::::::::::::::::::::::::: - -Closes the database connection. - - -pg8000.dbapi.Connection.cursor() -:::::::::::::::::::::::::::::::: - -Creates a ``pg8000.dbapi.Cursor`` object bound to this connection. - - -pg8000.dbapi.Connection.rollback() -:::::::::::::::::::::::::::::::::: - -Rolls back the current database transaction. - - -pg8000.dbapi.Connection.tpc_begin(xid) -:::::::::::::::::::::::::::::::::::::: - -Begins a TPC transaction with the given transaction ID xid. This method should be -called outside of a transaction (i.e. nothing may have executed since the last -``commit()`` or ``rollback()``. Furthermore, it is an error to call ``commit()`` or -``rollback()`` within the TPC transaction. A ``ProgrammingError`` is raised, if the -application calls ``commit()`` or ``rollback()`` during an active TPC transaction. - - -pg8000.dbapi.Connection.tpc_commit(xid=None) -:::::::::::::::::::::::::::::::::::::::::::: - -When called with no arguments, ``tpc_commit()`` commits a TPC transaction previously -prepared with ``tpc_prepare()``. If ``tpc_commit()`` is called prior to -``tpc_prepare()``, a single phase commit is performed. A transaction manager may choose -to do this if only a single resource is participating in the global transaction. - -When called with a transaction ID ``xid``, the database commits the given transaction. -If an invalid transaction ID is provided, a ``ProgrammingError`` will be raised. This -form should be called outside of a transaction, and is intended for use in recovery. - -On return, the TPC transaction is ended. - - -pg8000.dbapi.Connection.tpc_prepare() -::::::::::::::::::::::::::::::::::::: - -Performs the first phase of a transaction started with ``.tpc_begin()``. A -``ProgrammingError`` is be raised if this method is called outside of a TPC transaction. - -After calling ``tpc_prepare()``, no statements can be executed until ``tpc_commit()`` or -``tpc_rollback()`` have been called. - - -pg8000.dbapi.Connection.tpc_recover() -::::::::::::::::::::::::::::::::::::: - -Returns a list of pending transaction IDs suitable for use with ``tpc_commit(xid)`` or -``tpc_rollback(xid)``. - - -pg8000.dbapi.Connection.tpc_rollback(xid=None) -:::::::::::::::::::::::::::::::::::::::::::::: - -When called with no arguments, ``tpc_rollback()`` rolls back a TPC transaction. It may -be called before or after ``tpc_prepare()``. - -When called with a transaction ID xid, it rolls back the given transaction. If an -invalid transaction ID is provided, a ``ProgrammingError`` is raised. This form should -be called outside of a transaction, and is intended for use in recovery. - -On return, the TPC transaction is ended. - - -pg8000.dbapi.Connection.xid(format_id, global_transaction_id, branch_qualifier) -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -Create a Transaction IDs (only global_transaction_id is used in pg) format_id and -branch_qualifier are not used in postgres global_transaction_id may be any string -identifier supported by postgres returns a tuple (format_id, global_transaction_id, -branch_qualifier) - - -pg8000.dbapi.Cursor -::::::::::::::::::: - -A cursor object is returned by the ``pg8000.dbapi.Connection.cursor()`` method of a -connection. It has the following attributes and methods: - -pg8000.dbapi.Cursor.arraysize -''''''''''''''''''''''''''''' - -This read/write attribute specifies the number of rows to fetch at a time with -``pg8000.dbapi.Cursor.fetchmany()``. It defaults to 1. - - -pg8000.dbapi.Cursor.connection -'''''''''''''''''''''''''''''' - -This read-only attribute contains a reference to the connection object (an instance of -``pg8000.dbapi.Connection``) on which the cursor was created. - - -pg8000.dbapi.Cursor.rowcount -'''''''''''''''''''''''''''' - -This read-only attribute contains the number of rows that the last ``execute()`` or -``executemany()`` method produced (for query statements like ``SELECT``) or affected -(for modification statements like ``UPDATE``. - -The value is -1 if: - -- No ``execute()`` or ``executemany()`` method has been performed yet on the cursor. - -- There was no rowcount associated with the last ``execute()``. - -- At least one of the statements executed as part of an ``executemany()`` had no row - count associated with it. - - -pg8000.dbapi.Cursor.description -''''''''''''''''''''''''''''''' - -This read-only attribute is a sequence of 7-item sequences. Each value contains -information describing one result column. The 7 items returned for each column are -(name, type_code, display_size, internal_size, precision, scale, null_ok). Only the -first two values are provided by the current implementation. - - -pg8000.dbapi.Cursor.close() -''''''''''''''''''''''''''' - -Closes the cursor. - - -pg8000.dbapi.Cursor.execute(operation, args=None, stream=None) -'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' - -Executes a database operation. Parameters may be provided as a sequence, or as a -mapping, depending upon the value of ``pg8000.dbapi.paramstyle``. Returns the cursor, -which may be iterated over. - -operation - The SQL statement to execute. - -args - If ``pg8000.dbapi.paramstyle`` is ``qmark``, ``numeric``, or ``format``, this - argument should be an array of parameters to bind into the statement. If - ``pg8000.dbapi.paramstyle`` is ``named``, the argument should be a ``dict`` mapping of - parameters. If ``pg8000.dbapi.paramstyle`` is ``pyformat``, the argument value may be - either an array or a mapping. - -stream - This is a pg8000 extension for use with the PostgreSQL `COPY - <http://www.postgresql.org/docs/current/static/sql-copy.html>`__ command. For a - ``COPY FROM`` the parameter must be a readable file-like object, and for ``COPY TO`` - it must be writable. - - -pg8000.dbapi.Cursor.executemany(operation, param_sets) -'''''''''''''''''''''''''''''''''''''''''''''''''''''' - -Prepare a database operation, and then execute it against all parameter sequences or -mappings provided. - -operation - The SQL statement to execute. - -parameter_sets - A sequence of parameters to execute the statement with. The values in the sequence - should be sequences or mappings of parameters, the same as the args argument of the - ``pg8000.dbapi.Cursor.execute()`` method. - - -pg8000.dbapi.Cursor.callproc(procname, parameters=None) -''''''''''''''''''''''''''''''''''''''''''''''''''''''' - -Call a stored database procedure with the given name and optional parameters. - - -procname - The name of the procedure to call. - -parameters - A list of parameters. - - -pg8000.dbapi.Cursor.fetchall() -'''''''''''''''''''''''''''''' - -Fetches all remaining rows of a query result. - -Returns: A sequence, each entry of which is a sequence of field values making up a row. - - -pg8000.dbapi.Cursor.fetchmany(size=None) -'''''''''''''''''''''''''''''''''''''''' - -Fetches the next set of rows of a query result. - -size - The number of rows to fetch when called. If not provided, the - ``pg8000.dbapi.Cursor.arraysize`` attribute value is used instead. - -Returns: A sequence, each entry of which is a sequence of field values making up a row. -If no more rows are available, an empty sequence will be returned. - - -pg8000.dbapi.Cursor.fetchone() -'''''''''''''''''''''''''''''' - -Fetch the next row of a query result set. - -Returns: A row as a sequence of field values, or ``None`` if no more rows are available. - - -pg8000.dbapi.Cursor.setinputsizes(\*sizes) -'''''''''''''''''''''''''''''''''''''''''' - -Used to set the parameter types of the next query. This is useful if it's difficult for -pg8000 to work out the types from the parameters themselves (eg. for parameters of type -None). - -sizes - Positional parameters that are either the Python type of the parameter to be sent, or - the PostgreSQL oid. Common oids are available as constants such as ``pg8000.STRING``, - ``pg8000.INTEGER``, ``pg8000.TIME`` etc. - - -pg8000.dbapi.Cursor.setoutputsize(size, column=None) -'''''''''''''''''''''''''''''''''''''''''''''''''''' - -Not implemented by pg8000. - - -pg8000.dbapi.Interval -''''''''''''''''''''' - -An Interval represents a measurement of time. In PostgreSQL, an interval is defined in -the measure of months, days, and microseconds; as such, the pg8000 interval type -represents the same information. - -Note that values of the ``pg8000.dbapi.Interval.microseconds``, -``pg8000.dbapi.Interval.days``, and ``pg8000.dbapi.Interval.months`` properties are -independently measured and cannot be converted to each other. A month may be 28, 29, 30, -or 31 days, and a day may occasionally be lengthened slightly by a leap second. +`DB-API 2 Docs <docs/dbapi2_docs.rst>`_ Design Decisions @@ -2258,243 +1432,4 @@ Run ``tox`` to make sure all tests pass, then update the release notes, then do: Release Notes ------------- -Version 1.30.4, 2024-01-03 -`````````````````````````` - -- Add support for more range and multirange types. - -- Make the ``Connection.parameter_statuses`` property a ``dict`` rather than a ``dequeue``. - - -Version 1.30.3, 2023-10-31 -`````````````````````````` - -- Fix problem with PG date overflowing Python types. Now we return the ``str`` we got from the - server if we can't parse it. - - -Version 1.30.2, 2023-09-17 -`````````````````````````` - -- Bug fix where dollar-quoted string constants weren't supported. - - -Version 1.30.1, 2023-07-29 -`````````````````````````` - -- There was a problem uploading the previous version (1.30.0) to PyPI because the - markup of the README.rst was invalid. There's now a step in the automated tests to - check for this. - - -Version 1.30.0, 2023-07-27 -`````````````````````````` - -- Remove support for Python 3.7 - -- Add a ``sock`` keyword parameter for creating a connection from a pre-configured - socket. - - -Version 1.29.8, 2023-06-16 -`````````````````````````` - -- Ranges don't work with legacy API. - - -Version 1.29.7, 2023-06-16 -`````````````````````````` - -- Add support for PostgreSQL ``range`` and ``multirange`` types. Previously pg8000 - would just return them as strings, but now they're returned as ``Range`` and lists of - ``Range``. - -- The PostgreSQL ``record`` type is now returned as a ``tuple`` of strings, whereas - before it was returned as one string. - - -Version 1.29.6, 2023-05-29 -`````````````````````````` - -- Fixed two bugs with composite types. Nulls should be represented by an empty string, - and in an array of composite types, the elements should be surrounded by double - quotes. - - -Version 1.29.5, 2023-05-09 -`````````````````````````` - -- Fixed bug where pg8000 didn't handle the case when the number of bytes received from - a socket was fewer than requested. This was being interpreted as a network error, but - in fact we just needed to wait until more bytes were available. - -- When using the ``PGInterval`` type, if a response from the server contained the period - ``millennium``, it wasn't recognised. This was caused by a spelling mistake where we - had ``millenium`` rather than ``millennium``. - -- Added support for sending PostgreSQL composite types. If a value is sent as a - ``tuple``, pg8000 will send it to the server as a ``(`` delimited composite string. - - -Version 1.29.4, 2022-12-14 -`````````````````````````` - -- Fixed bug in ``pg8000.dbapi`` in the ``setinputsizes()`` method where if a ``size`` - was a recognized Python type, the method failed. - - -Version 1.29.3, 2022-10-26 -`````````````````````````` - -- Upgrade the SCRAM library to version 1.4.3. This adds support for the case where the - client supports channel binding but the server doesn't. - - -Version 1.29.2, 2022-10-09 -`````````````````````````` - -- Fixed a bug where in a literal array, items such as ``\n`` and ``\r`` weren't - escaped properly before being sent to the server. - -- Fixed a bug where if the PostgreSQL server has a half-hour time zone set, values of - type ``timestamp with time zone`` failed. This has been fixed by using the ``parse`` - function of the ``dateutil`` package if the ``datetime`` parser fails. - - -Version 1.29.1, 2022-05-23 -`````````````````````````` - -- In trying to determine if there's been a failed commit, check for ``ROLLBACK TO - SAVEPOINT``. - - -Version 1.29.0, 2022-05-21 -`````````````````````````` - -- Implement a workaround for the `silent failed commit - <https://github.com/tlocke/pg8000/issues/36>`_ bug. - -- Previously if an empty string was sent as the query an exception would be raised, but - that isn't done now. - - -Version 1.28.3, 2022-05-18 -`````````````````````````` - -- Put back ``__version__`` attributes that were inadvertently removed. - - -Version 1.28.2, 2022-05-17 -`````````````````````````` - -- Use a build system that's compliant with PEP517. - - -Version 1.28.1, 2022-05-17 -`````````````````````````` - -- If when doing a ``COPY FROM`` the ``stream`` parameter is an iterator of ``str``, - pg8000 used to silently append a newline to the end. That no longer happens. - - -Version 1.28.0, 2022-05-17 -`````````````````````````` - -- When using the ``COPY FROM`` SQL statement, allow the ``stream`` parameter to be an - iterable. - - -Version 1.27.1, 2022-05-16 -`````````````````````````` - -- The ``seconds`` attribute of ``PGInterval`` is now always a ``float``, to cope with - fractional seconds. - -- Updated the ``interval`` parsers for ``iso_8601`` and ``sql_standard`` to take - account of fractional seconds. - - -Version 1.27.0, 2022-05-16 -`````````````````````````` - -- It used to be that by default, if pg8000 received an ``interval`` type from the server - and it was too big to fit into a ``datetime.timedelta`` then an exception would be - raised. Now if an interval is too big for ``datetime.timedelta`` a ``PGInterval`` is - returned. - -* pg8000 now supports all the output formats for an ``interval`` (``postgres``, - ``postgres_verbose``, ``iso_8601`` and ``sql_standard``). - - -Version 1.26.1, 2022-04-23 -`````````````````````````` - -- Make sure all tests are run by the GitHub Actions tests on commit. -- Remove support for Python 3.6 -- Remove support for PostgreSQL 9.6 - - -Version 1.26.0, 2022-04-18 -`````````````````````````` - -- When connecting, raise an ``InterfaceError('network error')`` rather than let the - underlying ``struct.error`` float up. - -- Make licence text the same as that used by the OSI. Previously the licence wording - differed slightly from the BSD 3 Clause licence at - https://opensource.org/licenses/BSD-3-Clause. This meant that automated tools didn't - pick it up as being Open Source. The changes are believed to not alter the meaning of the license at all. - - -Version 1.25.0, 2022-04-17 -`````````````````````````` - -- Fix more cases where a ``ResourceWarning`` would be raise because of a socket that had - been left open. - -- We now have a single ``InterfaceError`` with the message 'network error' for all - network errors, with the underlying exception held in the ``cause`` of the exception. - - -Version 1.24.2, 2022-04-15 -`````````````````````````` - -- To prevent a ``ResourceWarning`` close socket if a connection can't be created. - - -Version 1.24.1, 2022-03-02 -`````````````````````````` - -- Return pg +/-infinity dates as ``str``. Previously +/-infinity pg values would cause - an error when returned, but now we return +/-infinity as strings. - - -Version 1.24.0, 2022-02-06 -`````````````````````````` - -- Add SQL escape functions identifier() and literal() to the native API. For use when a - query can't be parameterised and the SQL string has to be created using untrusted - values. - - -Version 1.23.0, 2021-11-13 -`````````````````````````` - -- If a query has no parameters, then the query will no longer be parsed. Although there - are performance benefits for doing this, the main reason is to avoid query rewriting, - which can introduce errors. - - -Version 1.22.1, 2021-11-10 -`````````````````````````` - -- Fix bug in PGInterval type where ``str()`` failed for a millennia value. - - -Version 1.22.0, 2021-10-13 -`````````````````````````` - -- Rather than specifying the oids in the ``Parse`` step of the Postgres protocol, pg8000 - now omits them, and so Postgres will use the oids it determines from the query. This - makes the pg8000 code simpler and also it should also make the nuances of type - matching more straightforward. +`Release Notes <docs/release_notes.rst>`_ diff --git a/contrib/python/pg8000/README.rst b/contrib/python/pg8000/README.rst index ad8ea650f27..55c26ddef34 100644 --- a/contrib/python/pg8000/README.rst +++ b/contrib/python/pg8000/README.rst @@ -1323,839 +1323,13 @@ pg8000 encounters a network problem it'll raise an ``InterfaceError`` with the m Native API Docs --------------- -pg8000.native.Error -``````````````````` - -Generic exception that is the base exception of the other error exceptions. - - -pg8000.native.InterfaceError -```````````````````````````` - -For errors that originate within pg8000. - - -pg8000.native.DatabaseError -``````````````````````````` - -For errors that originate from the server. - -pg8000.native.Connection(user, host='localhost', database=None, port=5432, password=None, source_address=None, unix_sock=None, ssl_context=None, timeout=None, tcp_keepalive=True, application_name=None, replication=None, sock=None) -`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` - -Creates a connection to a PostgreSQL database. - -user - The username to connect to the PostgreSQL server with. If your server character - encoding is not ``ascii`` or ``utf8``, then you need to provide ``user`` as bytes, - eg. ``'my_name'.encode('EUC-JP')``. - -host - The hostname of the PostgreSQL server to connect with. Providing this parameter is - necessary for TCP/IP connections. One of either ``host`` or ``unix_sock`` must be - provided. The default is ``localhost``. - -database - The name of the database instance to connect with. If ``None`` then the PostgreSQL - server will assume the database name is the same as the username. If your server - character encoding is not ``ascii`` or ``utf8``, then you need to provide ``database`` - as bytes, eg. ``'my_db'.encode('EUC-JP')``. - -port - The TCP/IP port of the PostgreSQL server instance. This parameter defaults to - ``5432``, the registered common port of PostgreSQL TCP/IP servers. - -password - The user password to connect to the server with. This parameter is optional; if - omitted and the database server requests password-based authentication, the connection - will fail to open. If this parameter is provided but not - requested by the server, no error will occur. - - If your server character encoding is not ``ascii`` or ``utf8``, then you need to - provide ``password`` as bytes, eg. ``'my_password'.encode('EUC-JP')``. - -source_address - The source IP address which initiates the connection to the PostgreSQL server. The - default is ``None`` which means that the operating system will choose the source - address. - -unix_sock - The path to the UNIX socket to access the database through, for example, - ``'/tmp/.s.PGSQL.5432'``. One of either ``host`` or ``unix_sock`` must be provided. - -ssl_context - This governs SSL encryption for TCP/IP sockets. It can have three values: - - - ``None``, meaning no SSL (the default) - - - ``True``, means use SSL with an |ssl.SSLContext|_ created using - |ssl.create_default_context()|_ - - - An instance of |ssl.SSLContext|_ which will be used to create the SSL connection. - - If your PostgreSQL server is behind an SSL proxy, you can set the pg8000-specific - attribute ``ssl.SSLContext.request_ssl = False``, which tells pg8000 to use an SSL - socket, but not to request SSL from the PostgreSQL server. Note that this means you - can't use SCRAM authentication with channel binding. - -timeout - This is the time in seconds before the connection to the server will time out. The - default is ``None`` which means no timeout. - -tcp_keepalive - If ``True`` then use `TCP keepalive - <https://en.wikipedia.org/wiki/Keepalive#TCP_keepalive>`_. The default is ``True``. - -application_name - Sets the `application_name - <https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-APPLICATION-NAME>`_. - If your server character encoding is not ``ascii`` or ``utf8``, then you need to - provide values as bytes, eg. ``'my_application_name'.encode('EUC-JP')``. The default - is ``None`` which means that the server will set the application name. - -replication - Used to run in `streaming replication mode - <https://www.postgresql.org/docs/current/protocol-replication.html>`_. If your server - character encoding is not ``ascii`` or ``utf8``, then you need to provide values as - bytes, eg. ``'database'.encode('EUC-JP')``. - -sock - A socket-like object to use for the connection. For example, ``sock`` could be a plain - ``socket.socket``, or it could represent an SSH tunnel or perhaps an - ``ssl.SSLSocket`` to an SSL proxy. If an |ssl.SSLContext| is provided, then it will be - used to attempt to create an SSL socket from the provided socket. - -pg8000.native.Connection.notifications -`````````````````````````````````````` - -A deque of server-side `notifications -<https://www.postgresql.org/docs/current/sql-notify.html>`__ received by this database -connection (via the ``LISTEN`` / ``NOTIFY`` PostgreSQL commands). Each list item is a -three-element tuple containing the PostgreSQL backend PID that issued the notify, the -channel and the payload. - - -pg8000.native.Connection.notices -```````````````````````````````` - -A deque of server-side notices received by this database connection. - - -pg8000.native.Connection.parameter_statuses -``````````````````````````````````````````` - -A deque of server-side parameter statuses received by this database connection. - - -pg8000.native.Connection.run(sql, stream=None, types=None, \*\*kwargs) -`````````````````````````````````````````````````````````````````````` - -Executes an sql statement, and returns the results as a ``list``. For example:: - - con.run("SELECT * FROM cities where population > :pop", pop=10000) - -sql - The SQL statement to execute. Parameter placeholders appear as a ``:`` followed by the - parameter name. - -stream - For use with the PostgreSQL `COPY - <http://www.postgresql.org/docs/current/static/sql-copy.html>`__ command. The nature - of the parameter depends on whether the SQL command is ``COPY FROM`` or ``COPY TO``. - - ``COPY FROM`` - The stream parameter must be a readable file-like object or an iterable. If it's an - iterable then the items can be ``str`` or binary. - ``COPY TO`` - The stream parameter must be a writable file-like object. - -types - A dictionary of oids. A key corresponds to a parameter. - -kwargs - The parameters of the SQL statement. - - -pg8000.native.Connection.row_count -`````````````````````````````````` - -This read-only attribute contains the number of rows that the last ``run()`` method -produced (for query statements like ``SELECT``) or affected (for modification statements -like ``UPDATE``. - -The value is -1 if: - -- No ``run()`` method has been performed yet. -- There was no rowcount associated with the last ``run()``. - - -pg8000.native.Connection.columns -```````````````````````````````` - -A list of column metadata. Each item in the list is a dictionary with the following -keys: - -- name -- table_oid -- column_attrnum -- type_oid -- type_size -- type_modifier -- format - - -pg8000.native.Connection.close() -```````````````````````````````` - -Closes the database connection. - - -pg8000.native.Connection.register_out_adapter(typ, out_func) -```````````````````````````````````````````````````````````` - -Register a type adapter for types going out from pg8000 to the server. - -typ - The Python class that the adapter is for. - -out_func - A function that takes the Python object and returns its string representation - in the format that the server requires. - - -pg8000.native.Connection.register_in_adapter(oid, in_func) -`````````````````````````````````````````````````````````` - -Register a type adapter for types coming in from the server to pg8000. - -oid - The PostgreSQL type identifier found in the `pg_type system catalog - <https://www.postgresql.org/docs/current/catalog-pg-type.html>`_. - -in_func - A function that takes the PostgreSQL string representation and returns a corresponding - Python object. - - -pg8000.native.Connection.prepare(sql) -````````````````````````````````````` - -Returns a ``PreparedStatement`` object which represents a `prepared statement -<https://www.postgresql.org/docs/current/sql-prepare.html>`_ on the server. It can -subsequently be repeatedly executed. - -sql - The SQL statement to prepare. Parameter placeholders appear as a ``:`` followed by the - parameter name. - - -pg8000.native.PreparedStatement -``````````````````````````````` - -A prepared statement object is returned by the ``pg8000.native.Connection.prepare()`` -method of a connection. It has the following methods: - - -pg8000.native.PreparedStatement.run(\*\*kwargs) -``````````````````````````````````````````````` - -Executes the prepared statement, and returns the results as a ``tuple``. - -kwargs - The parameters of the prepared statement. - - -pg8000.native.PreparedStatement.close() -``````````````````````````````````````` - -Closes the prepared statement, releasing the prepared statement held on the server. - - -pg8000.native.identifier(ident) -``````````````````````````````` - -Correctly quotes and escapes a string to be used as an `SQL identifier -<https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS>`_. - -ident - The ``str`` to be used as an SQL identifier. - - -pg8000.native.literal(value) -```````````````````````````` - -Correctly quotes and escapes a value to be used as an `SQL literal -<https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS>`_. - -value - The value to be used as an SQL literal. +`Native API Docs <docs/native_api_docs.rst>`_ DB-API 2 Docs ------------- - -Properties -`````````` - - -pg8000.dbapi.apilevel -::::::::::::::::::::: - -The DBAPI level supported, currently "2.0". - - -pg8000.dbapi.threadsafety -::::::::::::::::::::::::: - -Integer constant stating the level of thread safety the DBAPI interface supports. For -pg8000, the threadsafety value is 1, meaning that threads may share the module but not -connections. - - -pg8000.dbapi.paramstyle -::::::::::::::::::::::: - -String property stating the type of parameter marker formatting expected by -the interface. This value defaults to "format", in which parameters are -marked in this format: "WHERE name=%s". - -As an extension to the DBAPI specification, this value is not constant; it can be -changed to any of the following values: - -qmark - Question mark style, eg. ``WHERE name=?`` - -numeric - Numeric positional style, eg. ``WHERE name=:1`` - -named - Named style, eg. ``WHERE name=:paramname`` - -format - printf format codes, eg. ``WHERE name=%s`` - -pyformat - Python format codes, eg. ``WHERE name=%(paramname)s`` - - -pg8000.dbapi.STRING -::::::::::::::::::: - -String type oid. - -pg8000.dbapi.BINARY -::::::::::::::::::: - - -pg8000.dbapi.NUMBER -::::::::::::::::::: - -Numeric type oid. - - -pg8000.dbapi.DATETIME -::::::::::::::::::::: - -Timestamp type oid - - -pg8000.dbapi.ROWID -:::::::::::::::::: - -ROWID type oid - - -Functions -````````` - -pg8000.dbapi.connect(user, host='localhost', database=None, port=5432, password=None, source_address=None, unix_sock=None, ssl_context=None, timeout=None, tcp_keepalive=True, application_name=None, replication=None, sock=None) -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -Creates a connection to a PostgreSQL database. - -user - The username to connect to the PostgreSQL server with. If your server character - encoding is not ``ascii`` or ``utf8``, then you need to provide ``user`` as bytes, - eg. ``'my_name'.encode('EUC-JP')``. - -host - The hostname of the PostgreSQL server to connect with. Providing this parameter is - necessary for TCP/IP connections. One of either ``host`` or ``unix_sock`` must be - provided. The default is ``localhost``. - -database - The name of the database instance to connect with. If ``None`` then the PostgreSQL - server will assume the database name is the same as the username. If your server - character encoding is not ``ascii`` or ``utf8``, then you need to provide ``database`` - as bytes, eg. ``'my_db'.encode('EUC-JP')``. - -port - The TCP/IP port of the PostgreSQL server instance. This parameter defaults to - ``5432``, the registered common port of PostgreSQL TCP/IP servers. - -password - The user password to connect to the server with. This parameter is optional; if - omitted and the database server requests password-based authentication, the - connection will fail to open. If this parameter is provided but not requested by the - server, no error will occur. - - If your server character encoding is not ``ascii`` or ``utf8``, then you need to - provide ``password`` as bytes, eg. ``'my_password'.encode('EUC-JP')``. - -source_address - The source IP address which initiates the connection to the PostgreSQL server. The - default is ``None`` which means that the operating system will choose the source - address. - -unix_sock - The path to the UNIX socket to access the database through, for example, - ``'/tmp/.s.PGSQL.5432'``. One of either ``host`` or ``unix_sock`` must be provided. - -ssl_context - This governs SSL encryption for TCP/IP sockets. It can have three values: - - - ``None``, meaning no SSL (the default) - - ``True``, means use SSL with an |ssl.SSLContext|_ created using - |ssl.create_default_context()|_. - - - An instance of |ssl.SSLContext|_ which will be used to create the SSL connection. - - If your PostgreSQL server is behind an SSL proxy, you can set the pg8000-specific - attribute ``ssl.SSLContext.request_ssl = False``, which tells pg8000 to use an SSL - socket, but not to request SSL from the PostgreSQL server. Note that this means you - can't use SCRAM authentication with channel binding. - -timeout - This is the time in seconds before the connection to the server will time out. The - default is ``None`` which means no timeout. - -tcp_keepalive - If ``True`` then use `TCP keepalive - <https://en.wikipedia.org/wiki/Keepalive#TCP_keepalive>`_. The default is ``True``. - -application_name - Sets the `application_name - <https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-APPLICATION-NAME>`_. If your server character encoding is not ``ascii`` or ``utf8``, then you need to - provide values as bytes, eg. ``'my_application_name'.encode('EUC-JP')``. The default - is ``None`` which means that the server will set the application name. - -replication - Used to run in `streaming replication mode - <https://www.postgresql.org/docs/current/protocol-replication.html>`_. If your server - character encoding is not ``ascii`` or ``utf8``, then you need to provide values as - bytes, eg. ``'database'.encode('EUC-JP')``. - -sock - A socket-like object to use for the connection. For example, ``sock`` could be a plain - ``socket.socket``, or it could represent an SSH tunnel or perhaps an - ``ssl.SSLSocket`` to an SSL proxy. If an |ssl.SSLContext| is provided, then it will be - used to attempt to create an SSL socket from the provided socket. - - -pg8000.dbapi.Date(year, month, day) - -Construct an object holding a date value. - -This property is part of the `DBAPI 2.0 specification -<http://www.python.org/dev/peps/pep-0249/>`_. - -Returns: `datetime.date` - - -pg8000.dbapi.Time(hour, minute, second) -::::::::::::::::::::::::::::::::::::::: - -Construct an object holding a time value. - -Returns: ``datetime.time`` - - -pg8000.dbapi.Timestamp(year, month, day, hour, minute, second) -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -Construct an object holding a timestamp value. - -Returns: ``datetime.datetime`` - - -pg8000.dbapi.DateFromTicks(ticks) -::::::::::::::::::::::::::::::::: - -Construct an object holding a date value from the given ticks value (number of seconds -since the epoch). - -Returns: ``datetime.datetime`` - - -pg8000.dbapi.TimeFromTicks(ticks) -::::::::::::::::::::::::::::::::: - -Construct an object holding a time value from the given ticks value (number of seconds -since the epoch). - -Returns: ``datetime.time`` - - -pg8000.dbapi.TimestampFromTicks(ticks) -:::::::::::::::::::::::::::::::::::::: - -Construct an object holding a timestamp value from the given ticks value (number of -seconds since the epoch). - -Returns: ``datetime.datetime`` - - -pg8000.dbapi.Binary(value) -:::::::::::::::::::::::::: - -Construct an object holding binary data. - -Returns: ``bytes``. - - -Generic Exceptions -`````````````````` - -Pg8000 uses the standard DBAPI 2.0 exception tree as "generic" exceptions. Generally, -more specific exception types are raised; these specific exception types are derived -from the generic exceptions. - -pg8000.dbapi.Warning -:::::::::::::::::::: - -Generic exception raised for important database warnings like data truncations. This -exception is not currently used by pg8000. - - -pg8000.dbapi.Error -:::::::::::::::::: - -Generic exception that is the base exception of all other error exceptions. - - -pg8000.dbapi.InterfaceError -::::::::::::::::::::::::::: - -Generic exception raised for errors that are related to the database interface rather -than the database itself. For example, if the interface attempts to use an SSL -connection but the server refuses, an InterfaceError will be raised. - - -pg8000.dbapi.DatabaseError -:::::::::::::::::::::::::: - -Generic exception raised for errors that are related to the database. This exception is -currently never raised by pg8000. - - -pg8000.dbapi.DataError -:::::::::::::::::::::: - -Generic exception raised for errors that are due to problems with the processed data. -This exception is not currently raised by pg8000. - - -pg8000.dbapi.OperationalError -::::::::::::::::::::::::::::: - -Generic exception raised for errors that are related to the database's operation and not -necessarily under the control of the programmer. This exception is currently never -raised by pg8000. - - -pg8000.dbapi.IntegrityError -::::::::::::::::::::::::::: - -Generic exception raised when the relational integrity of the database is affected. This -exception is not currently raised by pg8000. - - -pg8000.dbapi.InternalError -:::::::::::::::::::::::::: - -Generic exception raised when the database encounters an internal error. This is -currently only raised when unexpected state occurs in the pg8000 interface itself, and -is typically the result of a interface bug. - - -pg8000.dbapi.ProgrammingError -::::::::::::::::::::::::::::: - -Generic exception raised for programming errors. For example, this exception is raised -if more parameter fields are in a query string than there are available parameters. - - -pg8000.dbapi.NotSupportedError -:::::::::::::::::::::::::::::: - -Generic exception raised in case a method or database API was used which is not -supported by the database. - - -Classes -``````` - - -pg8000.dbapi.Connection -::::::::::::::::::::::: - -A connection object is returned by the ``pg8000.connect()`` function. It represents a -single physical connection to a PostgreSQL database. - - -pg8000.dbapi.Connection.autocommit -:::::::::::::::::::::::::::::::::: - -Following the DB-API specification, autocommit is off by default. It can be turned on by -setting this boolean pg8000-specific autocommit property to ``True``. - - -pg8000.dbapi.Connection.close() -::::::::::::::::::::::::::::::: - -Closes the database connection. - - -pg8000.dbapi.Connection.cursor() -:::::::::::::::::::::::::::::::: - -Creates a ``pg8000.dbapi.Cursor`` object bound to this connection. - - -pg8000.dbapi.Connection.rollback() -:::::::::::::::::::::::::::::::::: - -Rolls back the current database transaction. - - -pg8000.dbapi.Connection.tpc_begin(xid) -:::::::::::::::::::::::::::::::::::::: - -Begins a TPC transaction with the given transaction ID xid. This method should be -called outside of a transaction (i.e. nothing may have executed since the last -``commit()`` or ``rollback()``. Furthermore, it is an error to call ``commit()`` or -``rollback()`` within the TPC transaction. A ``ProgrammingError`` is raised, if the -application calls ``commit()`` or ``rollback()`` during an active TPC transaction. - - -pg8000.dbapi.Connection.tpc_commit(xid=None) -:::::::::::::::::::::::::::::::::::::::::::: - -When called with no arguments, ``tpc_commit()`` commits a TPC transaction previously -prepared with ``tpc_prepare()``. If ``tpc_commit()`` is called prior to -``tpc_prepare()``, a single phase commit is performed. A transaction manager may choose -to do this if only a single resource is participating in the global transaction. - -When called with a transaction ID ``xid``, the database commits the given transaction. -If an invalid transaction ID is provided, a ``ProgrammingError`` will be raised. This -form should be called outside of a transaction, and is intended for use in recovery. - -On return, the TPC transaction is ended. - - -pg8000.dbapi.Connection.tpc_prepare() -::::::::::::::::::::::::::::::::::::: - -Performs the first phase of a transaction started with ``.tpc_begin()``. A -``ProgrammingError`` is be raised if this method is called outside of a TPC transaction. - -After calling ``tpc_prepare()``, no statements can be executed until ``tpc_commit()`` or -``tpc_rollback()`` have been called. - - -pg8000.dbapi.Connection.tpc_recover() -::::::::::::::::::::::::::::::::::::: - -Returns a list of pending transaction IDs suitable for use with ``tpc_commit(xid)`` or -``tpc_rollback(xid)``. - - -pg8000.dbapi.Connection.tpc_rollback(xid=None) -:::::::::::::::::::::::::::::::::::::::::::::: - -When called with no arguments, ``tpc_rollback()`` rolls back a TPC transaction. It may -be called before or after ``tpc_prepare()``. - -When called with a transaction ID xid, it rolls back the given transaction. If an -invalid transaction ID is provided, a ``ProgrammingError`` is raised. This form should -be called outside of a transaction, and is intended for use in recovery. - -On return, the TPC transaction is ended. - - -pg8000.dbapi.Connection.xid(format_id, global_transaction_id, branch_qualifier) -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -Create a Transaction IDs (only global_transaction_id is used in pg) format_id and -branch_qualifier are not used in postgres global_transaction_id may be any string -identifier supported by postgres returns a tuple (format_id, global_transaction_id, -branch_qualifier) - - -pg8000.dbapi.Cursor -::::::::::::::::::: - -A cursor object is returned by the ``pg8000.dbapi.Connection.cursor()`` method of a -connection. It has the following attributes and methods: - -pg8000.dbapi.Cursor.arraysize -''''''''''''''''''''''''''''' - -This read/write attribute specifies the number of rows to fetch at a time with -``pg8000.dbapi.Cursor.fetchmany()``. It defaults to 1. - - -pg8000.dbapi.Cursor.connection -'''''''''''''''''''''''''''''' - -This read-only attribute contains a reference to the connection object (an instance of -``pg8000.dbapi.Connection``) on which the cursor was created. - - -pg8000.dbapi.Cursor.rowcount -'''''''''''''''''''''''''''' - -This read-only attribute contains the number of rows that the last ``execute()`` or -``executemany()`` method produced (for query statements like ``SELECT``) or affected -(for modification statements like ``UPDATE``. - -The value is -1 if: - -- No ``execute()`` or ``executemany()`` method has been performed yet on the cursor. - -- There was no rowcount associated with the last ``execute()``. - -- At least one of the statements executed as part of an ``executemany()`` had no row - count associated with it. - - -pg8000.dbapi.Cursor.description -''''''''''''''''''''''''''''''' - -This read-only attribute is a sequence of 7-item sequences. Each value contains -information describing one result column. The 7 items returned for each column are -(name, type_code, display_size, internal_size, precision, scale, null_ok). Only the -first two values are provided by the current implementation. - - -pg8000.dbapi.Cursor.close() -''''''''''''''''''''''''''' - -Closes the cursor. - - -pg8000.dbapi.Cursor.execute(operation, args=None, stream=None) -'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' - -Executes a database operation. Parameters may be provided as a sequence, or as a -mapping, depending upon the value of ``pg8000.dbapi.paramstyle``. Returns the cursor, -which may be iterated over. - -operation - The SQL statement to execute. - -args - If ``pg8000.dbapi.paramstyle`` is ``qmark``, ``numeric``, or ``format``, this - argument should be an array of parameters to bind into the statement. If - ``pg8000.dbapi.paramstyle`` is ``named``, the argument should be a ``dict`` mapping of - parameters. If ``pg8000.dbapi.paramstyle`` is ``pyformat``, the argument value may be - either an array or a mapping. - -stream - This is a pg8000 extension for use with the PostgreSQL `COPY - <http://www.postgresql.org/docs/current/static/sql-copy.html>`__ command. For a - ``COPY FROM`` the parameter must be a readable file-like object, and for ``COPY TO`` - it must be writable. - - -pg8000.dbapi.Cursor.executemany(operation, param_sets) -'''''''''''''''''''''''''''''''''''''''''''''''''''''' - -Prepare a database operation, and then execute it against all parameter sequences or -mappings provided. - -operation - The SQL statement to execute. - -parameter_sets - A sequence of parameters to execute the statement with. The values in the sequence - should be sequences or mappings of parameters, the same as the args argument of the - ``pg8000.dbapi.Cursor.execute()`` method. - - -pg8000.dbapi.Cursor.callproc(procname, parameters=None) -''''''''''''''''''''''''''''''''''''''''''''''''''''''' - -Call a stored database procedure with the given name and optional parameters. - - -procname - The name of the procedure to call. - -parameters - A list of parameters. - - -pg8000.dbapi.Cursor.fetchall() -'''''''''''''''''''''''''''''' - -Fetches all remaining rows of a query result. - -Returns: A sequence, each entry of which is a sequence of field values making up a row. - - -pg8000.dbapi.Cursor.fetchmany(size=None) -'''''''''''''''''''''''''''''''''''''''' - -Fetches the next set of rows of a query result. - -size - The number of rows to fetch when called. If not provided, the - ``pg8000.dbapi.Cursor.arraysize`` attribute value is used instead. - -Returns: A sequence, each entry of which is a sequence of field values making up a row. -If no more rows are available, an empty sequence will be returned. - - -pg8000.dbapi.Cursor.fetchone() -'''''''''''''''''''''''''''''' - -Fetch the next row of a query result set. - -Returns: A row as a sequence of field values, or ``None`` if no more rows are available. - - -pg8000.dbapi.Cursor.setinputsizes(\*sizes) -'''''''''''''''''''''''''''''''''''''''''' - -Used to set the parameter types of the next query. This is useful if it's difficult for -pg8000 to work out the types from the parameters themselves (eg. for parameters of type -None). - -sizes - Positional parameters that are either the Python type of the parameter to be sent, or - the PostgreSQL oid. Common oids are available as constants such as ``pg8000.STRING``, - ``pg8000.INTEGER``, ``pg8000.TIME`` etc. - - -pg8000.dbapi.Cursor.setoutputsize(size, column=None) -'''''''''''''''''''''''''''''''''''''''''''''''''''' - -Not implemented by pg8000. - - -pg8000.dbapi.Interval -''''''''''''''''''''' - -An Interval represents a measurement of time. In PostgreSQL, an interval is defined in -the measure of months, days, and microseconds; as such, the pg8000 interval type -represents the same information. - -Note that values of the ``pg8000.dbapi.Interval.microseconds``, -``pg8000.dbapi.Interval.days``, and ``pg8000.dbapi.Interval.months`` properties are -independently measured and cannot be converted to each other. A month may be 28, 29, 30, -or 31 days, and a day may occasionally be lengthened slightly by a leap second. +`DB-API 2 Docs <docs/dbapi2_docs.rst>`_ Design Decisions @@ -2230,243 +1404,4 @@ Run ``tox`` to make sure all tests pass, then update the release notes, then do: Release Notes ------------- -Version 1.30.4, 2024-01-03 -`````````````````````````` - -- Add support for more range and multirange types. - -- Make the ``Connection.parameter_statuses`` property a ``dict`` rather than a ``dequeue``. - - -Version 1.30.3, 2023-10-31 -`````````````````````````` - -- Fix problem with PG date overflowing Python types. Now we return the ``str`` we got from the - server if we can't parse it. - - -Version 1.30.2, 2023-09-17 -`````````````````````````` - -- Bug fix where dollar-quoted string constants weren't supported. - - -Version 1.30.1, 2023-07-29 -`````````````````````````` - -- There was a problem uploading the previous version (1.30.0) to PyPI because the - markup of the README.rst was invalid. There's now a step in the automated tests to - check for this. - - -Version 1.30.0, 2023-07-27 -`````````````````````````` - -- Remove support for Python 3.7 - -- Add a ``sock`` keyword parameter for creating a connection from a pre-configured - socket. - - -Version 1.29.8, 2023-06-16 -`````````````````````````` - -- Ranges don't work with legacy API. - - -Version 1.29.7, 2023-06-16 -`````````````````````````` - -- Add support for PostgreSQL ``range`` and ``multirange`` types. Previously pg8000 - would just return them as strings, but now they're returned as ``Range`` and lists of - ``Range``. - -- The PostgreSQL ``record`` type is now returned as a ``tuple`` of strings, whereas - before it was returned as one string. - - -Version 1.29.6, 2023-05-29 -`````````````````````````` - -- Fixed two bugs with composite types. Nulls should be represented by an empty string, - and in an array of composite types, the elements should be surrounded by double - quotes. - - -Version 1.29.5, 2023-05-09 -`````````````````````````` - -- Fixed bug where pg8000 didn't handle the case when the number of bytes received from - a socket was fewer than requested. This was being interpreted as a network error, but - in fact we just needed to wait until more bytes were available. - -- When using the ``PGInterval`` type, if a response from the server contained the period - ``millennium``, it wasn't recognised. This was caused by a spelling mistake where we - had ``millenium`` rather than ``millennium``. - -- Added support for sending PostgreSQL composite types. If a value is sent as a - ``tuple``, pg8000 will send it to the server as a ``(`` delimited composite string. - - -Version 1.29.4, 2022-12-14 -`````````````````````````` - -- Fixed bug in ``pg8000.dbapi`` in the ``setinputsizes()`` method where if a ``size`` - was a recognized Python type, the method failed. - - -Version 1.29.3, 2022-10-26 -`````````````````````````` - -- Upgrade the SCRAM library to version 1.4.3. This adds support for the case where the - client supports channel binding but the server doesn't. - - -Version 1.29.2, 2022-10-09 -`````````````````````````` - -- Fixed a bug where in a literal array, items such as ``\n`` and ``\r`` weren't - escaped properly before being sent to the server. - -- Fixed a bug where if the PostgreSQL server has a half-hour time zone set, values of - type ``timestamp with time zone`` failed. This has been fixed by using the ``parse`` - function of the ``dateutil`` package if the ``datetime`` parser fails. - - -Version 1.29.1, 2022-05-23 -`````````````````````````` - -- In trying to determine if there's been a failed commit, check for ``ROLLBACK TO - SAVEPOINT``. - - -Version 1.29.0, 2022-05-21 -`````````````````````````` - -- Implement a workaround for the `silent failed commit - <https://github.com/tlocke/pg8000/issues/36>`_ bug. - -- Previously if an empty string was sent as the query an exception would be raised, but - that isn't done now. - - -Version 1.28.3, 2022-05-18 -`````````````````````````` - -- Put back ``__version__`` attributes that were inadvertently removed. - - -Version 1.28.2, 2022-05-17 -`````````````````````````` - -- Use a build system that's compliant with PEP517. - - -Version 1.28.1, 2022-05-17 -`````````````````````````` - -- If when doing a ``COPY FROM`` the ``stream`` parameter is an iterator of ``str``, - pg8000 used to silently append a newline to the end. That no longer happens. - - -Version 1.28.0, 2022-05-17 -`````````````````````````` - -- When using the ``COPY FROM`` SQL statement, allow the ``stream`` parameter to be an - iterable. - - -Version 1.27.1, 2022-05-16 -`````````````````````````` - -- The ``seconds`` attribute of ``PGInterval`` is now always a ``float``, to cope with - fractional seconds. - -- Updated the ``interval`` parsers for ``iso_8601`` and ``sql_standard`` to take - account of fractional seconds. - - -Version 1.27.0, 2022-05-16 -`````````````````````````` - -- It used to be that by default, if pg8000 received an ``interval`` type from the server - and it was too big to fit into a ``datetime.timedelta`` then an exception would be - raised. Now if an interval is too big for ``datetime.timedelta`` a ``PGInterval`` is - returned. - -* pg8000 now supports all the output formats for an ``interval`` (``postgres``, - ``postgres_verbose``, ``iso_8601`` and ``sql_standard``). - - -Version 1.26.1, 2022-04-23 -`````````````````````````` - -- Make sure all tests are run by the GitHub Actions tests on commit. -- Remove support for Python 3.6 -- Remove support for PostgreSQL 9.6 - - -Version 1.26.0, 2022-04-18 -`````````````````````````` - -- When connecting, raise an ``InterfaceError('network error')`` rather than let the - underlying ``struct.error`` float up. - -- Make licence text the same as that used by the OSI. Previously the licence wording - differed slightly from the BSD 3 Clause licence at - https://opensource.org/licenses/BSD-3-Clause. This meant that automated tools didn't - pick it up as being Open Source. The changes are believed to not alter the meaning of the license at all. - - -Version 1.25.0, 2022-04-17 -`````````````````````````` - -- Fix more cases where a ``ResourceWarning`` would be raise because of a socket that had - been left open. - -- We now have a single ``InterfaceError`` with the message 'network error' for all - network errors, with the underlying exception held in the ``cause`` of the exception. - - -Version 1.24.2, 2022-04-15 -`````````````````````````` - -- To prevent a ``ResourceWarning`` close socket if a connection can't be created. - - -Version 1.24.1, 2022-03-02 -`````````````````````````` - -- Return pg +/-infinity dates as ``str``. Previously +/-infinity pg values would cause - an error when returned, but now we return +/-infinity as strings. - - -Version 1.24.0, 2022-02-06 -`````````````````````````` - -- Add SQL escape functions identifier() and literal() to the native API. For use when a - query can't be parameterised and the SQL string has to be created using untrusted - values. - - -Version 1.23.0, 2021-11-13 -`````````````````````````` - -- If a query has no parameters, then the query will no longer be parsed. Although there - are performance benefits for doing this, the main reason is to avoid query rewriting, - which can introduce errors. - - -Version 1.22.1, 2021-11-10 -`````````````````````````` - -- Fix bug in PGInterval type where ``str()`` failed for a millennia value. - - -Version 1.22.0, 2021-10-13 -`````````````````````````` - -- Rather than specifying the oids in the ``Parse`` step of the Postgres protocol, pg8000 - now omits them, and so Postgres will use the oids it determines from the query. This - makes the pg8000 code simpler and also it should also make the nuances of type - matching more straightforward. +`Release Notes <docs/release_notes.rst>`_ diff --git a/contrib/python/pg8000/pg8000/core.py b/contrib/python/pg8000/pg8000/core.py index 3e55957755a..8375b952137 100644 --- a/contrib/python/pg8000/pg8000/core.py +++ b/contrib/python/pg8000/pg8000/core.py @@ -28,7 +28,7 @@ def pack_funcs(fmt): i_pack, i_unpack = pack_funcs("i") -h_pack, h_unpack = pack_funcs("h") +H_pack, H_unpack = pack_funcs("H") ii_pack, ii_unpack = pack_funcs("ii") ihihih_pack, ihihih_unpack = pack_funcs("ihihih") ci_pack, ci_unpack = pack_funcs("ci") @@ -623,7 +623,7 @@ class CoreConnection: self._backend_key_data = data def handle_ROW_DESCRIPTION(self, data, context): - count = h_unpack(data)[0] + count = H_unpack(data)[0] idx = 2 columns = [] input_funcs = [] @@ -656,7 +656,7 @@ class CoreConnection: def send_PARSE(self, statement_name_bin, statement, oids=()): val = bytearray(statement_name_bin) val.extend(statement.encode(self._client_encoding) + NULL_BYTE) - val.extend(h_pack(len(oids))) + val.extend(H_pack(len(oids))) for oid in oids: val.extend(i_pack(0 if oid == -1 else oid)) @@ -762,7 +762,7 @@ class CoreConnection: """https://www.postgresql.org/docs/current/protocol-message-formats.html""" retval = bytearray( - NULL_BYTE + statement_name_bin + h_pack(0) + h_pack(len(params)) + NULL_BYTE + statement_name_bin + H_pack(0) + H_pack(len(params)) ) for value in params: @@ -772,7 +772,7 @@ class CoreConnection: val = value.encode(self._client_encoding) retval.extend(i_pack(len(val))) retval.extend(val) - retval.extend(h_pack(0)) + retval.extend(H_pack(0)) self._send_message(BIND, retval) _write(self._sock, FLUSH_MSG) diff --git a/contrib/python/pg8000/ya.make b/contrib/python/pg8000/ya.make index 50676227044..f04dfe2320e 100644 --- a/contrib/python/pg8000/ya.make +++ b/contrib/python/pg8000/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(1.30.4) +VERSION(1.30.5) LICENSE(BSD-3-Clause) |
