datastock 0.0.42__py3-none-any.whl → 0.0.44__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.
datastock/_class0.py CHANGED
@@ -65,7 +65,7 @@ class DataStock0(object):
65
65
  )
66
66
 
67
67
  @classmethod
68
- def from_dict(cls, din=None, isflat=None, sep=None):
68
+ def from_dict(cls, din=None, isflat=None, sep=None, obj=None):
69
69
  """ Populate the instances attributes using an input dict
70
70
 
71
71
  The input dict must be properly formatted
@@ -85,7 +85,9 @@ class DataStock0(object):
85
85
  # ---------------------
86
86
  # Instanciate and populate
87
87
 
88
- obj = cls()
88
+ if obj is None:
89
+ obj = cls()
90
+
89
91
  for k0 in din.keys():
90
92
  if k0 == '_ddef':
91
93
  if 'dobj' not in din[k0]['params'].keys():
@@ -161,11 +163,13 @@ class DataStock0(object):
161
163
 
162
164
  def save(
163
165
  self,
166
+ pfe=None,
164
167
  path=None,
165
168
  name=None,
166
169
  sep=None,
167
- verb=True,
170
+ overwrite=None,
168
171
  return_pfe=False,
172
+ verb=True,
169
173
  ):
170
174
 
171
175
  lsep = [';', '&', '?', '#', ',', '~', '.', '-', '_']
@@ -191,9 +195,11 @@ class DataStock0(object):
191
195
  asarray=True,
192
196
  returnas='blended',
193
197
  ),
198
+ pfe=pfe,
194
199
  sep=sep,
195
200
  path=path,
196
201
  name=name,
202
+ overwrite=overwrite,
197
203
  clsname=self.__class__.__name__,
198
204
  return_pfe=return_pfe,
199
205
  verb=verb,
datastock/_class1.py CHANGED
@@ -369,8 +369,8 @@ class DataStock1(DataStock0):
369
369
  ###########
370
370
 
371
371
  @classmethod
372
- def from_dict(cls, din=None, sep=None):
373
- obj = super().from_dict(din=din, sep=sep)
372
+ def from_dict(cls, din=None, sep=None, obj=None):
373
+ obj = super().from_dict(din=din, sep=sep, obj=obj)
374
374
  obj.update()
375
375
  return obj
376
376
 
datastock/_saveload.py CHANGED
@@ -26,10 +26,12 @@ _KEY_SEP = '--sep--'
26
26
 
27
27
  def save(
28
28
  dflat=None,
29
+ pfe=None,
29
30
  sep=None,
30
31
  name=None,
31
32
  path=None,
32
33
  clsname=None,
34
+ overwrite=None,
33
35
  return_pfe=None,
34
36
  verb=None,
35
37
  ):
@@ -37,30 +39,97 @@ def save(
37
39
 
38
40
  # ------------
39
41
  # check inputs
42
+ # ------------
40
43
 
41
- # path
42
- path = _generic_check._check_var(
43
- path, 'path',
44
- default=os.path.abspath('./'),
45
- types=str,
46
- )
47
- path = os.path.abspath(path)
48
- if not os.path.isdir(path):
49
- msg = f"Arg path must be a valid path!\nProvided: {path}"
44
+ # ------------------
45
+ # pfe vs path/name
46
+
47
+ lc = [
48
+ pfe is not None,
49
+ path is not None or name is not None,
50
+ ]
51
+
52
+ if np.sum(lc) > 1:
53
+ msg = (
54
+ "Saving, please provide {pfe} xor {path and/or name}!\n"
55
+ f"\t- path: {path}\n"
56
+ f"\t- name: {name}\n"
57
+ f"\t- pfe: {pfe}\n"
58
+ )
50
59
  raise Exception(msg)
51
60
 
52
- # clsname
53
- clsname = _generic_check._check_var(
54
- clsname, 'clsname',
55
- default='DataCollection',
56
- types=str,
57
- )
61
+ # ------------------
62
+ # pfe vs path/name
63
+
64
+ if lc[0]:
65
+ if not isinstance(pfe, str):
66
+ msg = (
67
+ "Arg pfe must be a str ponting to a file!\n"
68
+ f"Provided: {pfe}\n"
69
+ )
70
+ raise Exception(msg)
71
+
72
+ sdir, sfile = os.path.split(pfe)
73
+ if sdir == '':
74
+ sdir = os.path.asbpath('.')
75
+
76
+ # check path
77
+ if not os.path.isdir(sdir):
78
+ msg = (
79
+ "Arg pfe seems to have a non-valid path!\n"
80
+ "Provided: {sdir}\n"
81
+ )
82
+ raise Exception(msg)
83
+
84
+ # check file name
85
+ if not sfile.endswith('.npz'):
86
+ sfile = f"{sfile}.npz"
87
+
88
+ # re-assemble
89
+ pfe = os.path.join(sdir, sfile)
90
+
91
+ else:
92
+ # path
93
+ path = _generic_check._check_var(
94
+ path, 'path',
95
+ default=os.path.abspath('./'),
96
+ types=str,
97
+ )
98
+ path = os.path.abspath(path)
99
+ if not os.path.isdir(path):
100
+ msg = f"Arg path must be a valid path!\nProvided: {path}"
101
+ raise Exception(msg)
102
+
103
+ # clsname
104
+ clsname = _generic_check._check_var(
105
+ clsname, 'clsname',
106
+ default='DataCollection',
107
+ types=str,
108
+ )
109
+
110
+ # name
111
+ name = _generic_check._check_var(
112
+ name, 'name',
113
+ default='name',
114
+ types=str,
115
+ )
116
+
117
+ # set automatic name
118
+ user = getpass.getuser()
119
+ dt = dtm.datetime.now().strftime("%Y%m%d-%H%M%S")
120
+ name = f'{clsname}_{name}_{user}_{dt}.npz'
121
+
122
+ # pfe
123
+ pfe = os.path.join(path, name)
58
124
 
59
- # name
60
- name = _generic_check._check_var(
61
- name, 'name',
62
- default='name',
63
- types=str,
125
+ # ------------------
126
+ # options
127
+
128
+ # overwrite
129
+ overwrite = _generic_check._check_var(
130
+ overwrite, 'overwrite',
131
+ default=False,
132
+ types=bool,
64
133
  )
65
134
 
66
135
  # verb
@@ -79,24 +148,44 @@ def save(
79
148
 
80
149
  # ----------------------
81
150
  # save / print / return
82
-
83
- user = getpass.getuser()
84
- dt = dtm.datetime.now().strftime("%Y%m%d-%H%M%S")
85
- name = f'{clsname}_{name}_{user}_{dt}.npz'
151
+ # ----------------------
86
152
 
87
153
  # add sep
88
154
  dflat[_KEY_SEP] = sep
89
155
 
156
+ # -----------------
157
+ # check vs existing
158
+
159
+ if os.path.isfile(pfe):
160
+ if overwrite is True:
161
+ msg = (
162
+ "Overwriting existing file:\n"
163
+ f"\t{pfe}"
164
+ )
165
+ warnings.warn(msg)
166
+ else:
167
+ msg = (
168
+ "File already existing!\n"
169
+ "\t=> use overwrite = True to overwrite\n"
170
+ f"\t{pfe}"
171
+ )
172
+ raise Exception(msg)
173
+
174
+ # --------
90
175
  # save
91
- pfe = os.path.join(path, name)
92
- np.savez(pfe, **dflat)
93
176
 
177
+ np.savez(pfe, **dflat)
178
+
179
+ # -------
94
180
  # print
181
+
95
182
  if verb:
96
- msg = f"Saved in:\n\t{pfe}"
183
+ msg = f"\nSaved in:\n\t{pfe}\n"
97
184
  print(msg)
98
185
 
186
+ # -------
99
187
  # return
188
+
100
189
  if return_pfe is True:
101
190
  return pfe
102
191
 
@@ -110,6 +199,7 @@ def save(
110
199
  def load(
111
200
  pfe=None,
112
201
  cls=None,
202
+ coll=None,
113
203
  allow_pickle=None,
114
204
  sep=None,
115
205
  verb=None,
@@ -117,16 +207,24 @@ def load(
117
207
 
118
208
  # -------------
119
209
  # check inputs
210
+ # -------------
120
211
 
212
+ # ---------
121
213
  # pfe
214
+
122
215
  if not os.path.isfile(pfe):
123
216
  msg = f"Arg pfe must be a valid path to a file!\n\t- Provided: {pfe}"
124
217
  raise Exception(msg)
125
218
 
126
- # cls
127
- if cls is None:
128
- from ._class import DataStock
129
- cls = DataStock
219
+ # --------------
220
+ # cls vs coll
221
+
222
+ if coll is None:
223
+ if cls is None:
224
+ from ._class import DataStock
225
+ cls = DataStock
226
+ else:
227
+ cls = coll.__class__
130
228
 
131
229
  if not (type(cls) is type and hasattr(cls, 'from_dict')):
132
230
  msg = (
@@ -135,14 +233,18 @@ def load(
135
233
  )
136
234
  raise Exception(msg)
137
235
 
236
+ # ------------
138
237
  # allow_pickle
238
+
139
239
  allow_pickle = _generic_check._check_var(
140
240
  allow_pickle, 'allow_pickle',
141
241
  default=True,
142
242
  types=bool,
143
243
  )
144
244
 
245
+ # -------
145
246
  # verb
247
+
146
248
  verb = _generic_check._check_var(
147
249
  verb, 'verb',
148
250
  default=True,
@@ -151,11 +253,13 @@ def load(
151
253
 
152
254
  # --------------
153
255
  # load flat dict
256
+ # --------------
154
257
 
155
258
  dflat = dict(np.load(pfe, allow_pickle=allow_pickle))
156
259
 
157
260
  # ------------------------------
158
261
  # load sep from file if exists
262
+ # ------------------------------
159
263
 
160
264
  if _KEY_SEP in dflat.keys():
161
265
  # new
@@ -167,6 +271,7 @@ def load(
167
271
 
168
272
  # ----------
169
273
  # reshape
274
+ # ----------
170
275
 
171
276
  dout = {}
172
277
  for k0, v0 in dflat.items():
@@ -221,14 +326,19 @@ def load(
221
326
 
222
327
  # -----------
223
328
  # Instanciate
329
+ # -----------
224
330
 
225
- obj = cls.from_dict(dout)
331
+ coll = cls.from_dict(dout, obj=coll)
332
+
333
+ # -----------
334
+ # verb
335
+ # -----------
226
336
 
227
337
  if verb:
228
338
  msg = f"Loaded from\n\t{pfe}"
229
339
  print(msg)
230
340
 
231
- return obj
341
+ return coll
232
342
 
233
343
 
234
344
  # #################################################################
@@ -602,11 +602,26 @@ class Test02_Manipulate():
602
602
  def test22_get_nbytes(self):
603
603
  nb, dnb = self.st.get_nbytes()
604
604
 
605
- def test23_saveload(self, verb=False):
605
+ def test23_save_pfe(self, verb=False):
606
+ pfe = os.path.join(_PATH_OUTPUT, 'testsave.npz')
607
+ self.st.save(pfe=pfe, return_pfe=False)
608
+ os.remove(pfe)
609
+
610
+ def test24_saveload(self, verb=False):
606
611
  pfe = self.st.save(path=_PATH_OUTPUT, verb=verb, return_pfe=True)
607
612
  st2 = load(pfe, verb=verb)
608
613
  # Just to check the loaded version works fine
609
614
  msg = st2.__eq__(self.st, returnas=str)
615
+ if msg is not True:
616
+ raise Exception(msg)
617
+ os.remove(pfe)
618
+
619
+ def test25_saveload_coll(self, verb=False):
620
+ pfe = self.st.save(path=_PATH_OUTPUT, verb=verb, return_pfe=True)
621
+ st = DataStock()
622
+ st2 = load(pfe, coll=st, verb=verb)
623
+ # Just to check the loaded version works fine
624
+ msg = st2.__eq__(self.st, returnas=str)
610
625
  if msg is not True:
611
626
  raise Exception(msg)
612
627
  os.remove(pfe)
datastock/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  # Do not edit, pipeline versioning governed by git tags!
2
- __version__ = '0.0.42'
2
+ __version__ = '0.0.44'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datastock
3
- Version: 0.0.42
3
+ Version: 0.0.44
4
4
  Summary: A python library for generic class and data handling
5
5
  Home-page: https://github.com/ToFuProject/datastock
6
6
  Author: Didier VEZINET
@@ -2,8 +2,8 @@ _updateversion.py,sha256=OR6OJJozaHWzu7NWjKu5ERi0IyYqR61KrWvzf7kfoto,951
2
2
  datastock/_DataCollection_utils.py,sha256=hHf6HvGKMmM-psx3fj9QcY1TEmKrAtTdkRokH7SFqoo,7143
3
3
  datastock/__init__.py,sha256=i_Ijl-AM07n4zN52frWfbeGN1iB6v4e5oLzTuVIh_oM,217
4
4
  datastock/_class.py,sha256=Az9PS3aSskiPMb1ekt78Y2ynBujYVc_cDjJxW9xH9g4,47
5
- datastock/_class0.py,sha256=2mju4Larmj1Sv5ZMuqPTLvCY-BajhGD3qG6QBalTnRY,5893
6
- datastock/_class1.py,sha256=8R4zM6p7b62FJuoI7Gyik4_tRCUFi6aF4oaMimiOoFE,28726
5
+ datastock/_class0.py,sha256=je4ckTynK8lEGBa7OSURYZZ_-3XjzAtf6SazN3b-f5k,6028
6
+ datastock/_class1.py,sha256=WlI666OOG8x-qtfNRcwP7aoCs7TDfvk3yKzVsHShO7c,28745
7
7
  datastock/_class1_binning.py,sha256=LWHv2LIfgZfSFWYwqdcN0DKpNe6q7Go3sxfcJqmzTrI,28085
8
8
  datastock/_class1_check.py,sha256=0azV7ftoAWsqTMEYbGQ_luJi95Px-pBif_vOug3W8Zg,50978
9
9
  datastock/_class1_compute.py,sha256=yHdG0afYc_YtjpR6RvMh7SeRtWEyuHZ5y9VOPRIYVDo,31671
@@ -30,13 +30,13 @@ datastock/_plot_as_profile1d.py,sha256=ebOrzcV1m197Ua1CE04EV6mno_LryrumCpwGcrrDZ
30
30
  datastock/_plot_correlations.py,sha256=ITOypu_AEoKl0ihxocV-JVTXIHqut6p9TfG-xZmQysc,10175
31
31
  datastock/_plot_old_backup.py,sha256=XixTi2CiihKjtQP0TRycH0b25caWN1m35DgpsDeiWZE,21729
32
32
  datastock/_plot_text.py,sha256=wQPqjfpLyIioS2JeOt3E9C9HgYUJ49YEoOgRuKYvAR8,3143
33
- datastock/_saveload.py,sha256=NdOykvmeCaPhpk0EF5WQezYzpuZM2Ul101Nqc4I3dnY,11729
34
- datastock/version.py,sha256=eImSu2FfqgzmD49HEFW5QfRn9NBAw_itX40-C-Zj7V0,80
33
+ datastock/_saveload.py,sha256=1vAMp27KfqXbo5b_Pi8hJux0stsHq6dO5vy8k1d4_iA,14141
34
+ datastock/version.py,sha256=EX8urNJ1ILJpXuRtvcV0i0MWqPQj1IxD_snvo_plkfg,80
35
35
  datastock/tests/__init__.py,sha256=teOo2xP0IO7PQMuMDmum61XVHe2TuxW3BiHiL73X8jQ,35
36
- datastock/tests/test_01_DataStock.py,sha256=QJSmrVXD6wX-plfrFdLyZou20IYZGAKzartSi84BfC0,16982
36
+ datastock/tests/test_01_DataStock.py,sha256=tGVJiCVjWT5oR4DlFopbcKMxi2cpCbBvdBDRc0WV1KU,17532
37
37
  datastock/tests/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- datastock-0.0.42.dist-info/LICENSE,sha256=V1uXqi3vxR0QhB4QdFyjkynl6jpN4wZmlB5EMYJk0NM,1068
39
- datastock-0.0.42.dist-info/METADATA,sha256=VaEXXEm0YfQQmm_ccn37rA13jkzppnLnTJdfc0oi6qQ,8660
40
- datastock-0.0.42.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
41
- datastock-0.0.42.dist-info/top_level.txt,sha256=BzJsLLK_zZw13WQCoMhC74qWVKalnVCjBxdPXvJn7HQ,25
42
- datastock-0.0.42.dist-info/RECORD,,
38
+ datastock-0.0.44.dist-info/LICENSE,sha256=V1uXqi3vxR0QhB4QdFyjkynl6jpN4wZmlB5EMYJk0NM,1068
39
+ datastock-0.0.44.dist-info/METADATA,sha256=XTfrvF04pd1W2uJ7lOUhlFWpvL7pQBWxwa7Updlhazc,8660
40
+ datastock-0.0.44.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
41
+ datastock-0.0.44.dist-info/top_level.txt,sha256=BzJsLLK_zZw13WQCoMhC74qWVKalnVCjBxdPXvJn7HQ,25
42
+ datastock-0.0.44.dist-info/RECORD,,