Skip to content

Commit 019aa75

Browse files
authored
Merge pull request #71 from lumapps/fix-race
Fix race condition
2 parents c0e9b7d + 7f4ca8b commit 019aa75

File tree

5 files changed

+38
-51
lines changed

5 files changed

+38
-51
lines changed

lumapps/api/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version__ = "0.1.17"
1+
__version__ = "0.1.18"
22
__pypi_packagename__ = "lumapps-sdk"

lumapps/api/utils.py

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -81,38 +81,27 @@ def get_conf_db_file():
8181
return os.path.join(d, "{}.db".format(__pypi_packagename__))
8282

8383

84-
_conn = None
85-
86-
87-
def _unset_conn():
88-
global _conn
89-
_conn = None
90-
91-
9284
def _get_conn():
93-
global _conn
94-
if _conn is None:
95-
conn = sqlite3.connect(get_conf_db_file())
96-
conn.isolation_level = None
97-
conn.row_factory = sqlite3.Row
98-
conn.execute('PRAGMA journal_mode=WAL')
99-
conn.execute(
100-
"""CREATE TABLE IF NOT EXISTS discovery_cache (
101-
url TEXT NOT NULL,
102-
expiry TEXT NOT NULL,
103-
content TEXT NOT NULL,
104-
PRIMARY KEY (url)
105-
)"""
106-
)
107-
conn.execute(
108-
"""CREATE TABLE IF NOT EXISTS config (
109-
name TEXT NOT NULL,
110-
content TEXT NOT NULL,
111-
PRIMARY KEY (name)
112-
)"""
113-
)
114-
_conn = conn
115-
return _conn
85+
conn = sqlite3.connect(get_conf_db_file())
86+
conn.isolation_level = None
87+
conn.row_factory = sqlite3.Row
88+
conn.execute('PRAGMA journal_mode=WAL')
89+
conn.execute(
90+
"""CREATE TABLE IF NOT EXISTS discovery_cache (
91+
url TEXT NOT NULL,
92+
expiry TEXT NOT NULL,
93+
content TEXT NOT NULL,
94+
PRIMARY KEY (url)
95+
)"""
96+
)
97+
conn.execute(
98+
"""CREATE TABLE IF NOT EXISTS config (
99+
name TEXT NOT NULL,
100+
content TEXT NOT NULL,
101+
PRIMARY KEY (name)
102+
)"""
103+
)
104+
return conn
116105

117106

118107
def get_discovery_cache(url):

requirements_dev.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
flake8
33
coverage
44
pytest
5-
mock
5+
pytest-mock
66

77
# Doc
88
sphinx

tests/test_cli.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
from lumapps.api.cli import load_config, parse_args, list_configs
2-
from lumapps.api.utils import set_config, _unset_conn
2+
from lumapps.api.utils import set_config, _get_conn
33

44
import pytest
5-
from mock import patch, MagicMock
65

76

87
def test_load_config():
@@ -20,16 +19,15 @@ def test_arg_parser():
2019
arg_parser, args = parse_args(["--user", "foo"])
2120

2221

23-
@patch("lumapps.api.utils.get_conf_db_file", MagicMock(return_value=":memory:"))
24-
def test_list_configs_1(capsys):
25-
_unset_conn()
22+
def test_list_configs_1(capsys, mocker):
23+
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
2624
list_configs()
2725
assert capsys.readouterr().out.startswith("There are no saved configs")
2826

2927

30-
@patch("lumapps.api.utils.get_conf_db_file", MagicMock(return_value=":memory:"))
31-
def test_list_configs_2(capsys):
32-
_unset_conn()
28+
def test_list_configs_2(capsys, mocker):
29+
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
30+
mocker.patch("lumapps.api.utils._get_conn", return_value=_get_conn())
3331
set_config("foo", "bar")
3432
list_configs()
3533
assert "foo" in capsys.readouterr().out

tests/test_utils.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from datetime import datetime, timedelta
22

3-
from mock import patch, MagicMock
4-
53
from lumapps.api.utils import (
64
list_prune_filters,
75
_DiscoveryCacheDict,
@@ -10,7 +8,7 @@
108
get_config_names,
119
set_config,
1210
get_config,
13-
_unset_conn,
11+
_get_conn,
1412
)
1513

1614

@@ -24,7 +22,9 @@ def test_discovery_cache_1():
2422
assert DiscoveryCache == _DiscoveryCacheSqlite
2523

2624

27-
def test_discovery_cache_dict():
25+
def test_discovery_cache_dict(mocker):
26+
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
27+
mocker.patch("lumapps.api.utils._get_conn", return_value=_get_conn())
2828
c = _DiscoveryCacheDict
2929
assert c.get('foobar.com') is None
3030
c.set('foobar.com', "bla")
@@ -33,18 +33,18 @@ def test_discovery_cache_dict():
3333
assert c.get('foobar.com') is None
3434

3535

36-
@patch("lumapps.api.utils.get_conf_db_file", MagicMock(return_value=":memory:"))
37-
def test_discovery_cache_sqlite():
38-
_unset_conn()
36+
def test_discovery_cache_sqlite(mocker):
37+
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
38+
mocker.patch("lumapps.api.utils._get_conn", return_value=_get_conn())
3939
c = _DiscoveryCacheSqlite
4040
assert c.get('foobar.com') is None
4141
c.set('foobar.com', "bla")
4242
assert c.get('foobar.com') == "bla"
4343

4444

45-
@patch("lumapps.api.utils.get_conf_db_file", MagicMock(return_value=":memory:"))
46-
def test_get_set_configs():
47-
_unset_conn()
45+
def test_get_set_configs(mocker):
46+
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
47+
mocker.patch("lumapps.api.utils._get_conn", return_value=_get_conn())
4848
assert len(get_config_names()) == 0
4949
set_config("foo", "bar")
5050
assert len(get_config_names()) == 1

0 commit comments

Comments
 (0)