raise NotImplementedError("Python 2.6 or greater is required.")
py3k = sys.version_info >= (3, 0)
+py33 = sys.version_info >= (3, 3)
if py3k:
import builtins as compat_builtins
text_type = unicode
callable = callable
-
-try:
+if py3k:
+ from configparser import ConfigParser as SafeConfigParser
import configparser
-except ImportError:
+else:
+ from ConfigParser import SafeConfigParser
import ConfigParser as configparser
+if py33:
+ from importlib import machinery
+ def load_module(module_id, path):
+ return machinery.SourceFileLoader(module_id, path).load_module()
+else:
+ import imp
+ def load_module(module_id, path):
+ fp = open(path, 'rb')
+ try:
+ return imp.load_source(module_id, path, fp)
+ finally:
+ fp.close()
+
+
try:
exec_ = getattr(compat_builtins, 'exec')
except AttributeError:
from argparse import ArgumentParser
-from .compat import configparser
+from .compat import SafeConfigParser
import inspect
import os
import sys
here = os.path.abspath(os.path.dirname(self.config_file_name))
else:
here = ""
- file_config = configparser.SafeConfigParser({'here': here})
+ file_config = SafeConfigParser({'here': here})
if self.config_file_name:
file_config.read([self.config_file_name])
else:
import sys
import os
import textwrap
-import imp
import warnings
import re
import inspect
from sqlalchemy.engine import url
from sqlalchemy import __version__
-from .compat import callable, exec_
+from .compat import callable, exec_, load_module
class CommandError(Exception):
pass
module_id = re.sub(r'\W', "_", filename)
path = os.path.join(dir_, filename)
- with open(path, 'rb') as f:
- module = imp.load_source(module_id, path, f)
+ module = load_module(module_id, path)
del sys.modules[module_id]
return module
return "immutabledict(%s)" % dict.__repr__(self)
-
-
-
def _with_legacy_names(translations):
def decorate(fn):
$ alembic history -r1975ea:
-.. versionadded:: 0.6.1 ``alembic revision`` now accepts the ``-r`` argument to
+.. versionadded:: 0.6.0 ``alembic revision`` now accepts the ``-r`` argument to
specify specific ranges based on version numbers, symbols, or relative deltas.
-
-
Downgrading
===========
command.revision(self.cfg, message="some rev")
script = ScriptDirectory.from_config(self.cfg)
rev = script.get_revision('head')
- text = open(rev.path).read()
+ with open(rev.path) as f:
+ text = f.read()
assert "somearg: somevalue" in text