cdxcore 0.1.5__py3-none-any.whl → 0.1.9__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_util.py CHANGED
@@ -9,15 +9,34 @@ import numpy as np
9
9
  import datetime as datetime
10
10
  from zoneinfo import ZoneInfo
11
11
 
12
- """
13
- import importlib as imp
14
- import source.util as _
15
- imp.reload(_)
16
- """
17
- from cdxcore.util import isFunction, isAtomic, isFloat
12
+ def import_local():
13
+ """
14
+ In order to be able to run our tests manually from the 'tests' directory
15
+ we force import from the local package.
16
+ We also force reloading all modules to make sure we are not running old code.
17
+ """
18
+ me = "cdxcore"
19
+ import os
20
+ import sys
21
+ cwd = os.getcwd()
22
+ if cwd[-len(me):] == me:
23
+ return
24
+ assert cwd[-5:] == "tests",("Expected current working directory to be in a 'tests' directory", cwd[-5:], "from", cwd)
25
+ assert cwd[-6] in ['/', '\\'],("Expected current working directory 'tests' to be lead by a '\\' or '/'", cwd[-6:], "from", cwd)
26
+ sys.path.insert( 0, cwd[:-6] )
27
+
28
+ # reload modules
29
+ import importlib as imp
30
+ modules = sys.modules.copy()
31
+ for name, mdata in modules.items():
32
+ if name[:len(me)] == me:
33
+ imp.reload(mdata)
34
+ import_local()
35
+
36
+ from cdxcore.util import is_function, is_atomic, is_float, is_filename
18
37
  from cdxcore.util import fmt, fmt_seconds, fmt_list, fmt_dict, fmt_big_number, fmt_digits, fmt_big_byte_number, fmt_datetime, fmt_date, fmt_time, fmt_timedelta, fmt_filename, DEF_FILE_NAME_MAP
19
38
 
20
- class UtilTest(unittest.TestCase):
39
+ class Test(unittest.TestCase):
21
40
 
22
41
  def test_fmt(self):
23
42
 
@@ -211,20 +230,40 @@ class UtilTest(unittest.TestCase):
211
230
  self.assertEqual( fmt_filename("K:X;Z"), "K;X;Z" )
212
231
  self.assertEqual( fmt_filename("*"), "@" )
213
232
  self.assertEqual( fmt_filename("."), "." ) # technically a valid filename, but a reserved name at that
233
+
234
+ with self.assertRaises(ValueError):
235
+ self.assertEqual( fmt_filename("2*2/4=x", by="wrong"), "2@2_4=x" )
236
+
237
+ BLANK = { '/' : "",
238
+ '\\': "",
239
+ '|' : "",
240
+ ':' : "",
241
+ '>' : "",
242
+ '<' : "",
243
+ '?' : "",
244
+ '*' : "",
245
+ }
246
+ self.assertEqual( fmt_filename("2*2/4=x", by=BLANK), "224=x" )
247
+
248
+ # is_filename
249
+ self.assertTrue( is_filename("hans") )
250
+ self.assertFalse( is_filename("h/ans") )
251
+ self.assertFalse( is_filename("h?ans") )
252
+
214
253
 
215
254
  def test_basics(self):
216
255
 
217
- # isFunction
218
- self.assertFalse( isFunction(1) )
219
- self.assertFalse( isFunction("text") )
220
- self.assertTrue( isFunction(self.test_basics) )
221
- self.assertTrue( isFunction(lambda x: x) )
256
+ # is_function
257
+ self.assertFalse( is_function(1) )
258
+ self.assertFalse( is_function("text") )
259
+ self.assertTrue( is_function(self.test_basics) )
260
+ self.assertTrue( is_function(lambda x: x) )
222
261
 
223
262
  def f(x,y):
224
263
  return x
225
- self.assertTrue( isFunction(f) )
264
+ self.assertTrue( is_function(f) )
226
265
  def ff():
