Skip to content

Commit 06b1b62

Browse files
committed
Add support for DB open modes
The tests won't pass in Travis until we merge the maxminddb changes.
1 parent ebdd56c commit 06b1b62

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

geoip2/database.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
import geoip2.errors
1212
import maxminddb
1313

14+
from maxminddb import (MODE_AUTO, MODE_MMAP, MODE_MMAP_EXT, MODE_FILE,
15+
MODE_MEMORY)
16+
1417

1518
class Reader(object):
1619

@@ -40,10 +43,10 @@ class Reader(object):
4043
4144
"""
4245

43-
def __init__(self, filename, locales=None):
46+
def __init__(self, filename, locales=None, mode=MODE_AUTO):
4447
if locales is None:
4548
locales = ['en']
46-
self._db_reader = maxminddb.Reader(filename)
49+
self._db_reader = maxminddb.open_database(filename, mode)
4750
self._locales = locales
4851

4952
def country(self, ip_address):

tests/database_test.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
sys.path.append('..')
88

99
import geoip2.database
10+
import maxminddb
11+
12+
try:
13+
import maxminddb.extension
14+
except ImportError:
15+
maxminddb.extension = None
1016

1117
if sys.version_info[:2] == (2, 6):
1218
import unittest2 as unittest
@@ -18,7 +24,7 @@
1824
unittest.TestCase.assertRegex = unittest.TestCase.assertRegexpMatches
1925

2026

21-
class TestReader(unittest.TestCase):
27+
class BaseTestReader(object):
2228

2329
def test_default_locale(self):
2430
reader = geoip2.database.Reader(
@@ -142,3 +148,24 @@ def test_isp(self):
142148
"ISP repr can be eval'd")
143149

144150
reader.close()
151+
152+
153+
@unittest.skipUnless(maxminddb.extension, 'No C extension module found. Skipping tests')
154+
class TestExtensionReader(BaseTestReader, unittest.TestCase):
155+
mode = geoip2.database.MODE_MMAP_EXT
156+
157+
158+
class TestMMAPReader(BaseTestReader, unittest.TestCase):
159+
mode = geoip2.database.MODE_MMAP
160+
161+
162+
class TestFileReader(BaseTestReader, unittest.TestCase):
163+
mode = geoip2.database.MODE_FILE
164+
165+
166+
class TestMemoryReader(BaseTestReader, unittest.TestCase):
167+
mode = geoip2.database.MODE_MEMORY
168+
169+
170+
class TestMemoryReader(BaseTestReader, unittest.TestCase):
171+
mode = geoip2.database.MODE_AUTO

0 commit comments

Comments
 (0)