TSVZ 3.18__tar.gz → 3.21__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: TSVZ
3
- Version: 3.18
3
+ Version: 3.21
4
4
  Summary: An simple in memory wrapper around a TSV file to function as a database
5
5
  Home-page: https://github.com/yufei-pan/TSVZ
6
6
  Author: Yufei Pan
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: TSVZ
3
- Version: 3.18
3
+ Version: 3.21
4
4
  Summary: An simple in memory wrapper around a TSV file to function as a database
5
5
  Home-page: https://github.com/yufei-pan/TSVZ
6
6
  Author: Yufei Pan
@@ -22,7 +22,7 @@ if os.name == 'nt':
22
22
  elif os.name == 'posix':
23
23
  import fcntl
24
24
 
25
- version = '3.18'
25
+ version = '3.21'
26
26
  __version__ = version
27
27
  author = 'pan@zopyr.us'
28
28
 
@@ -30,12 +30,13 @@ DEFAULT_DELIMITER = '\t'
30
30
  DEFAULTS_INDICATOR_KEY = '#_defaults_#'
31
31
 
32
32
  def get_delimiter(delimiter,file_name = ''):
33
+ global DEFAULT_DELIMITER
33
34
  if not delimiter:
34
35
  return DEFAULT_DELIMITER
35
36
  elif delimiter == ...:
36
37
  if not file_name:
37
38
  rtn = '\t'
38
- if file_name.endswith('.csv'):
39
+ elif file_name.endswith('.csv'):
39
40
  rtn = ','
40
41
  elif file_name.endswith('.nsv'):
41
42
  rtn = '\0'
@@ -58,6 +59,7 @@ def get_delimiter(delimiter,file_name = ''):
58
59
 
59
60
  def pretty_format_table(data, delimiter = DEFAULT_DELIMITER,header = None):
60
61
  version = 1.11
62
+ _ = version
61
63
  if not data:
62
64
  return ''
63
65
  if isinstance(data, str):
@@ -262,10 +264,10 @@ def __teePrintOrNot(message,level = 'info',teeLogger = None):
262
264
  teeLogger.teelog(message,level)
263
265
  else:
264
266
  print(message,flush=True)
265
- except Exception as e:
267
+ except Exception:
266
268
  print(message,flush=True)
267
269
 
268
- def _processLine(line,taskDic,correctColumnNum,verbose = False,teeLogger = None,strict = True,delimiter = DEFAULT_DELIMITER,defaults = []):
270
+ def _processLine(line,taskDic,correctColumnNum,verbose = False,teeLogger = None,strict = True,delimiter = DEFAULT_DELIMITER,defaults = None):
269
271
  """
270
272
  Process a line of text and update the task dictionary.
271
273
 
@@ -282,6 +284,8 @@ def _processLine(line,taskDic,correctColumnNum,verbose = False,teeLogger = None,
282
284
  tuple: A tuple containing the updated correctColumnNum and the processed lineCache.
283
285
 
284
286
  """
287
+ if not defaults:
288
+ defaults = []
285
289
  line = line.strip(' ').strip('\x00').rstrip('\r\n')
286
290
  # we throw away the lines that start with '#'
287
291
  if not line :