227
- self.assertTrue( isFunction(ff) )
266
+ self.assertTrue( is_function(ff) )
228
267
  ff()
229
268
 
230
269
  class A(object):
@@ -249,79 +288,79 @@ class UtilTest(unittest.TestCase):
249
288
  a = A()
250
289
  b = B()
251
290
  c = C()
252
- self.assertFalse( isFunction(A) )
253
- self.assertFalse( isFunction(B) )
254
- self.assertFalse( isFunction(C) )
255
- self.assertFalse( isFunction(a) )
256
- self.assertFalse( isFunction(b) )
257
- self.assertFalse( isFunction(c) )
258
- self.assertTrue( isFunction(A.__init__) )
259
- self.assertTrue( isFunction(A.f) )
260
- self.assertFalse( isFunction(A.square) )
261
- self.assertTrue( isFunction(A.g) )
262
- self.assertTrue( isFunction(a.__init__) )
263
- self.assertTrue( isFunction(a.f) )
264
- self.assertFalse( isFunction(a.square) ) # <-- properties are not considered as function
265
- self.assertTrue( isFunction(a.g) )
266
- self.assertTrue( isFunction(B.__init__) )
267
- self.assertTrue( isFunction(B.__call__ ) )
268
- self.assertTrue( isFunction(b.__init__) )
269
- self.assertTrue( isFunction(b.__call__ ) )
270
- self.assertFalse( isFunction(b) ) # <-- properties are not considered as function
291
+ self.assertFalse( is_function(A) )
292
+ self.assertFalse( is_function(B) )
293
+ self.assertFalse( is_function(C) )
294
+ self.assertFalse( is_function(a) )
295
+ self.assertFalse( is_function(b) )
296
+ self.assertFalse( is_function(c) )
297
+ self.assertTrue( is_function(A.__init__) )
298
+ self.assertTrue( is_function(A.f) )
299
+ self.assertFalse( is_function(A.square) )
300
+ self.assertTrue( is_function(A.g) )
301
+ self.assertTrue( is_function(a.__init__) )
302
+ self.assertTrue( is_function(a.f) )
303
+ self.assertFalse( is_function(a.square) ) # <-- properties are not considered as function
304
+ self.assertTrue( is_function(a.g) )
305
+ self.assertTrue( is_function(B.__init__) )
306
+ self.assertTrue( is_function(B.__call__ ) )
307
+ self.assertTrue( is_function(b.__init__) )
308
+ self.assertTrue( is_function(b.__call__ ) )
309
+ self.assertFalse( is_function(b) ) # <-- properties are not considered as function
271
310
  self.assertTrue( callable(b) )
272
- self.assertFalse( isFunction(c) )
273
- self.assertTrue( isFunction(i for i in c) )
274
- self.assertTrue( isFunction(lambda x : x*x) )
311
+ self.assertFalse( is_function(c) )
312
+ self.assertTrue( is_function(i for i in c) )
313
+ self.assertTrue( is_function(lambda x : x*x) )
275
314
 
