summaryrefslogtreecommitdiff
path: root/alembic/util.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-02-11 14:37:59 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2013-02-11 14:37:59 -0500
commit8cdd16e401c022a0163016f686f2d9c772fd8fdc (patch)
tree269f26bcde680e9fe6398b99364e8b7111161dba /alembic/util.py
parentcc6a13c4f4cf9e635aedfe3c377e5b6789f3e8f8 (diff)
downloadalembic-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.py45
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
+
+
+