cdxcore 0.1.6__py3-none-any.whl → 0.1.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cdxcore might be problematic. Click here for more details.

tests/test_subdir.py ADDED
@@ -0,0 +1,289 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Tue Apr 14 21:24:52 2020
4
+ @author: hansb
5
+ """
6
+
7
+ import unittest as unittest
8
+
9
+ def import_local():
10
+ """
11
+ In order to be able to run our tests manually from the 'tests' directory
12
+ we force import from the local package.
13
+ We also force reloading all modules to make sure we are not running old code.
14
+ """
15
+ me = "cdxcore"
16
+ import os
17
+ import sys
18
+ cwd = os.getcwd()
19
+ if cwd[-len(me):] == me:
20
+ return
21
+ assert cwd[-5:] == "tests",("Expected current working directory to be in a 'tests' directory", cwd[-5:], "from", cwd)
22
+ assert cwd[-6] in ['/', '\\'],("Expected current working directory 'tests' to be lead by a '\\' or '/'", cwd[-6:], "from", cwd)
23
+ sys.path.insert( 0, cwd[:-6] )
24
+
25
+ # reload modules
26
+ import importlib as imp
27
+ modules = sys.modules.copy()
28
+ for name, mdata in modules.items():
29
+ if name[:len(me)] == me:
30
+ imp.reload(mdata)
31
+ #import_local()
32
+
33
+ """
34
+ Imports
35
+ """
36
+ from cdxcore.subdir import SubDir, CacheMode, VersionError, VersionPresentError
37
+ import numpy as np
38
+
39
+ class Test(unittest.TestCase):
40
+
41
+ def test_subdir(self):
42
+
43
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir", delete_everything=True )
44
+ sub['y'] = 2
45
+ sub.write('z',3)
46
+ sub.write_string('l',"hallo")
47
+ sub.write(['a','b'],[11,22])
48
+
49
+ lst = str(sorted(sub.files()))
50
+ self.assertEqual(lst, "['a', 'b', 'y', 'z']")
51
+ lst = str(sorted(sub.files(ext="txt")))
52
+ self.assertEqual(lst, "['l']")
53
+
54
+ # test naming
55
+ self.assertEqual( str(sub), sub.path + ";*" + sub.ext )
56
+ self.assertEqual( repr(sub), "SubDir(" + sub.path + ";*" + sub.ext + ")" )
57
+
58
+ # read them all back
59
+ self.assertEqual(sub['y'],2)
60
+ self.assertEqual(sub['z'],3)
61
+ self.assertEqual(sub.read_string('l'),"hallo")
62
+ self.assertEqual(sub['a'],11)
63
+ self.assertEqual(sub['b'],22)
64
+ self.assertEqual(sub(['a','b'], None), [11,22])
65
+ self.assertEqual(sub.read(['a','b']), [11,22])
66
+ self.assertEqual(sub[['a','b']], [11,22])
67
+ self.assertEqual(sub(['aaaa','bbbb'], None), [None,None])
68
+
69
+ # test alternatives
70
+ self.assertEqual(sub.read('y'),2)
71
+ self.assertEqual(sub.read('y',None),2)
72
+ self.assertEqual(sub.read('u',None),None)
73
+ self.assertEqual(sub('y',None),2)
74
+ self.assertEqual(sub('u',None),None)
75
+
76
+ # missing objects
77
+ with self.assertRaises(AttributeError):
78
+ print(sub.x2)
79
+ with self.assertRaises(KeyError):
80
+ print(sub['x2'])
81
+ with self.assertRaises(KeyError):
82
+ print(sub.read('x2',raise_on_error=True))
83
+
84
+ # delete & confirm they are gone
85
+ del sub['y']
86
+ sub.delete('z')
87
+
88
+ del sub['x'] # silent
89
+ with self.assertRaises(KeyError):
90
+ sub.delete('x',raise_on_error=True)
91
+
92
+ # sub dirs
93
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir", delete_everything=True )
94
+ s1 = sub("subDir1")
95
+ s2 = sub("subDir2/")
96
+ s3 = SubDir("subDir3/",parent=sub)
97
+ s4 = SubDir("subDir4", parent=sub)
98
+ self.assertEqual(s1.path, sub.path + "subDir1/")
99
+ self.assertEqual(s2.path, sub.path + "subDir2/")
100
+ self.assertEqual(s3.path, sub.path + "subDir3/")
101
+ self.assertEqual(s4.path, sub.path + "subDir4/")
102
+ lst = str(sorted(sub.sub_dirs()))
103
+ self.assertEqual(lst, "[]")
104
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir", delete_everything=True )
105
+ s1 = sub("subDir1", create_directory=True)
106
+ s2 = sub("subDir2/", create_directory=True)
107
+ s3 = SubDir("subDir3/",parent=sub, create_directory=True)
108
+ s4 = SubDir("subDir4", parent=sub, create_directory=True)
109
+ self.assertEqual(s1.path, sub.path + "subDir1/")
110
+ self.assertEqual(s2.path, sub.path + "subDir2/")
111
+ self.assertEqual(s3.path, sub.path + "subDir3/")
112
+ self.assertEqual(s4.path, sub.path + "subDir4/")
113
+ lst = str(sorted(sub.sub_dirs()))
114
+ self.assertEqual(lst, "['subDir1', 'subDir2', 'subDir3', 'subDir4']")
115
+
116
+ sub.delete_all_content()
117
+ self.assertEqual(len(sub.files()),0)
118
+ self.assertEqual(len(sub.sub_dirs()),0)
119
+ sub.delete_everything()
120
+
121
+ # test vectors
122
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir", delete_everything=True )
123
+ sub[['y','z']] = [2,3]
124
+
125
+ self.assertEqual(sub[['y','z']], [2,3])
126
+ with self.assertRaises(KeyError):
127
+ self.assertEqual(sub[['y','z','r']], [2,3,None])
128
+ self.assertEqual(sub.read(['y','r'],default=None), [2,None])
129
+ self.assertEqual(sub(['y','r'],default=None), [2,None])
130
+
131
+ sub.write(['a','b'],1)
132
+ self.assertEqual(sub.read(['a','b']),[1,1])
133
+ with self.assertRaises(ValueError):
134
+ sub.write(['x','y','z'],[1,2])
135
+ sub.delete_everything()
136
+
137
+ # test setting ext
138
+ sub1 = "!/.tmp_test_for_cdxbasics.subdir"
139
+ fd1 = SubDir(sub1).path
140
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir/test;*.bin", delete_everything=True )
141
+ self.assertEqual(sub.path, fd1+"test/")
142
+ fn = sub.full_file_name("file")
143
+ self.assertEqual(fn,fd1+"test/file.bin")
144
+ sub.delete_everything()
145
+
146
+ # test versioning
147
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir")
148
+ version = "1.0.0"
149
+ sub.write("test", "hans", version=version )
150
+ r = sub.read("test", version=version )
151
+ self.assertEqual(r, "hans")
152
+ r = sub.read("test", "nothans", version="2.0.0", delete_wrong_version=False )
153
+ self.assertEqual(r, "nothans")
154
+ self.assertTrue(sub.exists("test"))
155
+ r = sub.is_version("test", version=version )
156
+ self.assertTrue(r)
157
+ r = sub.is_version("test", version="2.0.0" )
158
+ self.assertFalse(r)
159
+ r = sub.read("test", "nothans", version="2.0.0", delete_wrong_version=True )
160
+ self.assertFalse(sub.exists("test"))
161
+ sub.delete_everything()
162
+
163
+ # test JSON
164
+ x = np.ones((10,))
165
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir", fmt=SubDir.JSON_PICKLE )
166
+ sub.write("test", x)
167
+ r = sub.read("test", None, raise_on_error=True)
168
+ r = sub.read("test", None)
169
+ self.assertEqual( list(x), list(r) )
170
+ self.assertEqual(sub.ext, ".jpck")
171
+ sub.delete_everything()
172
+
173
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir", fmt=SubDir.JSON_PLAIN )
174
+ sub.write("test", x)
175
+ r = sub.read("test", None)
176
+ self.assertEqual( list(x), list(r) )
177
+ self.assertEqual(sub.ext, ".json")
178
+ sub.delete_everything()
179
+
180
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir", fmt=SubDir.BLOSC )
181
+ sub.write("test_2", x)
182
+ r = sub.read("test_2", None, raise_on_error=True )
183
+ self.assertEqual( list(x), list(r) )
184
+ self.assertEqual(sub.ext, ".zbsc")
185
+ sub.write("test", x, version="1")
186
+ r = sub.read("test", None, version="1")
187
+ self.assertEqual( list(x), list(r) )
188
+ with self.assertRaises(VersionError):
189
+ r = sub.read("test", None, version="2", raise_on_error=True)
190
+ # wrong version
191
+ sub.delete_everything()
192
+
193
+ sub = SubDir("!/.tmp_test_for_cdxbasics.subdir", fmt=SubDir.GZIP )
194
+ sub.write("test", x)
195
+ r = sub.read("test", None )
196
+ self.assertEqual( list(x), list(r) )
197
+ self.assertEqual(sub.ext, ".pgz")
198
+ sub.write("test", x, version="1")
199
+ r = sub.read("test", None, version="1")
200
+ self.assertEqual( list(x), list(r) )
201
+ with self.assertRaises(VersionError):
202
+ r = sub.read("test", None, version="2", raise_on_error=True)
203
+ # wrong version
204
+ sub.delete_everything()
205
+
206
+ def test_new(self):
207
+
208
+
209
+ subdir = SubDir("my_directory") # relative to current working directory
210
+ subdir = SubDir("./my_directory") # relative to current working directory
211
+ subdir = SubDir("~/my_directory") # relative to home directory
212
+ subdir = SubDir("!/my_directory") # relative to default temp directory
213
+
214
+ subdir = SubDir("my_directory", "~") # relative to home directory
215
+ subdir = SubDir("my_directory", "!") # relative to default temp directory
216
+ subdir = SubDir("my_directory", ".") # relative to current directory
217
+ subdir2 = SubDir("my_directory", subdir) # subdir2 is relative to `subdir`
218
+
219
+ # extension handling
220
+
221
+ subdir = SubDir("!/extension_test", fmt=SubDir.BLOSC )
222
+ self.assertEqual( subdir.ext, ".zbsc" )
223
+ subdir = subdir("", fmt=SubDir.GZIP )
224
+ self.assertEqual( subdir.ext, ".pgz" )
225
+ subdir = subdir("", fmt=SubDir.JSON_PICKLE )
226
+ self.assertEqual( subdir.ext, ".jpck" )
227
+ subdir = subdir("", fmt=SubDir.JSON_PLAIN )
228
+ self.assertEqual( subdir.ext, ".json" )
229
+ subdir = subdir("", fmt=SubDir.PICKLE )
230
+ self.assertEqual( subdir.ext, ".pck" )
231
+
232
+ # version
233
+
234
+ version = "0.1"
235
+ data = [12,34,56]
236
+
237
+ def test_format(fmt, excset=False ):
238
+ subdir.write("test", data, version=version, fmt=fmt )
239
+ _ = subdir.read("test", version=version, fmt=fmt )
240
+ self.assertEqual( data, _ )
241
+ with self.assertRaises(VersionError):
242
+ _ = subdir.read("test", version="x1", fmt=fmt, raise_on_error=True )
243
+
244
+ # no version error
245
+ subdir.write("test", data, version=version, fmt=fmt )
246
+
247
+ if not excset:
248
+ # json_pickle throws no exception...
249
+ _ = subdir.read("test", raise_on_error=True, fmt=fmt )
250
+ else:
251
+ with self.assertRaises(VersionPresentError):
252
+ _ = subdir.read("test", raise_on_error=True, fmt=fmt )
253
+
254
+ test_format( SubDir.PICKLE, True )
255
+ test_format( SubDir.BLOSC, True )
256
+ test_format( SubDir.GZIP, True )
257
+ test_format( SubDir.JSON_PICKLE )
258
+
259
+
260
+
261
+ def test_cache_mode(self):
262
+
263
+ on = CacheMode("on")
264
+ gn = CacheMode("gen")
265
+ of = CacheMode("off")
266
+ cl = CacheMode("clear")
267
+ up = CacheMode("update")
268
+ ro = CacheMode("readonly")
269
+
270
+ with self.assertRaises(KeyError):
271
+ _ = CacheMode("OFF")
272
+
273
+ allc = [on, gn, of, cl, up, ro]
274
+
275
+ self.assertEqual( [ x.is_on for x in allc ], [True, False, False, False, False, False ] )
276
+ self.assertEqual( [ x.is_gen for x in allc ], [False, True, False, False, False, False ] )
277
+ self.assertEqual( [ x.is_off for x in allc ], [False, False, True, False, False, False ] )
278
+ self.assertEqual( [ x.is_clear for x in allc ], [False, False, False, True, False, False ] )
279
+ self.assertEqual( [ x.is_update for x in allc ], [False, False, False, False, True, False ] )
280
+ self.assertEqual( [ x.is_readonly for x in allc ], [False, False, False, False, False, True ] )
281
+
282
+ self.assertEqual( [ x.read for x in allc ], [True, True, False, False, False, True] )
283
+ self.assertEqual( [ x.write for x in allc ], [True, True, False, False, True, False] )
284
+ self.assertEqual( [ x.delete for x in allc ], [False, False, False, True, True, False ] )
285
+ self.assertEqual( [ x.del_incomp for x in allc ], [True, False, False, True, True, False ] )
286
+ if __name__ == '__main__':
287
+ unittest.main()
288
+
289
+