276
- # isAtomic
277
- self.assertTrue( isAtomic(0) )
278
- self.assertTrue( isAtomic(0.1) )
279
- self.assertTrue( isAtomic("c") )
280
- self.assertFalse( isAtomic(b'\x02') )
281
- self.assertTrue( isAtomic("text") )
282
- self.assertFalse( isAtomic(complex(0.,-1)) )
283
- self.assertTrue( isAtomic(True) )
284
- self.assertTrue( isAtomic(1==0) )
285
- self.assertTrue( isAtomic(datetime.date(year=2005, month=2, day=1)) )
286
- self.assertFalse( isAtomic(datetime.time(hour=4)) )
287
- self.assertFalse( isAtomic(datetime.datetime(year=2005, month=2, day=1, hour=4)) )
288
- self.assertTrue( isAtomic(1==0) )
289
- self.assertTrue( isAtomic(1==0) )
290
- self.assertFalse( isAtomic(A) )
291
- self.assertFalse( isAtomic(a) )
292
- self.assertFalse( isAtomic(f) )
293
- self.assertFalse( isAtomic([1,2]) )
294
- self.assertFalse( isAtomic([]) )
295
- self.assertFalse( isAtomic({}) )
296
- self.assertFalse( isAtomic({'x':2}) )
297
- self.assertFalse( isAtomic({'x':2}) )
315
+ # is_atomic
316
+ self.assertTrue( is_atomic(0) )
317
+ self.assertTrue( is_atomic(0.1) )
318
+ self.assertTrue( is_atomic("c") )
319
+ self.assertFalse( is_atomic(b'\x02') )
320
+ self.assertTrue( is_atomic("text") )
321
+ self.assertFalse( is_atomic(complex(0.,-1)) )
322
+ self.assertTrue( is_atomic(True) )
323
+ self.assertTrue( is_atomic(1==0) )
324
+ self.assertTrue( is_atomic(datetime.date(year=2005, month=2, day=1)) )
325
+ self.assertFalse( is_atomic(datetime.time(hour=4)) )
326
+ self.assertFalse( is_atomic(datetime.datetime(year=2005, month=2, day=1, hour=4)) )
327
+ self.assertTrue( is_atomic(1==0) )
328
+ self.assertTrue( is_atomic(1==0) )
329
+ self.assertFalse( is_atomic(A) )
330
+ self.assertFalse( is_atomic(a) )
331
+ self.assertFalse( is_atomic(f) )
332
+ self.assertFalse( is_atomic([1,2]) )
333
+ self.assertFalse( is_atomic([]) )
334
+ self.assertFalse( is_atomic({}) )
335
+ self.assertFalse( is_atomic({'x':2}) )
336
+ self.assertFalse( is_atomic({'x':2}) )
298
337
 
299
- self.assertEqual( isAtomic(np.int_(0)), True )
300
- self.assertEqual( isAtomic(np.int32(0)), True )
301
- self.assertEqual( isAtomic(np.int64(0)), True )
302
- self.assertEqual( isAtomic(np.complex128(0)), True )
303
- self.assertEqual( isAtomic(np.datetime64()), True )
304
- self.assertEqual( isAtomic(np.timedelta64()), True )
305
- self.assertEqual( isAtomic(np.ushort(0)), True )
306
- self.assertEqual( isAtomic(np.float32(0)), True )
307
- self.assertEqual( isAtomic(np.float64(0)), True )
308
- self.assertEqual( isAtomic(np.ulonglong(0)), True )
309
- self.assertEqual( isAtomic(np.longdouble(0)), True )
310
- self.assertEqual( isAtomic(np.half(0)), True )
338
+ self.assertEqual( is_atomic(np.int_(0)), True )
339
+ self.assertEqual( is_atomic(np.int32(0)), True )
340
+ self.assertEqual( is_atomic(np.int64(0)), True )
341
+ self.assertEqual( is_atomic(np.complex128(0)), True )
342
+ self.assertEqual( is_atomic(np.datetime64()), True )
343
+ self.assertEqual( is_atomic(np.timedelta64()), True )
344
+ self.assertEqual( is_atomic(np.ushort(0)), True )
345
+ self.assertEqual( is_atomic(np.float32(0)), True )
346
+ self.assertEqual( is_atomic(np.float64(0)), True )
347
+ self.assertEqual( is_atomic(np.ulonglong(0)), True )
348
+ self.assertEqual( is_atomic(np.longdouble(0)), True )
349
+ self.assertEqual( is_atomic(np.half(0)), True )
311
350
 
