Skip to content

Commit

Permalink
Merge pull request #71 from lumapps/fix-race
Browse files Browse the repository at this point in the history
Fix race condition
  • Loading branch information
ludo-lumapps authored Dec 13, 2019
2 parents c0e9b7d + 7f4ca8b commit 019aa75
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 51 deletions.
2 changes: 1 addition & 1 deletion lumapps/api/conf.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
__version__ = "0.1.17"
__version__ = "0.1.18"
__pypi_packagename__ = "lumapps-sdk"
51 changes: 20 additions & 31 deletions lumapps/api/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,38 +81,27 @@ def get_conf_db_file():
return os.path.join(d, "{}.db".format(__pypi_packagename__))


_conn = None


def _unset_conn():
global _conn
_conn = None


def _get_conn():
global _conn
if _conn is None:
conn = sqlite3.connect(get_conf_db_file())
conn.isolation_level = None
conn.row_factory = sqlite3.Row
conn.execute('PRAGMA journal_mode=WAL')
conn.execute(
"""CREATE TABLE IF NOT EXISTS discovery_cache (
url TEXT NOT NULL,
expiry TEXT NOT NULL,
content TEXT NOT NULL,
PRIMARY KEY (url)
)"""
)
conn.execute(
"""CREATE TABLE IF NOT EXISTS config (
name TEXT NOT NULL,
content TEXT NOT NULL,
PRIMARY KEY (name)
)"""
)
_conn = conn
return _conn
conn = sqlite3.connect(get_conf_db_file())
conn.isolation_level = None
conn.row_factory = sqlite3.Row
conn.execute('PRAGMA journal_mode=WAL')
conn.execute(
"""CREATE TABLE IF NOT EXISTS discovery_cache (
url TEXT NOT NULL,
expiry TEXT NOT NULL,
content TEXT NOT NULL,
PRIMARY KEY (url)
)"""
)
conn.execute(
"""CREATE TABLE IF NOT EXISTS config (
name TEXT NOT NULL,
content TEXT NOT NULL,
PRIMARY KEY (name)
)"""
)
return conn


def get_discovery_cache(url):
Expand Down
2 changes: 1 addition & 1 deletion requirements_dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
flake8
coverage
pytest
mock
pytest-mock

# Doc
sphinx
Expand Down
14 changes: 6 additions & 8 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from lumapps.api.cli import load_config, parse_args, list_configs
from lumapps.api.utils import set_config, _unset_conn
from lumapps.api.utils import set_config, _get_conn

import pytest
from mock import patch, MagicMock


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


@patch("lumapps.api.utils.get_conf_db_file", MagicMock(return_value=":memory:"))
def test_list_configs_1(capsys):
_unset_conn()
def test_list_configs_1(capsys, mocker):
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
list_configs()
assert capsys.readouterr().out.startswith("There are no saved configs")


@patch("lumapps.api.utils.get_conf_db_file", MagicMock(return_value=":memory:"))
def test_list_configs_2(capsys):
_unset_conn()
def test_list_configs_2(capsys, mocker):
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
mocker.patch("lumapps.api.utils._get_conn", return_value=_get_conn())
set_config("foo", "bar")
list_configs()
assert "foo" in capsys.readouterr().out
20 changes: 10 additions & 10 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
from datetime import datetime, timedelta

from mock import patch, MagicMock

from lumapps.api.utils import (
list_prune_filters,
_DiscoveryCacheDict,
Expand All @@ -10,7 +8,7 @@
get_config_names,
set_config,
get_config,
_unset_conn,
_get_conn,
)


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


def test_discovery_cache_dict():
def test_discovery_cache_dict(mocker):
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
mocker.patch("lumapps.api.utils._get_conn", return_value=_get_conn())
c = _DiscoveryCacheDict
assert c.get('foobar.com') is None
c.set('foobar.com', "bla")
Expand All @@ -33,18 +33,18 @@ def test_discovery_cache_dict():
assert c.get('foobar.com') is None


@patch("lumapps.api.utils.get_conf_db_file", MagicMock(return_value=":memory:"))
def test_discovery_cache_sqlite():
_unset_conn()
def test_discovery_cache_sqlite(mocker):
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
mocker.patch("lumapps.api.utils._get_conn", return_value=_get_conn())
c = _DiscoveryCacheSqlite
assert c.get('foobar.com') is None
c.set('foobar.com', "bla")
assert c.get('foobar.com') == "bla"


@patch("lumapps.api.utils.get_conf_db_file", MagicMock(return_value=":memory:"))
def test_get_set_configs():
_unset_conn()
def test_get_set_configs(mocker):
mocker.patch("lumapps.api.utils.get_conf_db_file", return_value=":memory:")
mocker.patch("lumapps.api.utils._get_conn", return_value=_get_conn())
assert len(get_config_names()) == 0
set_config("foo", "bar")
assert len(get_config_names()) == 1
Expand Down

0 comments on commit 019aa75

Please sign in to comment.