changeset 5388:d26921b851c3

Python 3 preparation: make relative imports explicit. Tool-generated patch.
author Joseph Myers <jsm@polyomino.org.uk>
date Tue, 24 Jul 2018 22:22:08 +0000
parents f7432fc3db4d
children f8673e720f30
files frontends/ZRoundup/__init__.py roundup/backends/indexer_common.py roundup/cgi/PageTemplates/Expressions.py roundup/cgi/PageTemplates/PageTemplate.py roundup/cgi/PageTemplates/PathIterator.py roundup/cgi/PageTemplates/PythonExpr.py roundup/cgi/PageTemplates/TALES.py roundup/cgi/TAL/DummyEngine.py roundup/cgi/TAL/HTMLParser.py roundup/cgi/TAL/HTMLTALParser.py roundup/cgi/TAL/TALGenerator.py roundup/cgi/TAL/TALInterpreter.py roundup/cgi/TAL/TALParser.py roundup/cgi/ZTUtils/__init__.py roundup/cgi/templating.py roundup/hyperdb.py roundup/mailgw.py test/benchmark.py test/db_test_base.py test/session_common.py test/test_actions.py test/test_anydbm.py test/test_cgi.py test/test_indexer.py test/test_jinja2.py test/test_mailgw.py test/test_memorydb.py test/test_mysql.py test/test_postgresql.py test/test_security.py test/test_sqlite.py test/test_templating.py test/test_userauditor.py test/test_xmlrpc.py
diffstat 34 files changed, 80 insertions(+), 80 deletions(-) [+]
line wrap: on
line diff
--- a/frontends/ZRoundup/__init__.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/frontends/ZRoundup/__init__.py	Tue Jul 24 22:22:08 2018 +0000
@@ -35,7 +35,7 @@
             raise ValueError("Can't determine where ZRoundup is installed")
 
 # product initialisation