312
- # isFloat
313
- self.assertFalse( isFloat(0) )
314
- self.assertTrue( isFloat(0.1) )
315
- self.assertFalse( isFloat(1==2) )
316
- self.assertFalse( isFloat("0.1") )
317
- self.assertFalse( isFloat(complex(0.,-1.)) )
318
- self.assertTrue( isFloat(np.float16(0.1)) )
319
- self.assertTrue( isFloat(np.float32(0.1)) )
320
- self.assertTrue( isFloat(np.float64(0.1)) )
321
- self.assertFalse( isFloat(np.int16(0.1)) )
322
- self.assertFalse( isFloat(np.int32(0.1)) )
323
- self.assertFalse( isFloat(np.int64(0.1)) )
324
- self.assertFalse( isFloat(np.complex64(0.1)) )
351
+ # is_float
352
+ self.assertFalse( is_float(0) )
353
+ self.assertTrue( is_float(0.1) )
354
+ self.assertFalse( is_float(1==2) )
355
+ self.assertFalse( is_float("0.1") )
356
+ self.assertFalse( is_float(complex(0.,-1.)) )
357
+ self.assertTrue( is_float(np.float16(0.1)) )
358
+ self.assertTrue( is_float(np.float32(0.1)) )
359
+ self.assertTrue( is_float(np.float64(0.1)) )
360
+ self.assertFalse( is_float(np.int16(0.1)) )
361
+ self.assertFalse( is_float(np.int32(0.1)) )
362
+ self.assertFalse( is_float(np.int64(0.1)) )
363
+ self.assertFalse( is_float(np.complex64(0.1)) )
325
364
 
326
365
  if __name__ == '__main__':
327
366
  unittest.main()
