Skip to content

Commit

Permalink
Make __init__ args required
Browse files Browse the repository at this point in the history
Move the default selection choices into a separate
factory function.
  • Loading branch information
jamesls committed Aug 18, 2013
1 parent d3709b3 commit d5c2d35
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 24 deletions.
48 changes: 24 additions & 24 deletions semidbm/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,10 @@ class _SemiDBM(object):
does not exist it will be created.
"""
def __init__(self, dbdir, renamer=None, verify_checksums=False,
data_loader=None):
if renamer is None:
self._renamer = _Renamer()
else:
self._renamer = renamer
if data_loader is None:
# TODO: handle me
raise Exception("Handle this case!")
else:
self._data_loader = data_loader
def __init__(self, dbdir, renamer, data_loader=None,
verify_checksums=False):
self._renamer = renamer
self._data_loader = data_loader
self._dbdir = dbdir
self._data_filename = os.path.join(dbdir, 'data')
# The in memory index, mapping of key to (offset, size).
Expand Down Expand Up @@ -245,7 +238,8 @@ def compact(self):
# implementation can certainly be more efficient, but compaction
# is really slow anyways.
new_db = self.__class__(os.path.join(self._dbdir, 'compact'),
data_loader=self._data_loader)
data_loader=self._data_loader,
renamer=self._renamer)
for key in self._index:
new_db[key] = self[key]
new_db.sync()
Expand Down Expand Up @@ -319,6 +313,23 @@ def __call__(self, from_file, to_file):
os.remove(to_file + os.extsep + 'tmprename')


def _create_default_params(**starting_kwargs):
kwargs = starting_kwargs.copy()
# Internal method that creates the parameters based
# on the choices like platform/available features.
if sys.platform.startswith('win'):
renamer = _WindowsRenamer()
else:
renamer = _Renamer()
if sys.platform.startswith('java'):
from semidbm.loaders.simpleload import SimpleFileLoader
data_loader = SimpleFileLoader()
else:
from semidbm.loaders.mmapload import MMapLoader
data_loader = MMapLoader()
kwargs.update({'renamer': renamer, 'data_loader': data_loader})
return kwargs

# The "dbm" interface is:
#
# open(filename, flag='r', mode=0o666)
Expand Down Expand Up @@ -357,18 +368,7 @@ def open(filename, flag='r', mode=0o666, verify_checksums=False):
are correct on every __getitem__ call (defaults to False).
"""
if sys.platform.startswith('win'):
renamer = _WindowsRenamer()
else:
renamer = _Renamer()
if sys.platform.startswith('java'):
from semidbm.loaders.simpleload import SimpleFileLoader
data_loader = SimpleFileLoader()
else:
from semidbm.loaders.mmapload import MMapLoader
data_loader = MMapLoader()
kwargs = {'renamer': renamer, 'verify_checksums': verify_checksums,
'data_loader': data_loader}
kwargs = _create_default_params(verify_checksums=verify_checksums)
if flag == 'r':
return _SemiDBMReadOnly(filename, **kwargs)
elif flag == 'c':
Expand Down
2 changes: 2 additions & 0 deletions test_semidbm.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import unittest

import semidbm
import semidbm.db
from semidbm.loaders.simpleload import SimpleFileLoader


Expand Down Expand Up @@ -532,6 +533,7 @@ def open_db_file(self, **kwargs):

class TestSimpleFileLoader(TestSemiDBM):
def open_db_file(self, **kwargs):
kwargs = semidbm.db._create_default_params()
kwargs['data_loader'] = SimpleFileLoader()
return semidbm.db._SemiDBM(self.dbdir, **kwargs)

Expand Down

0 comments on commit d5c2d35

Please sign in to comment.