From 4c6f15013559c469b9f98dc1ed94ec6549cf8cd9 Mon Sep 17 00:00:00 2001
From: Ralph Bean <rbean@redhat.com>
Date: Sat, 19 Sep 2015 21:36:02 -0400
Subject: [PATCH] remove ming
---
TurboGears2.egg-info/SOURCES.txt | 1 -
TurboGears2.egg-info/requires.txt | 4 +-
TurboGears2.egg-info/top_level.txt | 2 +-
setup.py | 6 --
tests/test_configuration.py | 212 -------------------------------------
tg/appwrappers/mingflush.py | 59 -----------
tg/configuration/app_config.py | 63 +----------
7 files changed, 6 insertions(+), 341 deletions(-)
delete mode 100644 tg/appwrappers/mingflush.py
diff --git a/TurboGears2.egg-info/SOURCES.txt b/TurboGears2.egg-info/SOURCES.txt
index 6b46abe..00b1979 100644
--- a/TurboGears2.egg-info/SOURCES.txt
+++ b/TurboGears2.egg-info/SOURCES.txt
@@ -87,7 +87,6 @@ tg/appwrappers/caching.py
tg/appwrappers/errorpage.py
tg/appwrappers/i18n.py
tg/appwrappers/identity.py
-tg/appwrappers/mingflush.py
tg/appwrappers/session.py
tg/appwrappers/transaction_manager.py
tg/configuration/__init__.py
diff --git a/TurboGears2.egg-info/requires.txt b/TurboGears2.egg-info/requires.txt
index 6bd1732..83ead20 100644
--- a/TurboGears2.egg-info/requires.txt
+++ b/TurboGears2.egg-info/requires.txt
@@ -22,7 +22,5 @@ Beaker
Kajiki >= 0.4.4
routes
jinja2
-ming > 0.5.0
TurboKid >= 1.0.4
-tgming
-tw.forms
\ No newline at end of file
+tw.forms
diff --git a/TurboGears2.egg-info/top_level.txt b/TurboGears2.egg-info/top_level.txt
index 38e51fc..d89021e 100644
--- a/TurboGears2.egg-info/top_level.txt
+++ b/TurboGears2.egg-info/top_level.txt
@@ -1,2 +1,2 @@
-tg
tests
+tg
diff --git a/setup.py b/setup.py
index 3ee621f..4e9e8f2 100644
--- a/setup.py
+++ b/setup.py
@@ -38,14 +38,8 @@ else:
test_requirements.append('jinja2')
-if py_version != (3, 2):
- # Ming is not compatible with Python3.2
- test_requirements.append('ming > 0.5.0')
-
-
if py_version[0] == 2:
test_requirements.extend(['TurboKid >= 1.0.4',
- 'tgming',
'tw.forms'])
install_requires=[
diff --git a/tests/test_configuration.py b/tests/test_configuration.py
index 4ee5248..5b2f16f 100644
--- a/tests/test_configuration.py
+++ b/tests/test_configuration.py
@@ -8,7 +8,6 @@ from datetime import datetime
from tg.configuration.hooks import _TGGlobalHooksNamespace
from tg.appwrappers.errorpage import ErrorPageApplicationWrapper
-from tg.appwrappers.mingflush import MingApplicationWrapper
from tg.appwrappers.transaction_manager import TransactionApplicationWrapper
from tg.util import Bunch
@@ -140,13 +139,6 @@ class TestPylonsConfigWrapper:
assert 'tg.app_globals' in k
-def test_coerce_config():
- opts = {'ming.connection.max_pool_size': '5'}
- conf = coerce_config(opts, 'ming.connection.', {'max_pool_size':asint})
- assert conf['max_pool_size'] == 5
- assert opts['ming.connection.max_pool_size'] == '5'
-
-
def test_coerce_options():
opts = {'connection': 'false'}
conf = coerce_options(opts, {'connection': asbool})
@@ -613,184 +605,6 @@ class TestAppConfig:
self.config.use_sqlalchemy = False
config.pop('sqlalchemy.master.url')
- def test_setup_ming_persistance(self):
- class RootController(TGController):
- @expose()
- def test(self):
- return 'HI!'
-
- package = PackageWithModel()
- conf = AppConfig(minimal=True, root_controller=RootController())
- conf.package = package
- conf.model = package.model
- conf.use_ming = True
- conf['ming.url'] = 'mim://'
- conf['ming.db'] = 'inmemdb'
-
- app = conf.make_wsgi_app()
-
- tgapp = app.application
- while not isinstance(tgapp, TGApp):
- tgapp = tgapp.app
-
- ming_handler = tgapp.wrapped_dispatch
- while ming_handler != tgapp.dispatch:
- if isinstance(ming_handler, MingApplicationWrapper):
- break
- ming_handler = ming_handler.next_handler
- assert isinstance(ming_handler, MingApplicationWrapper), ming_handler
-
- class FakeMingSession(object):
- actions = []
-
- def flush_all(self):
- self.actions.append('FLUSH')
-
- def close_all(self):
- self.actions.append('CLOSE')
-
- ming_handler.ThreadLocalODMSession = FakeMingSession()
-
- app = TestApp(app)
- resp = app.get('/test')
- assert 'HI' in resp
-
- assert ming_handler.ThreadLocalODMSession.actions == ['FLUSH']
-
- def test_setup_ming_persistance_closes_on_failure(self):
- class RootController(TGController):
- @expose()
- def test(self):
- raise Exception('CRASH!')
-
- package = PackageWithModel()
- conf = AppConfig(minimal=True, root_controller=RootController())
- conf.package = package
- conf.model = package.model
- conf.use_ming = True
- conf['ming.url'] = 'mim://'
- conf['ming.db'] = 'inmemdb'
-
- app = conf.make_wsgi_app()
-
- tgapp = app.application
- while not isinstance(tgapp, TGApp):
- tgapp = tgapp.app
-
- ming_handler = tgapp.wrapped_dispatch
- while ming_handler != tgapp.dispatch:
- if isinstance(ming_handler, MingApplicationWrapper):
- break
- ming_handler = ming_handler.next_handler
- assert isinstance(ming_handler, MingApplicationWrapper), ming_handler
-
- class FakeMingSession(object):
- actions = []
-
- def flush_all(self):
- self.actions.append('FLUSH')
-
- def close_all(self):
- self.actions.append('CLOSE')
-
- ming_handler.ThreadLocalODMSession = FakeMingSession()
-
- app = TestApp(app)
-
- try:
- app.get('/test', status=500)
- except:
- assert ming_handler.ThreadLocalODMSession.actions == ['CLOSE']
- else:
- assert False, 'Should have raised exception'
-
- def test_setup_ming_persistance_with_url_alone(self):
- package = PackageWithModel()
- conf = AppConfig(minimal=True, root_controller=None)
- conf.package = package
- conf.model = package.model
- conf.use_ming = True
- conf['ming.url'] = 'mim://inmemdb'
-
- app = conf.make_wsgi_app()
- assert app is not None
-
- dstore = config['tg.app_globals'].ming_datastore
- dstore_name = dstore.name
- # Looks like ming has empty dstore.name when using MIM.
- assert dstore_name == '', dstore
-
- def test_setup_ming_persistance_with_url_and_db(self):
- package = PackageWithModel()
- conf = AppConfig(minimal=True, root_controller=None)
- conf.package = package
- conf.model = package.model
- conf.use_ming = True
- conf['ming.url'] = 'mim://inmemdb'
- conf['ming.db'] = 'realinmemdb'
-
- app = conf.make_wsgi_app()
- assert app is not None
-
- dstore = config['tg.app_globals'].ming_datastore
- dstore_name = dstore.name
- assert dstore_name == 'realinmemdb', dstore
-
- def test_setup_ming_persistance_advanced_options(self):
- package = PackageWithModel()
- conf = AppConfig(minimal=True, root_controller=None)
- conf.package = package
- conf.model = package.model
- conf.use_ming = True
- conf['ming.url'] = 'mim://inmemdb'
- conf['ming.connection.read_preference'] = 'PRIMARY'
-
- app = conf.make_wsgi_app()
- assert app is not None
-
- def test_setup_ming_persistance_replica_set(self):
- if sys.version_info[:2] == (2, 6):
- raise SkipTest()
-
- package = PackageWithModel()
- conf = AppConfig(minimal=True, root_controller=None)
- conf.package = package
- conf.model = package.model
- conf.use_ming = True
- conf['ming.url'] = 'mongodb://localhost:27017,localhost:27018/testdb?replicaSet=test'
- conf['ming.db'] = ''
-
- app = conf.make_wsgi_app()
- assert app is not None
-
- expected_url = 'mongodb://localhost:27017,localhost:27018/?replicaSet=test'
- expected_db = 'testdb'
-
- dstore = config['tg.app_globals'].ming_datastore
- assert expected_db == dstore.name, dstore.name
- assert expected_url == dstore.bind._conn_args[0], dstore.bind._conn_args
-
- def test_setup_mig_persistance_replica_set_option(self):
- package = PackageWithModel()
- conf = AppConfig(minimal=True, root_controller=None)
- conf.package = package
- conf.model = package.model
- conf.use_ming = True
- conf['ming.url'] = 'mongodb://localhost:27017,localhost:27018/testdb'
- conf['ming.connection.replicaSet'] = 'test'
- conf['ming.db'] = ''
-
- app = conf.make_wsgi_app()
- assert app is not None
-
- expected_url = 'mongodb://localhost:27017,localhost:27018/'
- expected_db = 'testdb'
-
- dstore = config['tg.app_globals'].ming_datastore
- assert expected_db == dstore.name, dstore.name
- assert expected_url == dstore.bind._conn_args[0], dstore.bind._conn_args
- assert 'test' == dstore.bind._conn_kwargs.get('replicaSet'), dstore.bind._conn_kwargs
-
def test_add_auth_middleware(self):
class Dummy:pass
@@ -834,14 +648,6 @@ class TestAppConfig:
self.config.auth_backend = None
- def test_setup_ming_auth(self):
- self.config.auth_backend = 'ming'
-
- self.config.setup_auth()
- assert 'sa_auth' in config
-
- self.config.auth_backend = None
-
def test_deprecated_register_hooks(self):
def dummy(*args):
pass
@@ -1427,24 +1233,6 @@ class TestAppConfig:
self.config.auth_backend = None
config.sa_auth = past_config_sa_auth
- def test_ming_auth_middleware(self):
- if PY3: raise SkipTest()
-
- self.config.auth_backend = 'ming'
- self.config['sa_auth'] = {'authmetadata': ApplicationAuthMetadata(),
- 'user_class':None,
- 'cookie_secret':'12345',
- 'authenticators':UncopiableList([('default', None)])}
- self.config.setup_auth()
- self.config.add_auth_middleware(None, True)
-
- authenticators = [x[0] for x in self.config['sa_auth']['authenticators']]
- assert 'cookie' in authenticators
- assert 'mingauth' in authenticators
-
- self.config['sa_auth'] = {}
- self.config.auth_backend = None
-
@raises(KeyError)
def test_sqla_auth_middleware_no_backend(self):
#This is expected to raise error as no authenticators are specified for a custom backend
diff --git a/tg/appwrappers/mingflush.py b/tg/appwrappers/mingflush.py
deleted file mode 100644
index 56ae551..0000000
--- a/tg/appwrappers/mingflush.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import logging
-from tg.configuration.utils import coerce_config
-from tg.support.converters import asbool, asint
-from .base import ApplicationWrapper
-
-log = logging.getLogger(__name__)
-
-
-class MingApplicationWrapper(ApplicationWrapper):
- """Automatically flushes the Ming ODMSession.
-
- In case an exception raised during excution it won't flush the session and it will
- instead close it throwing away any change.
-
- Supported options which can be provided by config are:
-
- - ``ming.autoflush``: Whenever to flush session at end of request if no exceptions happened.
-
- """
- def __init__(self, handler, config):
- super(MingApplicationWrapper, self).__init__(handler, config)
-
- options = {
- 'autoflush': False,
- }
- options.update(coerce_config(config, 'ming.', {
- 'autoflush': asbool,
- }))
-
- self.ThreadLocalODMSession = None
- self.enabled = options['autoflush']
-
- if self.enabled:
- try:
- from ming.odm import ThreadLocalODMSession
- self.ThreadLocalODMSession = ThreadLocalODMSession
- except ImportError: # pragma: no cover
- log.exception('Unable to Enable Ming Application Wrapper')
- self.enabled = False
-
- log.debug('MingSessionFlush enabled: %s -> %s',
- self.enabled, options)
-
- @property
- def injected(self):
- return self.enabled
-
- def __call__(self, controller, environ, context):
- session = self.ThreadLocalODMSession
-
- try:
- resp = self.next_handler(controller, environ, context)
- except:
- session.close_all()
- raise
-
- log.debug('MingSessionFlush flushing changes...')
- session.flush_all()
- return resp
diff --git a/tg/configuration/app_config.py b/tg/configuration/app_config.py
index 65671ec..0608a11 100644
--- a/tg/configuration/app_config.py
+++ b/tg/configuration/app_config.py
@@ -30,7 +30,6 @@ from tg.appwrappers.caching import CacheApplicationWrapper
from tg.appwrappers.session import SessionApplicationWrapper
from tg.appwrappers.errorpage import ErrorPageApplicationWrapper
from tg.appwrappers.transaction_manager import TransactionApplicationWrapper
-from tg.appwrappers.mingflush import MingApplicationWrapper
log = logging.getLogger(__name__)
@@ -239,7 +238,6 @@ class AppConfig(Bunch):
self.register_wrapper(IdentityApplicationWrapper, after=True)
self.register_wrapper(SessionApplicationWrapper, after=True)
self.register_wrapper(CacheApplicationWrapper, after=True)
- self.register_wrapper(MingApplicationWrapper, after=True)
self.register_wrapper(TransactionApplicationWrapper, after=True)
self.register_wrapper(ErrorPageApplicationWrapper, after=True)
@@ -381,7 +379,6 @@ class AppConfig(Bunch):
self._configure_package_paths()
self._configure_renderers()
self._configure_error_pages()
- self._configure_ming()
self._configure_transaction_manager()
self._configure_mimetypes()
@@ -510,14 +507,6 @@ class AppConfig(Bunch):
for key, value in lookup.items():
self.mimetypes.add_type(value, key)
- def _configure_ming(self):
- try:
- autoflush_enabled = self['ming.autoflush']
- except KeyError:
- autoflush_enabled = True
-
- self['ming.autoflush'] = self.use_ming and autoflush_enabled
-
def _configure_error_pages(self):
if (self.auth_backend is None and 401 not in self['errorpage.status_codes']):
# If there's no auth backend configured which traps 401
@@ -686,42 +675,7 @@ class AppConfig(Bunch):
if self.use_sqlalchemy:
self.setup_sqlalchemy()
elif self.use_ming:
- self.setup_ming()
-
- def setup_ming(self):
- """Setup MongoDB database engine using Ming"""
- try:
- from ming import create_datastore
- def create_ming_datastore(url, database, **kw):
- if database and url[-1] != '/':
- url += '/'
- ming_url = url + database
- return create_datastore(ming_url, **kw)
- except ImportError: #pragma: no cover
- from ming.datastore import DataStore
- def create_ming_datastore(url, database, **kw):
- return DataStore(url, database=database, **kw)
-
- def mongo_read_pref(value):
- from pymongo.read_preferences import ReadPreference
- return getattr(ReadPreference, value)
-
- datastore_options = coerce_config(config, 'ming.connection.', {'max_pool_size':asint,
- 'network_timeout':asint,
- 'tz_aware':asbool,
- 'safe':asbool,
- 'journal':asbool,
- 'wtimeout':asint,
- 'fsync':asbool,
- 'ssl':asbool,
- 'read_preference':mongo_read_pref})
- datastore_options.pop('host', None)
- datastore_options.pop('port', None)
-
- datastore = create_ming_datastore(config['ming.url'], config.get('ming.db', ''),
- **datastore_options)
- config['tg.app_globals'].ming_datastore = datastore
- self.package.model.init_model(datastore)
+ raise NotImplementedError("ming support removed in Fedora")
def setup_sqlalchemy(self):
"""Setup SQLAlchemy database engine.
@@ -963,8 +917,7 @@ class AppConfig(Bunch):
from repoze.what.plugins.quickstart import setup_sql_auth
app = setup_sql_auth(app, skip_authentication=skip_authentication, **auth_args)
elif self.auth_backend == "ming":
- from tgming import setup_ming_auth
- app = setup_ming_auth(app, skip_authentication=skip_authentication, **auth_args)
+ raise NotImplementedError("ming support removed in Fedora")
else:
# Removing authmetadata as is not used by repoze.who:
tgauthmetadata = auth_args.pop('authmetadata', None)
@@ -989,9 +942,7 @@ class AppConfig(Bunch):
auth_args, sqlauth = create_default_authenticator(**auth_args)
authenticator = ('sqlauth', sqlauth)
elif self.auth_backend == "ming":
- from tg.configuration.mongo.auth import create_default_authenticator
- auth_args, mingauth = create_default_authenticator(**auth_args)
- authenticator = ('mingauth', mingauth)
+ raise NotImplementedError("ming support removed in Fedora")
else:
authenticator = None
@@ -1187,12 +1138,6 @@ class AppConfig(Bunch):
return TGTransactionManager(app, config)
- def add_ming_middleware(self, app):
- """Set up the ming middleware for the unit of work"""
- from tg.support.middlewares import MingSessionRemoverMiddleware
- from ming.odm import ThreadLocalODMSession
- return MingSessionRemoverMiddleware(ThreadLocalODMSession, app)
-
def add_sqlalchemy_middleware(self, app):
"""Set up middleware that cleans up the sqlalchemy session.
@@ -1296,7 +1241,7 @@ class AppConfig(Bunch):
app = self.add_sqlalchemy_middleware(app)
if self.use_ming:
- app = self.add_ming_middleware(app)
+ raise NotImplementedError("ming support removed in Fedora")
if config.get('make_body_seekable'):
app = SeekableRequestBodyMiddleware(app)
--
2.4.3