Skip to content

Commit e93aa2d

Browse files
author
hhstore
committed
init project.
1 parent 08087fe commit e93aa2d

18 files changed

+2491
-1
lines changed

.gitignore

+16
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,19 @@ ENV/
8787

8888
# Rope project settings
8989
.ropeproject
90+
91+
92+
# add 2016
93+
.DS_Store
94+
*.pyc
95+
*.pyo
96+
env
97+
env*
98+
dist
99+
*.egg-info
100+
_mailinglist
101+
.tox
102+
.idea/
103+
104+
105+

README.md

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,22 @@
11
# tinydb-annotated
2-
tinydb 是用 Python 实现的一个很精巧的 nosql 数据库. 源码值得注解.
2+
- tinydb 是用 Python 实现的一个很精巧的 nosql 数据库.
3+
- 源码值得注解.
4+
- [tinydb - github](https://github.com/msiemens/tinydb)
5+
6+
7+
## 版本选择:
8+
9+
- 当前最新版本: [v3.2.0](https://github.com/msiemens/tinydb/releases/tag/v3.2.0)
10+
- 代码统计行数: 921(含注释)
11+
- 测试代码行数: 821(含注释)
12+
- 暂时保留.
13+
- 考虑有些测试用例,值得一看.
14+
15+
16+
```bash
17+
18+
-> % find . -name "*.py" | xargs grep -v "^$" | wc -l
19+
921
20+
21+
22+
```

tinydb-3.2.0/tests/__init__.py

Whitespace-only changes.

tinydb-3.2.0/tests/conftest.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import pytest
2+
3+
from tinydb.middlewares import CachingMiddleware
4+
from tinydb.storages import MemoryStorage
5+
from tinydb import TinyDB
6+
7+
8+
@pytest.fixture
9+
def db():
10+
db_ = TinyDB(storage=MemoryStorage)
11+
db_.purge_tables()
12+
db_.insert_multiple({'int': 1, 'char': c} for c in 'abc')
13+
return db_
14+
15+
16+
@pytest.fixture
17+
def storage():
18+
_storage = CachingMiddleware(MemoryStorage)
19+
return _storage() # Initialize MemoryStorage
+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import os
2+
3+
from tinydb import TinyDB
4+
from tinydb.middlewares import CachingMiddleware
5+
from tinydb.storages import MemoryStorage, JSONStorage
6+
7+
if 'xrange' not in dir(__builtins__):
8+
# noinspection PyShadowingBuiltins
9+
xrange = range # Python 3 support
10+
11+
12+
element = {'none': [None, None], 'int': 42, 'float': 3.1415899999999999,
13+
'list': ['LITE', 'RES_ACID', 'SUS_DEXT'],
14+
'dict': {'hp': 13, 'sp': 5},
15+
'bool': [True, False, True, False]}
16+
17+
18+
def test_caching(storage):
19+
# Write contents
20+
storage.write(element)
21+
22+
# Verify contents
23+
assert element == storage.read()
24+
25+
26+
def test_caching_read():
27+
db = TinyDB(storage=CachingMiddleware(MemoryStorage))
28+
assert db.all() == []
29+
30+
31+
def test_caching_write_many(storage):
32+
storage.WRITE_CACHE_SIZE = 3
33+
34+
# Storage should be still empty
35+
assert storage.memory is None
36+
37+
# Write contents
38+
for x in xrange(2):
39+
storage.write(element)
40+
assert storage.memory is None # Still cached
41+
42+
storage.write(element)
43+
44+
# Verify contents: Cache should be emptied and written to storage
45+
assert storage.memory
46+
47+
48+
def test_caching_flush(storage):
49+
# Write contents
50+
storage.write(element)
51+
52+
storage.flush()
53+
54+
# Verify contents: Cache should be emptied and written to storage
55+
assert storage.memory
56+
57+
58+
def test_caching_write(storage):
59+
# Write contents
60+
storage.write(element)
61+
62+
storage.close()
63+
64+
# Verify contents: Cache should be emptied and written to storage
65+
assert storage.storage.memory
66+
67+
68+
def test_nested():
69+
storage = CachingMiddleware(MemoryStorage)
70+
storage() # Initialization
71+
72+
# Write contents
73+
storage.write(element)
74+
75+
# Verify contents
76+
assert element == storage.read()
77+
78+
79+
def test_caching_json_write(tmpdir):
80+
path = str(tmpdir.join('test.db'))
81+
82+
db = TinyDB(path, storage=CachingMiddleware(JSONStorage))
83+
84+
db.insert({'key': 'value'})
85+
86+
db.close()
87+
88+
# Verify database filesize
89+
statinfo = os.stat(path)
90+
assert statinfo.st_size != 0
91+
92+
# Assert JSON file has been closed
93+
assert db._storage._handle.closed
94+
95+
del db
96+
97+
# Repoen database
98+
db = TinyDB(path, storage=CachingMiddleware(JSONStorage))
99+
assert db.all() == [{'key': 'value'}]

tinydb-3.2.0/tests/test_operations.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from tinydb import where
2+
from tinydb.operations import delete, increment, decrement
3+
4+
5+
def test_delete(db):
6+
db.update(delete('int'), where('char') == 'a')
7+
assert 'int' not in db.get(where('char') == 'a')
8+
9+
10+
def test_increment(db):
11+
db.update(increment('int'), where('char') == 'a')
12+
assert db.get(where('char') == 'a')['int'] == 2
13+
14+
15+
def test_decrement(db):
16+
db.update(decrement('int'), where('char') == 'a')
17+
assert db.get(where('char') == 'a')['int'] == 0

0 commit comments

Comments
 (0)