@@ -465,7 +469,7 @@ def _lineContainHeader(header,line,verbose = False,teeLogger = None,strict = Fal
465
469
  if len(header) != len(line) or any([header[i] not in line[i] for i in range(len(header))]):
466
470
  __teePrintOrNot(f"Header mismatch: \n{line} \n!= \n{header}",teeLogger=teeLogger)
467
471
  if strict:
468
- raise Exception("Data format error! Header mismatch")
472
+ raise ValueError("Data format error! Header mismatch")
469
473
  return False
470
474
  return True
471
475
 
@@ -500,7 +504,7 @@ def _verifyFileExistence(fileName,createIfNotExist = True,teeLogger = None,heade
500
504
  return True
501
505
  elif strict:
502
506
  __teePrintOrNot('File not found','error',teeLogger=teeLogger)
503
- raise Exception("File not found")
507
+ raise FileNotFoundError("File not found")
504
508
  else:
505
509
  return False
506
510
  return True
@@ -566,8 +570,7 @@ def readTabularFile(fileName,teeLogger = None,header = '',createIfNotExist = Fal
566
570
  return taskDic
567
571
  with open(fileName, mode ='rb')as file:
568
572
  correctColumnNum = -1
569
- if header.rstrip():
570
- if verifyHeader:
573
+ if header.rstrip() and verifyHeader:
571
574
  line = file.readline().decode(encoding=encoding)
572
575
  if _lineContainHeader(header,line,verbose = verbose,teeLogger = teeLogger,strict = strict):
573
576
  correctColumnNum = len(header.split(delimiter))
@@ -660,13 +663,12 @@ def appendLinesTabularFile(fileName,linesToAppend,teeLogger = None,header = '',c
660
663
  except Exception as e:
661
664
  line[i] = str(e)
662
665
  if isinstance(linesToAppend,dict):
663
- if not line or line[0] != key:
666
+ if (not line or line[0] != key):
664
667
  line = [key]+line
665
668
  formatedLines.append(line)
666
669
  with open(fileName, mode ='r+b')as file:
667
670
  correctColumnNum = max([len(line) for line in formatedLines])
668
- if header.rstrip():
669
- if verifyHeader:
671
+ if header.rstrip() and verifyHeader:
670
672
  line = file.readline().decode(encoding=encoding)
671
673
  if _lineContainHeader(header,line,verbose = verbose,teeLogger = teeLogger,strict = strict):
672
674
  correctColumnNum = len(header.split(delimiter))
@@ -716,7 +718,7 @@ def clearTabularFile(fileName,teeLogger = None,header = '',verifyHeader = False,
716
718
  delimiter = get_delimiter(delimiter,file_name=fileName)
717
719
  header = _formatHeader(header,verbose = verbose,teeLogger = teeLogger,delimiter=delimiter)
718
720
  if not _verifyFileExistence(fileName,createIfNotExist = True,teeLogger = teeLogger,header = header,encoding = encoding,strict = False,delimiter=delimiter):
719
- raise Exception("Something catastrophic happened! File still not found after creation")
721
+ raise FileNotFoundError("Something catastrophic happened! File still not found after creation")
720
722
  else:
721
723
  with open(fileName, mode ='r+',encoding=encoding)as file:
722
724
  if header.rstrip() and verifyHeader:
@@ -754,13 +756,13 @@ class TSVZed(OrderedDict):
754
756
  self.teeLogger.teelog(message,level)
755
757
  else:
756
758
  print(message,flush=True)
757
- except Exception as e:
759
+ except Exception:
758
760
  print(message,flush=True)
759
761
 
760
762
  def getResourseUsage(self,return_dict = False):
761
763
  return get_resource_usage(return_dict = return_dict)
762
764
 
763
- def __init__ (self,fileName,teeLogger = None,header = '',createIfNotExist = True,verifyHeader = True,rewrite_on_load = True,rewrite_on_exit = False,rewrite_interval = 0, append_check_delay = 0.01,monitor_external_changes = True,verbose = False,encoding = 'utf8',delimiter = ...,defualts = [],strict = False):
765
+ def __init__ (self,fileName,teeLogger = None,header = '',createIfNotExist = True,verifyHeader = True,rewrite_on_load = True,rewrite_on_exit = False,rewrite_interval = 0, append_check_delay = 0.01,monitor_external_changes = True,verbose = False,encoding = 'utf8',delimiter = ...,defualts = None,strict = False):
764
766
  super().__init__()
765
767
  self.version = version
766
768
  self.strict = strict
@@ -769,7 +771,7 @@ class TSVZed(OrderedDict):
769
771
  self._fileName = fileName
770
772
  self.teeLogger = teeLogger
771
773
  self.delimiter = get_delimiter(delimiter,file_name=fileName)
772
- self.defaults = defualts
774
+ self.defaults = defualts if defualts else []
773
775
  self.header = _formatHeader(header,verbose = verbose,teeLogger = self.teeLogger,delimiter=self.delimiter)
774
776
  self.correctColumnNum = -1
775
777
  self.createIfNotExist = createIfNotExist
@@ -835,7 +837,12 @@ class TSVZed(OrderedDict):
835
837
  readTabularFile(self._fileName, teeLogger = self.teeLogger, header = self.header, createIfNotExist = self.createIfNotExist, verifyHeader = self.verifyHeader, verbose = self.verbose, taskDic = self,encoding = self.encoding if self.encoding else None, strict = self.strict, delimiter = self.delimiter, defaults=self.defaults)
836
838
  if self.verbose:
837
839
  self.__teePrintOrNot(f"Loaded {len(self)} records from {self._fileName}")
838
- self.correctColumnNum = len(self.header.split(self.delimiter)) if (self.header and self.verifyHeader) else (len(self[next(iter(self))]) if self else -1)
840
+ if self.header and self.verifyHeader:
841
+ self.correctColumnNum = len(self.header.split(self.delimiter))
842
+ elif self:
843
+ self.correctColumnNum = len(self[next(iter(self))])
844
+ else:
845
+ self.correctColumnNum = -1
839
846
  if self.verbose:
840
847
  self.__teePrintOrNot(f"correctColumnNum: {self.correctColumnNum}")
841
848
  #super().update(loadedData)
@@ -1001,9 +1008,12 @@ class TSVZed(OrderedDict):
1001
1008
  def __enter__(self):
1002
1009
  return self
1003
1010
 
1004
- def __exit__(self,exc_type,exc_value,traceback):
1011
+ def close(self):
1005
1012
  self.stopAppendThread()
1006
1013
  return self
1014
+
1015
+ def __exit__(self,exc_type,exc_value,traceback):
1016
+ return self.close()
1007
1017
 
1008
1018
  def __repr__(self):
1009
1019
  return f"""TSVZed(
@@ -1024,16 +1034,11 @@ deSynced:{self.deSynced}
1024
1034
  memoryOnly:{self.memoryOnly}
1025
1035
  {dict(self)})"""
1026
1036
 
1027
- def close(self):
1028
- self.stopAppendThread()
1029
- return self
1030
-
1031
1037
  def __str__(self):
1032
1038
  return f"TSVZed({self._fileName},{dict(self)})"
1033
1039
 
1034
1040
  def __del__(self):
1035
- self.stopAppendThread()
1036
- return self
1041
+ return self.close()
1037
1042
 
1038
1043
  def popitem(self, last=True):
1039
1044
  key, value = super().popitem(last)
@@ -1359,14 +1364,14 @@ def __main__():
1359
1364
  args.header += '\\'
1360
1365
  try:
1361
1366
  header = args.header.encode().decode('unicode_escape') if args.header else ''
1362
- except Exception as e:
1367
+ except Exception:
1363
1368
  print(f"Failed to decode header: {args.header}")
1364
1369
  header = ''
1365
1370
  defaults = []
1366
1371
  if args.defaults:
1367
1372
  try:
1368
1373
  defaults = args.defaults.encode().decode('unicode_escape').split(args.delimiter)
1369
- except Exception as e:
1374
+ except Exception:
1370
1375
  print(f"Failed to decode defaults: {args.defaults}")
1371
1376
  defaults = []
1372
1377
 
@@ -1385,9 +1390,7 @@ def __main__():
1385
1390
  elif args.operation == 'clear':
1386
1391
  clearTabularFile(args.filename, header=header, verbose=args.verbose, verifyHeader=args.strict, delimiter=args.delimiter)
1387
1392
  else:
1388
- print("Invalid operation")
1389
- return
1390
-
1393
+ print("Invalid operation")
1391
1394
  if __name__ == '__main__':
1392
1395
  __main__()
1393
1396
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes