diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-02-11 14:37:59 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-02-11 14:37:59 -0500 |
commit | 8cdd16e401c022a0163016f686f2d9c772fd8fdc (patch) | |
tree | 269f26bcde680e9fe6398b99364e8b7111161dba /alembic/util.py | |
parent | cc6a13c4f4cf9e635aedfe3c377e5b6789f3e8f8 (diff) | |
download | alembic-8cdd16e401c022a0163016f686f2d9c772fd8fdc.tar.gz |
- move to 0.5.0 as we are making some slight naming changes
- add a generalized approach for renamed kw args, accepting the old
ones using a specialized decorator
- change "tablename" to "table_name" for create_index, drop_index,
drop_constraint
- change "name" to "new_column_name" for alter_column
#104
Diffstat (limited to 'alembic/util.py')
-rw-r--r-- | alembic/util.py | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/alembic/util.py b/alembic/util.py index bf2c89d..6d7caf0 100644 --- a/alembic/util.py +++ b/alembic/util.py @@ -5,14 +5,12 @@ import sys import os import textwrap from sqlalchemy.engine import url -from sqlalchemy import util as sqla_util import imp import warnings import re import inspect -import time -import random import uuid +from sqlalchemy.util import format_argspec_plus, update_wrapper class CommandError(Exception): pass @@ -251,3 +249,44 @@ class immutabledict(dict): def __repr__(self): return "immutabledict(%s)" % dict.__repr__(self) + + + + + +def _with_legacy_names(translations): + def decorate(fn): + spec = inspect.getargspec(fn) + metadata = dict(target='target', fn='fn') + metadata.update(format_argspec_plus(spec, grouped=False)) + + has_keywords = bool(spec[2]) + + if not has_keywords: + metadata['args'] += ", **kw" + metadata['apply_kw'] += ", **kw" + + def go(*arg, **kw): + names = set(kw).difference(spec[0]) + for oldname, newname in translations: + if oldname in kw: + kw[newname] = kw.pop(oldname) + names.discard(oldname) + + warnings.warn( + "Argument '%s' is now named '%s' for function '%s'" % + (oldname, newname, fn.__name__)) + if not has_keywords and names: + raise TypeError("Unknown arguments: %s" % ", ".join(names)) + return fn(*arg, **kw) + + code = 'lambda %(args)s: %(target)s(%(apply_kw)s)' % ( + metadata) + decorated = eval(code, {"target": go}) + decorated.func_defaults = getattr(fn, 'im_func', fn).func_defaults + return update_wrapper(decorated, fn) + + return decorate + + + |