Skip to content

Commit adfa31e

Browse files
committed
fix(Client): remove async/await from class
1 parent c06f18d commit adfa31e

File tree

7 files changed

+90
-51
lines changed

7 files changed

+90
-51
lines changed
Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import os
2-
import json
3-
import aiofiles
2+
from abc import ABCMeta, abstractmethod
43

5-
from .Database import Database
4+
from typing import Tuple
5+
from ..Database import Database
66

77

8-
class Client:
8+
class BaseClient(metaclass=ABCMeta):
99
"""
1010
The Client object contains settings like directory path
1111
This provides
@@ -25,7 +25,7 @@ def __init__(self, root_dir: str = '.'):
2525
else:
2626
os.makedirs(self.root_dir, exist_ok=True)
2727

28-
def _get_database_path(self, database_name: str) -> tuple:
28+
def _get_database_path(self, database_name: str) -> Tuple[str, str]:
2929
""" returns (file_name, file_path) """
3030
file_name = f"{database_name}.json"
3131
file_path = os.path.join(self.root_dir, file_name)
@@ -38,7 +38,21 @@ def _wrapping_database(self, _dict: dict, file_name: str) -> Database:
3838
database.__name__ = file_name
3939
return database
4040

41-
async def create_database(self, database_name: str) -> Database:
41+
def _ensure_get_filepath(self, database_name: str, ensure_exists: bool = True) -> str:
42+
file_name, file_path = self._get_database_path(database_name)
43+
44+
exists = os.path.exists(file_path)
45+
if ensure_exists != exists:
46+
if not exists:
47+
raise FileNotFoundError(
48+
f"Not found json file: {file_path}, please create database first.")
49+
else:
50+
raise FileExistsError(f"Failed to create file on {file_path}")
51+
52+
return file_path
53+
54+
@abstractmethod
55+
def create_database(self, database_name: str) -> Database:
4256
"""
4357
4458
Args:
@@ -50,18 +64,10 @@ async def create_database(self, database_name: str) -> Database:
5064
Returns:
5165
dict: built-in type of dictionary
5266
"""
53-
file_name, file_path = self._get_database_path(database_name)
54-
55-
if os.path.exists(file_path):
56-
raise FileExistsError(f"Failed to create file on {file_path}")
57-
58-
empty_dict = dict()
59-
async with aiofiles.open(file_path, mode='w') as f:
60-
await f.write(json.dumps(empty_dict))
61-
62-
return self._wrapping_database(empty_dict, database_name)
67+
pass
6368

64-
async def get_database(self, database_name: str) -> Database:
69+
@abstractmethod
70+
def get_database(self, database_name: str) -> Database:
6571
"""
6672
6773
Args:
@@ -73,16 +79,7 @@ async def get_database(self, database_name: str) -> Database:
7379
Returns:
7480
dict: built-in type of dictionary
7581
"""
76-
file_name, file_path = self._get_database_path(database_name)
77-
78-
if not os.path.exists(file_path):
79-
raise FileNotFoundError(
80-
f"Not found json file: {file_path}, please create database first.")
81-
82-
async with aiofiles.open(file_path, mode='r') as f:
83-
data = json.loads(await f.read())
84-
85-
return self._wrapping_database(data, database_name)
82+
pass
8683

8784
def remove_database(self, database_name: str) -> None:
8885
"""
@@ -93,10 +90,6 @@ def remove_database(self, database_name: str) -> None:
9390
Raises:
9491
FileNotFoundError: when there is no json file to remove
9592
"""
96-
file_name, file_path = self._get_database_path(database_name)
97-
98-
if not os.path.exists(file_path):
99-
raise FileNotFoundError(
100-
f"Not found json file: {file_path}, please create database first.")
101-
93+
file_path = self._ensure_get_filepath(database_name, ensure_exists=True)
10294
os.remove(file_path)
95+

src/json_as_db/Client/Client.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import json
2+
3+
from ..Database import Database
4+
from .BaseClient import BaseClient
5+
6+
7+
class Client(BaseClient):
8+
"""
9+
The Client object contains settings like directory path
10+
This provides
11+
- to create initial JSON file from database name
12+
- to read database from JSON file
13+
- to remove linked JSON file with database
14+
15+
Args:
16+
dir_path (str): base directory path where file will be in
17+
"""
18+
19+
def __init__(self, *args, **kwargs):
20+
super().__init__(*args, **kwargs)
21+
22+
def create_database(self, database_name: str) -> Database:
23+
file_path = self._ensure_get_filepath(database_name, ensure_exists=False)
24+
25+
empty_dict = dict()
26+
with open(file_path, mode='w') as f:
27+
f.write(json.dumps(empty_dict))
28+
29+
return self._wrapping_database(empty_dict, database_name)
30+
31+
def get_database(self, database_name: str) -> Database:
32+
file_path = self._ensure_get_filepath(database_name, ensure_exists=True)
33+
34+
with open(file_path, mode='r') as f:
35+
data = json.loads(f.read())
36+
37+
print('get_database::data', data)
38+
39+
return self._wrapping_database(data, database_name)
40+
41+
def remove_database(self, database_name: str) -> None:
42+
super().remove_database(database_name)

src/json_as_db/Client/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from .Client import Client
2+
3+
__all__ = [
4+
"Client"
5+
]

src/json_as_db/Database.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def __init__(self, *arg, **kwargs):
6363
'creator': package_name,
6464
'created_at': now,
6565
'updated_at': now,
66+
# self.__data__: dict(*arg, **kwargs),
6667
self.__data__: dict(),
6768
}
6869
self.__dict__ = _override_only_unset(self.__dict__, defaults)

tests/client/test_methods.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import json
33
import pytest
4+
import aiofiles
45

56
from json_as_db import Client
67
from utils import file, logger
@@ -30,9 +31,8 @@ def client() -> Client:
3031
teardown_client()
3132

3233

33-
@pytest.mark.asyncio
34-
async def test_client_create_empty_database(client: Client):
35-
database = await client.create_database('database')
34+
def test_client_create_empty_database(client: Client):
35+
database = client.create_database('database')
3636
assert isinstance(database, dict)
3737
path = os.path.join(DB_DIR, 'database.json')
3838
logger.debug(path)
@@ -43,21 +43,19 @@ async def test_client_create_empty_database(client: Client):
4343
json.load(f)
4444

4545

46-
@pytest.mark.asyncio
47-
async def test_client_create_database(client: Client):
48-
database = await client.create_database('database')
46+
def test_client_create_database(client: Client):
47+
database = client.create_database('database')
4948
assert isinstance(database, dict)
5049
path = os.path.join(DB_DIR, 'database.json')
5150
logger.debug(path)
5251
assert os.path.exists(path)
5352

5453

55-
@pytest.mark.asyncio
56-
async def test_client_create_database_conflict(client: Client):
54+
def test_client_create_database_conflict(client: Client):
5755
path = os.path.join(DB_DIR, 'database.json')
5856
file.touch(path)
5957
try:
60-
database = await client.create_database('database')
58+
database = client.create_database('database')
6159
except FileExistsError:
6260
pass
6361

@@ -78,13 +76,13 @@ async def test_client_get_database():
7876
]
7977
}
8078

81-
with open(path, 'r') as f:
82-
answer = json.load(f)
79+
async with aiofiles.open(path, 'r') as f:
80+
answer = json.loads(await f.read())
8381
logger.debug(answer)
8482

8583
assert expected == answer['data']['jmJKBJBAmGESC3rGbSb62T']
8684

87-
database = await client.get_database('basic')
85+
database = client.get_database('basic')
8886
logger.debug(expected)
8987
logger.debug(database)
9088
assert expected == database['jmJKBJBAmGESC3rGbSb62T']

tests/client/test_usage.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ def teardown_files(root_dir: str):
1919
pass
2020

2121

22-
@pytest.mark.asyncio
23-
async def test_basic_usage():
22+
def test_init_and_remove():
2423
root_dir = os.path.join(CUR_DIR, file.create_dirpath(prefix='test_usage'))
2524

2625
client = Client(root_dir)
27-
database = await client.create_database('my_database')
28-
database2 = await client.get_database('my_database')
26+
db = client.create_database('my_database')
27+
db_get = client.get_database('my_database')
28+
assert db == db_get
2929
client.remove_database('my_database')
3030

3131
teardown_files(root_dir)

tests/database/test_database.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ async def test_db_save():
249249
]
250250

251251
client = Client(temp_dir)
252-
db = await client.create_database('db')
252+
db = client.create_database('db')
253253
logger.debug(f'[before saving] {db}')
254254
db.add(samples)
255255
logger.debug(f'[after saving] {db}')
@@ -265,7 +265,7 @@ async def test_db_save():
265265
saved = json.load(f)
266266
logger.debug(f'[saved] {saved}')
267267

268-
saved = await client.get_database('db')
268+
saved = client.get_database('db')
269269
assert saved == db
270270

271271
file.remove(temp_dir)

0 commit comments

Comments
 (0)