diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2020-06-29 19:50:29 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2020-06-29 19:50:29 +0000 |
| commit | b99cfc7cdc36a7452eb15f4b20989d1679bad11a (patch) | |
| tree | 41d8993b47f4a6cc03c028ea7331790c92f6dce1 /lib/sqlalchemy | |
| parent | 30f8843e97a49121323a4f75d9341f77c9935312 (diff) | |
| parent | 2c1e517d0368934b70a571163ff56638673cc96b (diff) | |
| download | sqlalchemy-b99cfc7cdc36a7452eb15f4b20989d1679bad11a.tar.gz | |
Merge "Rename Table.tometadata to to_metadata"
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/sql/events.py | 18 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/schema.py | 39 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/sqltypes.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/util/langhelpers.py | 31 |
4 files changed, 72 insertions, 18 deletions
diff --git a/lib/sqlalchemy/sql/events.py b/lib/sqlalchemy/sql/events.py index 51556d929..d7836a5a0 100644 --- a/lib/sqlalchemy/sql/events.py +++ b/lib/sqlalchemy/sql/events.py @@ -60,7 +60,7 @@ class DDLEvents(event.Events): For all :class:`.DDLEvent` events, the ``propagate=True`` keyword argument will ensure that a given event handler is propagated to copies of the - object, which are made when using the :meth:`_schema.Table.tometadata` + object, which are made when using the :meth:`_schema.Table.to_metadata` method:: from sqlalchemy import DDL @@ -71,7 +71,7 @@ class DDLEvents(event.Events): propagate=True ) - new_table = some_table.tometadata(new_metadata) + new_table = some_table.to_metadata(new_metadata) The above :class:`.DDL` object will also be associated with the :class:`_schema.Table` object represented by ``new_table``. @@ -109,7 +109,7 @@ class DDLEvents(event.Events): modifier for this event; when True, the listener function will be established for any copies made of the target object, i.e. those copies that are generated when - :meth:`_schema.Table.tometadata` is used. + :meth:`_schema.Table.to_metadata` is used. """ @@ -131,7 +131,7 @@ class DDLEvents(event.Events): modifier for this event; when True, the listener function will be established for any copies made of the target object, i.e. those copies that are generated when - :meth:`_schema.Table.tometadata` is used. + :meth:`_schema.Table.to_metadata` is used. """ @@ -153,7 +153,7 @@ class DDLEvents(event.Events): modifier for this event; when True, the listener function will be established for any copies made of the target object, i.e. those copies that are generated when - :meth:`_schema.Table.tometadata` is used. + :meth:`_schema.Table.to_metadata` is used. """ @@ -175,7 +175,7 @@ class DDLEvents(event.Events): modifier for this event; when True, the listener function will be established for any copies made of the target object, i.e. those copies that are generated when - :meth:`_schema.Table.tometadata` is used. + :meth:`_schema.Table.to_metadata` is used. """ @@ -190,7 +190,7 @@ class DDLEvents(event.Events): modifier for this event; when True, the listener function will be established for any copies made of the target object, i.e. those copies that are generated when - :meth:`_schema.Table.tometadata` is used. + :meth:`_schema.Table.to_metadata` is used. """ @@ -205,7 +205,7 @@ class DDLEvents(event.Events): modifier for this event; when True, the listener function will be established for any copies made of the target object, i.e. those copies that are generated when - :meth:`_schema.Table.tometadata` is used. + :meth:`_schema.Table.to_metadata` is used. """ @@ -284,6 +284,6 @@ class DDLEvents(event.Events): modifier for this event; when True, the listener function will be established for any copies made of the target object, i.e. those copies that are generated when - :meth:`_schema.Table.tometadata` is used. + :meth:`_schema.Table.to_metadata` is used. """ diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index a3f67fc68..0b04ff0da 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -867,6 +867,11 @@ class Table(DialectKWArgs, SchemaItem, TableClause): bind = _bind_or_error(self) bind._run_ddl_visitor(ddl.SchemaDropper, self, checkfirst=checkfirst) + @util.deprecated( + "1.4", + ":meth:`_schema.Table.tometadata` is renamed to " + ":meth:`_schema.Table.to_metadata`", + ) def tometadata( self, metadata, @@ -878,6 +883,26 @@ class Table(DialectKWArgs, SchemaItem, TableClause): associated with a different :class:`_schema.MetaData`. + See :meth:`_schema.Table.to_metadata` for a full description. + + """ + return self.to_metadata( + metadata, + schema=schema, + referred_schema_fn=referred_schema_fn, + name=name, + ) + + def to_metadata( + self, + metadata, + schema=RETAIN_SCHEMA, + referred_schema_fn=None, + name=None, + ): + """Return a copy of this :class:`_schema.Table` associated with a + different :class:`_schema.MetaData`. + E.g.:: m1 = MetaData() @@ -885,7 +910,11 @@ class Table(DialectKWArgs, SchemaItem, TableClause): user = Table('user', m1, Column('id', Integer, primary_key=True)) m2 = MetaData() - user_copy = user.tometadata(m2) + user_copy = user.to_metadata(m2) + + .. versionchanged:: 1.4 The :meth:`_schema.Table.to_metadata` function + was renamed from :meth:`_schema.Table.tometadata`. + :param metadata: Target :class:`_schema.MetaData` object, into which the @@ -905,12 +934,12 @@ class Table(DialectKWArgs, SchemaItem, TableClause): m2 = MetaData(schema='newschema') # user_copy_one will have "newschema" as the schema name - user_copy_one = user.tometadata(m2, schema=None) + user_copy_one = user.to_metadata(m2, schema=None) m3 = MetaData() # schema defaults to None # user_copy_two will have None as the schema name - user_copy_two = user.tometadata(m3, schema=None) + user_copy_two = user.to_metadata(m3, schema=None) :param referred_schema_fn: optional callable which can be supplied in order to provide for the schema name that should be assigned @@ -929,7 +958,7 @@ class Table(DialectKWArgs, SchemaItem, TableClause): else: return to_schema - new_table = table.tometadata(m2, schema="alt_schema", + new_table = table.to_metadata(m2, schema="alt_schema", referred_schema_fn=referred_schema_fn) .. versionadded:: 0.9.2 @@ -1554,7 +1583,7 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause): def copy(self, **kw): """Create a copy of this ``Column``, uninitialized. - This is used in :meth:`_schema.Table.tometadata`. + This is used in :meth:`_schema.Table.to_metadata`. """ diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py index 5d7f80b1b..186f885d8 100644 --- a/lib/sqlalchemy/sql/sqltypes.py +++ b/lib/sqlalchemy/sql/sqltypes.py @@ -1391,7 +1391,7 @@ class Enum(Emulated, String, SchemaType): will be copied to the "schema" attribute of this :class:`.Enum`, replacing whatever value was passed for the ``schema`` attribute. This also takes effect when using the - :meth:`_schema.Table.tometadata` operation. + :meth:`_schema.Table.to_metadata` operation. :param validate_strings: when True, string values that are being passed to the database in a SQL statement will be checked diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py index 52debc517..57d3be83b 100644 --- a/lib/sqlalchemy/util/langhelpers.py +++ b/lib/sqlalchemy/util/langhelpers.py @@ -144,6 +144,10 @@ def decorator(target): raise Exception("not a decoratable function") spec = compat.inspect_getfullargspec(fn) + env = {} + + spec = _update_argspec_defaults_into_env(spec, env) + names = tuple(spec[0]) + spec[1:3] + (fn.__name__,) targ_name, fn_name = _unique_symbols(names, "target", "fn") @@ -157,9 +161,9 @@ def %(name)s(%(args)s): """ % metadata ) - decorated = _exec_code_in_env( - code, {targ_name: target, fn_name: fn}, fn.__name__ - ) + env.update({targ_name: target, fn_name: fn}) + + decorated = _exec_code_in_env(code, env, fn.__name__) decorated.__defaults__ = getattr(fn, "im_func", fn).__defaults__ decorated.__wrapped__ = fn return update_wrapper(decorated, fn) @@ -167,6 +171,27 @@ def %(name)s(%(args)s): return update_wrapper(decorate, target) +def _update_argspec_defaults_into_env(spec, env): + """given a FullArgSpec, convert defaults to be symbol names in an env.""" + + if spec.defaults: + new_defaults = [] + i = 0 + for arg in spec.defaults: + if type(arg).__module__ not in ("builtins", "__builtin__"): + name = "x%d" % i + env[name] = arg + new_defaults.append(name) + i += 1 + else: + new_defaults.append(arg) + elem = list(spec) + elem[3] = tuple(new_defaults) + return compat.FullArgSpec(*elem) + else: + return spec + + def _exec_code_in_env(code, env, fn_name): exec(code, env) return env[fn_name] |