tests/test_verbose.py ADDED
@@ -0,0 +1,119 @@
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
+ print("Reloaded", name)
32
+ import_local()
33
+
34
+ from cdxcore.verbose import Context
35
+ from cdxcore.uniquehash import unique_hash32 as unique_hash
36
+
37
+ class Test(unittest.TestCase):
38
+
39
+ def test_verbose(self):
40
+
41
+ class Channel(object):
42
+ def __init__(self):
43
+ self.track = []
44
+ def __call__(self, msg : str, flush : bool ):
45
+ self.track.append( (msg, flush) )
46
+ def __str__(self):
47
+ return str( self.track )
48
+
49
+ def f_sub( num=3, context = Context.quiet ):
50
+ context.report(0, "Entering loop")
51
+ for i in range(num):
52
+ context.report(1, "Number %ld", i)
53
+
54
+ def f_main( context = Context.quiet ):
55
+ context.write( "First step" )
56
+ # ... do something
57
+ context.report( 1, "Intermediate step 1" )
58
+ context.report( 1, "Intermediate step 2\nwith newlines" )
59
+ # ... do something
60
+ f_sub( context=context(1) )
61
+ # ... do something
62
+ context.write( "Final step" )
63
+
64
+ channel = Channel()
65
+ context = Context(1,channel=channel)
66
+ f_main(context)
67
+ self.assertEqual( str(channel), r"[('00: First step\n', True), ('01: Intermediate step 1\n', True), ('01: Intermediate step 2\n01: with newlines\n', True), ('01: Entering loop\n', True), ('00: Final step\n', True)]")
68
+
69
+ channel = Channel()
70
+ context = Context(2,channel=channel)
71
+ f_main(context)
72
+ self.assertEqual( str(channel), r"[('00: First step\n', True), ('01: Intermediate step 1\n', True), ('01: Intermediate step 2\n01: with newlines\n', True), ('01: Entering loop\n', True), ('02: Number 0\n', True), ('02: Number 1\n', True), ('02: Number 2\n', True), ('00: Final step\n', True)]")
73
+
74
+ channel = Channel()
75
+ context = Context("all",channel=channel)
76
+ f_main(context)
77
+ self.assertEqual( str(channel), r"[('00: First step\n', True), ('01: Intermediate step 1\n', True), ('01: Intermediate step 2\n01: with newlines\n', True), ('01: Entering loop\n', True), ('02: Number 0\n', True), ('02: Number 1\n', True), ('02: Number 2\n', True), ('00: Final step\n', True)]")
78
+
79
+ channel = Channel()
80
+ context = Context(None,channel=channel)
81
+ f_main(context)
82
+ self.assertEqual( str(channel), r"[('00: First step\n', True), ('01: Intermediate step 1\n', True), ('01: Intermediate step 2\n01: with newlines\n', True), ('01: Entering loop\n', True), ('02: Number 0\n', True), ('02: Number 1\n', True), ('02: Number 2\n', True), ('00: Final step\n', True)]")
83
+
84
+ channel = Channel()
85
+ context = Context("quiet",channel=channel)
86
+ f_main(context)
87
+ self.assertEqual( str(channel), r"[]")
88
+
89
+ verbose1 = Context(1)
90
+ verbose1.level = 2
91
+ verbose2 = Context(2,indent=3)
92
+ verbose2.level = 3
93
+ self.assertEqual( unique_hash( verbose1 ), unique_hash( verbose2 ) )
94
+
95
+ verbose = Context("all")
96
+ self.assertEqual( verbose.fmt(0,"test {x}", x=1), "00: test 1")
97
+ self.assertEqual( verbose.fmt(1,"test %(x)d", x=1), "01: test 1")
98
+ self.assertEqual( verbose.fmt(2,"test %d", 1), "02: test 1")
99
+ verbose = Context(1)
100
+ self.assertEqual( verbose.fmt(0,"test {x}", x=1), "00: test 1")
101
+ self.assertEqual( verbose.fmt(1,"test %(x)d", x=1), "01: test 1")
102
+ self.assertEqual( verbose.fmt(2,"test %d", 1), None)
103
+ verbose = Context(1)
104
+ x = 1
105
+ self.assertEqual( verbose.fmt(0,lambda : f"test {x}"), "00: test 1")
106
+
107
+ def f():
108
+ raise RuntimeError("I should not happen")
109
+ verbose.fmt(2,f)
110
+ def f():
111
+ raise RuntimeError("I should happen")
112
+ with self.assertRaises(RuntimeError):
113
+ verbose.fmt(1,f)
114
+
115
+
116
+ if __name__ == '__main__':
117
+ unittest.main()
118
+
119
+
tests/test_version.py ADDED
@@ -0,0 +1,153 @@
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.version import version
37
+
38
+ @version("1.0")
39
+ def f(x):
40
+ return x
41
+ @version("2.0", dependencies=[f])
42
+ def g1(x):
43
+ return f(x)
44
+ @version("2.1", dependencies=[f])
45
+ def g2(x):
46
+ return f(x)
47
+ class A(object):
48
+ @version("2.2")
49
+ def r1(self, x):
50
+ return x
51
+ @version("2.3", dependencies=['A.r1', 'g1'])
52
+ def r2(self, x):
53
+ return x
54
+ @version("XV")
55
+ class B(object):
56
+ def f(self, x):
57
+ return x
58
+ @version("1")
59
+ def t1(self):
60
+ return
61
+ @version("2", auto_class=True)
62
+ def t2(self):
63
+ return
64
+ @version("3", auto_class=False)
65
+ def t3(self):
66
+ return
67
+
68
+ @version("3.0", dependencies=['g1', g2, 'A.r1', A.r2, B])
69
+ def h(x,y):
70
+ a = A()
71
+ return g1(x)+g2(y)+a.r1(x)+a.r2(y)
72
+
73
+ @version("0.0.1")
74
+ class baseA(object):
75
+ pass
76
+ @version("0.0.2")
77
+ class baseB(baseA):
78
+ pass
79
+ @version("0.0.3", auto_class=False)
80
+ class baseC(baseA):
81
+ pass
82
+
83
+ bA = baseA()
84
+
85
+ @version("2", dependencies=[bA]) # <- actually not a great use case to make a function dependent on an object (instead of the class)
86
+ def baf(x):
87
+ return x
88
+
89
+ class AA(object):
90
+ def __init__(self, x=2):
91
+ self.x = x
92
+ @version(version="0.4.1")
93
+ def h(self, y):
94
+ return self.x*y
95
+
96
+ @version(version="0.3.0")
97
+ def Ah(x,y):
98
+ return x+y
99
+
100
+ @version(version="0.0.2", dependencies=[Ah])
101
+ def Af(x,y):
102
+ return Ah(y,x)
103
+
104
+ @version(version="0.0.1", dependencies=["Af", AA.h])
105
+ def Ag(x,z):
106
+ a = AA()
107
+ return Af(x*2,z)+a.h(z)
108
+
109
+ class Test(unittest.TestCase):
110
+
111
+ def test_version(self):
112
+ # test dependency
113
+
114
+ a = A()
115
+ b = B()
116
+ bA = baseA()
117
+ bB = baseB()
118
+ bC = baseC()
119
+
120
+ self.assertEqual( h.version.input, "3.0" )
121
+ self.assertEqual( h.version.full, "3.0 { A.r1: 2.2, A.r2: 2.3 { A.r1: 2.2, g1: 2.0 { f: 1.0 } }, B: XV, g1: 2.0 { f: 1.0 }, g2: 2.1 { f: 1.0 } }" )
122
+ self.assertEqual( h.version.unique_id48, "3.0 { A.r1: 2.2, A.r2: 2.3 { A.r1: 2.2, 2695aabd" )
123
+ self.assertEqual( h.version.is_dependent( g2 ), "2.1" )
124
+ self.assertEqual( h.version.is_dependent( "g2" ), "2.1" )
125
+ self.assertEqual( h.version.is_dependent( f ), "1.0" )
126
+ self.assertEqual( h.version.is_dependent( "f" ), "1.0" )
127
+ self.assertEqual( h.version.is_dependent( B ), "XV" )
128
+ self.assertEqual( h.version.is_dependent( b ), "XV" )
129
+ self.assertEqual( h.version.is_dependent( A.r2 ), "2.3" )
130
+ self.assertEqual( h.version.is_dependent( a.r2 ), "2.3" )
131
+ self.assertEqual( b.t1.version.full, "1 { B: XV }" )
132
+ self.assertEqual( b.t2.version.full, "2 { B: XV }" )
133
+ self.assertEqual( b.t3.version.full, "3" )
134
+ self.assertEqual( baf.version.full, "2 { baseA: 0.0.1 }" )
135
+
136
+ self.assertEqual( baseA.version.full, "0.0.1")
137
+ self.assertEqual( baseB.version.full, "0.0.2 { baseA: 0.0.1 }")
138
+ self.assertEqual( baseC.version.full, "0.0.3")
139
+ self.assertEqual( bA.version.full, "0.0.1")
140
+ self.assertEqual( bB.version.full, "0.0.2 { baseA: 0.0.1 }")
141
+ self.assertEqual( bC.version.full, "0.0.3")
142
+
143
+ Ag(1,2)
144
+
145
+ self.assertEqual( Ag.version.input, "0.0.1")
146
+ self.assertEqual( Ag.version.full, "0.0.1 { AA.h: 0.4.1, Af: 0.0.2 { Ah: 0.3.0 } }")
147
+ self.assertEqual( Ag.version.unique_id48, "0.0.1 { AA.h: 0.4.1, Af: 0.0.2 { Ah: 0.3.0 } }")
148
+ self.assertEqual( Ag.version.dependencies,('0.0.1', {'AA.h': '0.4.1', 'Af': ('0.0.2', {'Ah': '0.3.0'})}) )
149
+
150
+ if __name__ == '__main__':
151
+ unittest.main()
152
+
153
+
up/git_message.py CHANGED
@@ -2,6 +2,6 @@
2
2
  Produce message with cdxbasics code
3
3
  """
4
4
 
5
- import cdxbasics as cdxbasics
6
- print("Code base %s" % cdxbasics.__version__)
5
+ import cdxcore as cdxcore
6
+ print("Code base %s" % cdxcore.__version__)
7
7