-from ZRoundup import ZRoundup, manage_addZRoundupForm, manage_addZRoundup
+from .ZRoundup import ZRoundup, manage_addZRoundupForm, manage_addZRoundup
 def initialize(context):
     context.registerClass(
         ZRoundup,
--- a/roundup/backends/indexer_common.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/backends/indexer_common.py	Tue Jul 24 22:22:08 2018 +0000
@@ -112,13 +112,13 @@
     if not indexer_name:
         # Try everything
         try:
-            from indexer_xapian import Indexer
+            from .indexer_xapian import Indexer
             return Indexer(db)
         except ImportError:
             pass
 
         try:
-            from indexer_whoosh import Indexer
+            from .indexer_whoosh import Indexer
             return Indexer(db)
         except ImportError:
             pass
@@ -126,11 +126,11 @@
         indexer_name = "native" # fallback to native full text search
 
     if indexer_name == "xapian":
-        from indexer_xapian import Indexer
+        from .indexer_xapian import Indexer
         return Indexer(db)
 
     if indexer_name == "whoosh":
-        from indexer_whoosh import Indexer
+        from .indexer_whoosh import Indexer
         return Indexer(db)
 
     if indexer_name == "native":
--- a/roundup/cgi/PageTemplates/Expressions.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/PageTemplates/Expressions.py	Tue Jul 24 22:22:08 2018 +0000
@@ -23,7 +23,7 @@
 """
 
 import re, sys
-from TALES import Engine, CompilerError, _valid_name, NAME_RE, \
+from .TALES import Engine, CompilerError, _valid_name, NAME_RE, \
      Undefined, Default, _parse_expr
 
 
@@ -31,7 +31,7 @@
 def getEngine():
     global _engine
     if _engine is None:
-        from PathIterator import Iterator
+        from .PathIterator import Iterator
         _engine = Engine(Iterator)
         installHandlers(_engine)
     return _engine
@@ -46,7 +46,7 @@
     reg('not', NotExpr)
     reg('defer', DeferExpr)
 
-from PythonExpr import getSecurityManager, PythonExpr
+from .PythonExpr import getSecurityManager, PythonExpr
 guarded_getattr = getattr
 try:
     from zExceptions import Unauthorized
--- a/roundup/cgi/PageTemplates/PageTemplate.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/PageTemplates/PageTemplate.py	Tue Jul 24 22:22:08 2018 +0000
@@ -27,7 +27,7 @@
 from roundup.cgi.TAL.TALGenerator import TALGenerator
 # Do not use cStringIO here!  It's not unicode aware. :(
 from roundup.cgi.TAL.TALInterpreter import TALInterpreter, FasterStringIO
-from Expressions import getEngine
+from .Expressions import getEngine
 
 
 class PageTemplate:
--- a/roundup/cgi/PageTemplates/PathIterator.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/PageTemplates/PathIterator.py	Tue Jul 24 22:22:08 2018 +0000
@@ -17,8 +17,8 @@
 subpaths of elements.
 """
 
-import TALES
-from Expressions import restrictedTraverse, Undefs, getSecurityManager
+from . import TALES
+from .Expressions import restrictedTraverse, Undefs, getSecurityManager
 
 class Iterator(TALES.Iterator):
     def __bobo_traverse__(self, REQUEST, name):
--- a/roundup/cgi/PageTemplates/PythonExpr.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/PageTemplates/PythonExpr.py	Tue Jul 24 22:22:08 2018 +0000
@@ -17,7 +17,7 @@
 """Generic Python Expression Handler
 """
 
-from TALES import CompilerError
+from .TALES import CompilerError
 from sys import exc_info
 
 class getSecurityManager:
--- a/roundup/cgi/PageTemplates/TALES.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/PageTemplates/TALES.py	Tue Jul 24 22:22:08 2018 +0000
@@ -23,8 +23,8 @@
 import re, sys
 from roundup.cgi import ZTUtils
 from weakref import ref
-from MultiMapping import MultiMapping
-from GlobalTranslationService import getGlobalTranslationService
+from .MultiMapping import MultiMapping
+from .GlobalTranslationService import getGlobalTranslationService
 
 ustr = str
 
--- a/roundup/cgi/TAL/DummyEngine.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/TAL/DummyEngine.py	Tue Jul 24 22:22:08 2018 +0000
@@ -21,7 +21,7 @@
 import re
 import sys
 
-from TALDefs import NAME_RE, TALESError, ErrorInfo
+from .TALDefs import NAME_RE, TALESError, ErrorInfo
 #from ITALES import ITALESCompiler, ITALESEngine
 #from DocumentTemplate.DT_Util import ustr
 ustr = str
--- a/roundup/cgi/TAL/HTMLParser.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/TAL/HTMLParser.py	Tue Jul 24 22:22:08 2018 +0000
@@ -8,7 +8,7 @@
 # and CDATA (character data -- only end tags are special).
 
 
-import markupbase
+from . import markupbase
 import re
 
 # Regular expressions used for parsing
--- a/roundup/cgi/TAL/HTMLTALParser.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/TAL/HTMLTALParser.py	Tue Jul 24 22:22:08 2018 +0000
@@ -17,9 +17,9 @@
 
 import sys
 
-from TALGenerator import TALGenerator
-from HTMLParser import HTMLParser, HTMLParseError
-from TALDefs import \
+from .TALGenerator import TALGenerator
+from .HTMLParser import HTMLParser, HTMLParseError
+from .TALDefs import \
      ZOPE_METAL_NS, ZOPE_TAL_NS, ZOPE_I18N_NS, METALError, TALError, I18NError
 
 BOOLEAN_HTML_ATTRS = [
--- a/roundup/cgi/TAL/TALGenerator.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/TAL/TALGenerator.py	Tue Jul 24 22:22:08 2018 +0000
@@ -18,12 +18,12 @@
 import re
 import cgi
 
-import TALDefs
+from . import TALDefs
 
-from TALDefs import NAME_RE, TAL_VERSION
-from TALDefs import I18NError, METALError, TALError
-from TALDefs import parseSubstitution
-from TranslationContext import TranslationContext, DEFAULT_DOMAIN
+from .TALDefs import NAME_RE, TAL_VERSION
+from .TALDefs import I18NError, METALError, TALError
+from .TALDefs import parseSubstitution
+from .TranslationContext import TranslationContext, DEFAULT_DOMAIN
 
 I18N_REPLACE = 1
 I18N_CONTENT = 2
@@ -40,7 +40,7 @@
 
     def __init__(self, expressionCompiler=None, xml=1, source_file=None):
         if not expressionCompiler:
-            from DummyEngine import DummyEngine
+            from .DummyEngine import DummyEngine
             expressionCompiler = DummyEngine()
         self.expressionCompiler = expressionCompiler
         self.CompilerError = expressionCompiler.getCompilerError()
--- a/roundup/cgi/TAL/TALInterpreter.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/TAL/TALInterpreter.py	Tue Jul 24 22:22:08 2018 +0000
@@ -27,10 +27,10 @@
 #from DocumentTemplate.DT_Util import ustr
 ustr = str
 
-from TALDefs import TAL_VERSION, TALError, METALError, attrEscape
-from TALDefs import isCurrentVersion, getProgramVersion, getProgramMode
-from TALGenerator import TALGenerator
-from TranslationContext import TranslationContext
+from .TALDefs import TAL_VERSION, TALError, METALError, attrEscape
+from .TALDefs import isCurrentVersion, getProgramVersion, getProgramMode
+from .TALGenerator import TALGenerator
+from .TranslationContext import TranslationContext
 
 BOOLEAN_HTML_ATTRS = [
     # List of Boolean attributes in HTML that should be rendered in
@@ -579,7 +579,7 @@
     bytecode_handlers["insertStructure"] = do_insertStructure
 
     def insertHTMLStructure(self, text, repldict):
-        from HTMLTALParser import HTMLTALParser
+        from .HTMLTALParser import HTMLTALParser
         gen = AltTALGenerator(repldict, self.engine.getCompiler(), 0)
         p = HTMLTALParser(gen) # Raises an exception if text is invalid
         p.parseString(text)
@@ -587,7 +587,7 @@
         self.interpret(program)
 
     def insertXMLStructure(self, text, repldict):
-        from TALParser import TALParser
+        from .TALParser import TALParser
         gen = AltTALGenerator(repldict, self.engine.getCompiler(), 0)
         p = TALParser(gen)
         gen.enable(0)
--- a/roundup/cgi/TAL/TALParser.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/TAL/TALParser.py	Tue Jul 24 22:22:08 2018 +0000
@@ -15,9 +15,9 @@
 Parse XML and compile to TALInterpreter intermediate code.
 """
 
-from XMLParser import XMLParser
-from TALDefs import XML_NS, ZOPE_I18N_NS, ZOPE_METAL_NS, ZOPE_TAL_NS
-from TALGenerator import TALGenerator
+from .XMLParser import XMLParser
+from .TALDefs import XML_NS, ZOPE_I18N_NS, ZOPE_METAL_NS, ZOPE_TAL_NS
+from .TALGenerator import TALGenerator
 
 class TALParser(XMLParser):
 
@@ -135,8 +135,8 @@
         file = sys.argv[1]
     p.parseFile(file)
     program, macros = p.getCode()
-    from TALInterpreter import TALInterpreter
-    from DummyEngine import DummyEngine
+    from .TALInterpreter import TALInterpreter
+    from .DummyEngine import DummyEngine
     engine = DummyEngine(macros)
     TALInterpreter(program, macros, engine, sys.stdout, wrap=0)()
 
--- a/roundup/cgi/ZTUtils/__init__.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/ZTUtils/__init__.py	Tue Jul 24 22:22:08 2018 +0000
@@ -18,6 +18,6 @@
 '''
 __docformat__ = 'restructuredtext'
 
-from Batch import Batch
-from Iterator import Iterator
+from .Batch import Batch
+from .Iterator import Iterator
 
--- a/roundup/cgi/templating.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/cgi/templating.py	Tue Jul 24 22:22:08 2018 +0000
@@ -29,7 +29,7 @@
 from roundup import i18n
 from roundup.i18n import _
 
-from KeywordsExpr import render_keywords_expression_editor
+from .KeywordsExpr import render_keywords_expression_editor
 
 try: 
     # Use the cryptographic source of randomness if available
@@ -244,11 +244,11 @@
 
     for engine_name in engines:
         if engine_name == 'chameleon':
-            from engine_chameleon import Loader
+            from .engine_chameleon import Loader
         elif engine_name == 'jinja2':
-            from engine_jinja2 import Jinja2Loader as Loader
+            from .engine_jinja2 import Jinja2Loader as Loader
         elif engine_name == 'zopetal':
-            from engine_zopetal import Loader
+            from .engine_zopetal import Loader
         else:
             raise Exception('Unknown template engine "%s"' % engine_name)
         ml.add_loader(Loader(dir))
--- a/roundup/hyperdb.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/hyperdb.py	Tue Jul 24 22:22:08 2018 +0000
@@ -26,8 +26,8 @@
 import logging
 
 # roundup modules
-import date, password
-from support import ensureParentsExist, PrioList
+from . import date, password
+from .support import ensureParentsExist, PrioList
 from roundup.i18n import _
 from roundup.cgi.exceptions import DetectorError
 
--- a/roundup/mailgw.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/roundup/mailgw.py	Tue Jul 24 22:22:08 2018 +0000
@@ -100,7 +100,7 @@
 import traceback
 import email.utils
 
-from anypy.email_ import decode_header
+from .anypy.email_ import decode_header
 
 from roundup import configuration, hyperdb, date, password, exceptions
 from roundup.mailer import Mailer, MessageSendError
--- a/test/benchmark.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/benchmark.py	Tue Jul 24 22:22:08 2018 +0000
@@ -5,7 +5,7 @@
     Interval, DatabaseError, Boolean, Number
 from roundup import date, password
 
-from db_test_base import config
+from .db_test_base import config
 
 def setupSchema(db, module):
     status = module.Class(db, "status", name=String())
--- a/test/db_test_base.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/db_test_base.py	Tue Jul 24 22:22:08 2018 +0000
@@ -18,7 +18,7 @@
 from __future__ import print_function
 import unittest, os, shutil, errno, imp, sys, time, pprint, base64, os.path
 import logging, cgi
-import gpgmelib
+from . import gpgmelib
 from email.parser import FeedParser
 
 import pytest
@@ -34,7 +34,7 @@
 from roundup.cgi.templating import HTMLItem
 from roundup.exceptions import UsageError, Reject
 
-from mocknull import MockNull
+from .mocknull import MockNull
 
 config = configuration.CoreConfig()
 config.DATABASE = "db"
--- a/test/session_common.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/session_common.py	Tue Jul 24 22:22:08 2018 +0000
@@ -1,6 +1,6 @@
 import os, shutil, unittest
 
-from db_test_base import config
+from .db_test_base import config
 
 
 class SessionTest(object):
--- a/test/test_actions.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_actions.py	Tue Jul 24 22:22:08 2018 +0000
@@ -8,7 +8,7 @@
 from roundup.cgi.client import add_message
 from roundup.cgi.exceptions import Redirect, Unauthorised, SeriousError, FormError
 
-from mocknull import MockNull
+from .mocknull import MockNull
 
 def true(*args, **kwargs):
     return 1
--- a/test/test_anydbm.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_anydbm.py	Tue Jul 24 22:22:08 2018 +0000
@@ -18,8 +18,8 @@
 import unittest, os, shutil, time
 from roundup.backends import get_backend
 
-from db_test_base import DBTest, ROTest, SchemaTest, ClassicInitTest, config
-from db_test_base import HTMLItemTest, SpecialActionTest
+from .db_test_base import DBTest, ROTest, SchemaTest, ClassicInitTest, config
+from .db_test_base import HTMLItemTest, SpecialActionTest
 
 class anydbmOpener:
     module = get_backend('anydbm')
@@ -48,7 +48,7 @@
     backend = 'anydbm'
 
 
-from session_common import SessionTest
+from .session_common import SessionTest
 class anydbmSessionTest(anydbmOpener, SessionTest, unittest.TestCase):
     pass
 
--- a/test/test_cgi.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_cgi.py	Tue Jul 24 22:22:08 2018 +0000
@@ -22,10 +22,10 @@
 # For testing very simple rendering
 from roundup.cgi.engine_zopetal import RoundupPageTemplate
 
-from mocknull import MockNull
+from .mocknull import MockNull
 
-import db_test_base
-from db_test_base import FormTestParent, setupTracker, FileUpload
+from . import db_test_base
+from .db_test_base import FormTestParent, setupTracker, FileUpload
 
 class FileList:
     def __init__(self, name, *files):
--- a/test/test_indexer.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_indexer.py	Tue Jul 24 22:22:08 2018 +0000
@@ -25,10 +25,10 @@
 from roundup.backends.indexer_rdbms import Indexer
 
 # borrow from other tests
-from db_test_base import setupSchema, config
+from .db_test_base import setupSchema, config
 from .test_postgresql import postgresqlOpener, skip_postgresql
 from .test_mysql import mysqlOpener, skip_mysql
-from test_sqlite import sqliteOpener
+from .test_sqlite import sqliteOpener
 
 try:
     import xapian
--- a/test/test_jinja2.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_jinja2.py	Tue Jul 24 22:22:08 2018 +0000
@@ -12,7 +12,7 @@
 import shutil # only, needed for tearDown. TODO: Remove when refactored.
 import unittest
 
-import db_test_base
+from . import db_test_base
 
 TESTSUITE_IDENTIFIER='jinja2'
 
--- a/test/test_mailgw.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_mailgw.py	Tue Jul 24 22:22:08 2018 +0000
@@ -12,7 +12,7 @@
 # TODO: test bcc
 
 import email
-import gpgmelib
+from . import gpgmelib
 import unittest, tempfile, os, shutil, errno, imp, sys, difflib, time
 
 import pytest
@@ -40,7 +40,7 @@
 from roundup import init, instance, password, __version__
 
 #import db_test_base
-import memorydb
+from . import memorydb
 
 def expectedFailure(method):
     """ For marking a failing test.
--- a/test/test_memorydb.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_memorydb.py	Tue Jul 24 22:22:08 2018 +0000
@@ -2,8 +2,8 @@
 
 from roundup import hyperdb
 
-from db_test_base import DBTest, ROTest, SchemaTest, config, setupSchema
-import memorydb
+from .db_test_base import DBTest, ROTest, SchemaTest, config, setupSchema
+from . import memorydb
 
 class memorydbOpener:
     module = memorydb
@@ -48,7 +48,7 @@
     pass
 
 
-from session_common import SessionTest
+from .session_common import SessionTest
 class memorydbSessionTest(memorydbOpener, SessionTest, unittest.TestCase):
     def setUp(self):
         self.db = self.module.Database(config, 'admin')
--- a/test/test_mysql.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_mysql.py	Tue Jul 24 22:22:08 2018 +0000
@@ -21,9 +21,9 @@
 from roundup.hyperdb import DatabaseError
 from roundup.backends import get_backend, have_backend
 
-from db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest
-from db_test_base import ConcurrentDBTest, HTMLItemTest, FilterCacheTest
-from db_test_base import SpecialActionTest
+from .db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest
+from .db_test_base import ConcurrentDBTest, HTMLItemTest, FilterCacheTest
+from .db_test_base import SpecialActionTest
 
 
 class mysqlOpener:
@@ -123,7 +123,7 @@
         self.nuke_database()
 
 
-from session_common import SessionTest
+from .session_common import SessionTest
 @skip_mysql
 class mysqlSessionTest(mysqlOpener, SessionTest, unittest.TestCase):
     def setUp(self):
--- a/test/test_postgresql.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_postgresql.py	Tue Jul 24 22:22:08 2018 +0000
@@ -21,9 +21,9 @@
 from roundup.hyperdb import DatabaseError
 from roundup.backends import get_backend, have_backend
 
-from db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest
-from db_test_base import ConcurrentDBTest, HTMLItemTest, FilterCacheTest
-from db_test_base import ClassicInitBase, setupTracker, SpecialActionTest
+from .db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest
+from .db_test_base import ConcurrentDBTest, HTMLItemTest, FilterCacheTest
+from .db_test_base import ClassicInitBase, setupTracker, SpecialActionTest
 
 if not have_backend('postgresql'):
     # FIX: workaround for a bug in pytest.mark.skip():
@@ -203,7 +203,7 @@
         postgresqlOpener.tearDown(self)
 
 
-from session_common import SessionTest
+from .session_common import SessionTest
 @skip_postgresql
 class postgresqlSessionTest(postgresqlOpener, SessionTest, unittest.TestCase):
     def setUp(self):
--- a/test/test_security.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_security.py	Tue Jul 24 22:22:08 2018 +0000
@@ -23,7 +23,7 @@
 
 from roundup import backends
 import roundup.password
-from db_test_base import setupSchema, MyTestCase, config
+from .db_test_base import setupSchema, MyTestCase, config
 
 
 class PermissionTest(MyTestCase, unittest.TestCase):
--- a/test/test_sqlite.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_sqlite.py	Tue Jul 24 22:22:08 2018 +0000
@@ -18,9 +18,9 @@
 import unittest, os, shutil, time
 from roundup.backends import get_backend, have_backend
 
-from db_test_base import DBTest, ROTest, SchemaTest, ClassicInitTest, config
-from db_test_base import ConcurrentDBTest, FilterCacheTest
-from db_test_base import SpecialActionTest
+from .db_test_base import DBTest, ROTest, SchemaTest, ClassicInitTest, config
+from .db_test_base import ConcurrentDBTest, FilterCacheTest
+from .db_test_base import SpecialActionTest
 
 class sqliteOpener:
     if have_backend('sqlite'):
@@ -58,6 +58,6 @@
     backend = 'sqlite'
 
 
-from session_common import SessionTest
+from .session_common import SessionTest
 class sqliteSessionTest(sqliteOpener, SessionTest, unittest.TestCase):
     pass
--- a/test/test_templating.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_templating.py	Tue Jul 24 22:22:08 2018 +0000
@@ -3,7 +3,7 @@
 from cgi import FieldStorage, MiniFieldStorage
 
 from roundup.cgi.templating import *
-from test_actions import MockNull, true
+from .test_actions import MockNull, true
 
 class MockDatabase(MockNull):
     def getclass(self, name):
--- a/test/test_userauditor.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_userauditor.py	Tue Jul 24 22:22:08 2018 +0000
@@ -1,6 +1,6 @@
 import os, unittest, shutil
 
-from db_test_base import setupTracker
+from .db_test_base import setupTracker
 from .test_dates import skip_pytz
 
 
--- a/test/test_xmlrpc.py	Tue Jul 24 22:21:20 2018 +0000
+++ b/test/test_xmlrpc.py	Tue Jul 24 22:22:08 2018 +0000
@@ -15,7 +15,7 @@
 from roundup.hyperdb import String
 from roundup.cgi import TranslationService
 
-import db_test_base
+from . import db_test_base
 from .test_mysql import skip_mysql
 from .test_postgresql import skip_postgresql
 

Roundup Issue Tracker: http://roundup-tracker.org/