[#8400] Upgrade Ming 0.11.1 -> 0.11.2, and its deps: pymongo,pytz,six

    Ming                             0.11.1 -> 0.11.2
        pymongo                      3.10.1 -> 3.11.4
        pytz                         2019.2 -> no upgrade
        six                          1.16.0 -> no upgrade
diff --git a/Allura/allura/command/base.py b/Allura/allura/command/base.py
index 9e8b8c5..b5e4926 100644
--- a/Allura/allura/command/base.py
+++ b/Allura/allura/command/base.py
@@ -33,6 +33,7 @@
 from allura.config.environment import load_environment
 from allura.lib.decorators import task
 from allura.lib import helpers as h
+from allura.lib.utils import configure_ming
 
 log = None
 
@@ -104,7 +105,7 @@
             self.setup_globals()
             from allura import model
             M = model
-            ming.configure(**conf)
+            configure_ming(conf)
             if asbool(conf.get('activitystream.recording.enabled', False)):
                 activitystream.configure(**h.convert_bools(conf, prefix='activitystream.'))
             tg.tmpl_context.user = M.User.anonymous()
diff --git a/Allura/allura/config/middleware.py b/Allura/allura/config/middleware.py
index 3a87b88..458cb3b 100644
--- a/Allura/allura/config/middleware.py
+++ b/Allura/allura/config/middleware.py
@@ -68,6 +68,7 @@
 from allura.lib.custom_middleware import SetRequestHostFromConfig
 from allura.lib.custom_middleware import MingTaskSessionSetupMiddleware
 from allura.lib import helpers as h
+from allura.lib.utils import configure_ming
 
 __all__ = ['make_app']
 
@@ -116,7 +117,7 @@
     mimetypes.init([pkg_resources.resource_filename('allura', 'etc/mime.types')] + mimetypes.knownfiles)
 
     # Configure MongoDB
-    ming.configure(**app_conf)
+    configure_ming(app_conf)
 
     # Configure ActivityStream
     if asbool(app_conf.get('activitystream.recording.enabled', False)):
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index 1ea1dd5..3f85964 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -938,7 +938,7 @@
     from ming.session import Session
     datastores = Session._datastores
     try:
-        ming.configure(**conf)
+        utils.configure_ming(conf)
         yield
     finally:
         Session._datastores = datastores
diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py
index 5adc4f4..f29646a 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -35,6 +35,7 @@
 from itertools import groupby
 import operator as op
 import collections
+import ming
 from six.moves.urllib.parse import urlparse
 import six.moves.urllib.request
 import six.moves.urllib.parse
@@ -69,6 +70,21 @@
 MARKDOWN_EXTENSIONS = ['.markdown', '.mdown', '.mkdn', '.mkd', '.md']
 
 
+def clean_ming_config(config):
+    # delete replicaSet=''
+    for key in list(config.keys()):
+        if '.replicaSet' in key and not config[key]:
+            del config[key]
+        elif 'mongo_host' in key and 'replicaSet=&' in config[key]:
+            config[key] = config[key].replace('replicaSet=&', '')
+    return config
+
+
+def configure_ming(conf):
+    conf = clean_ming_config(conf)
+    ming.configure(**conf)
+
+
 def permanent_redirect(url):
     try:
         tg.redirect(url)
diff --git a/Allura/allura/websetup/schema.py b/Allura/allura/websetup/schema.py
index f78034d..f49eb01 100644
--- a/Allura/allura/websetup/schema.py
+++ b/Allura/allura/websetup/schema.py
@@ -31,6 +31,7 @@
 from tg.wsgiapp import RequestLocals
 
 from allura.lib import helpers as h
+from allura.lib.utils import configure_ming
 
 log = logging.getLogger(__name__)
 REGISTRY = Registry()
@@ -50,7 +51,7 @@
     REGISTRY.prepare()
     REGISTRY.register(allura.credentials, allura.lib.security.Credentials())
 
-    ming.configure(**conf)
+    configure_ming(conf)
     if asbool(conf.get('activitystream.recording.enabled', False)):
         activitystream.configure(**h.convert_bools(conf, prefix='activitystream.'))
     # Nothing to do
diff --git a/requirements.txt b/requirements.txt
index 3aa4feb..1edef63 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -87,11 +87,11 @@
     #   jinja2
     #   turbogears2
     #   webhelpers2
-ming==0.11.1
+ming==0.11.2
     # via -r requirements.in
 mock==3.0.5
     # via -r requirements.in
-oauth2 @ https://github.com/joestump/python-oauth2/archive/b94f69b1ad195513547924e380d9265133e995fa.zip
+https://github.com/joestump/python-oauth2/archive/b94f69b1ad195513547924e380d9265133e995fa.zip#egg=oauth2
     # via -r requirements.in
 oauthlib==3.0.2
     # via requests-oauthlib
@@ -120,7 +120,7 @@
     # via -r requirements.in
 pygments==2.9.0
     # via -r requirements.in
-pymongo==3.10.1
+pymongo==3.11.4
     # via
     #   -r requirements.in
     #   activitystream