util.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. '''
  2. Utility fns.
  3. '''
  4. import os
  5. import jlib
  6. def clip( text, prefixes, suffixes=''):
  7. '''
  8. Returns <text> with prefix(s) and suffix(s) removed if present.
  9. '''
  10. if isinstance( prefixes, str):
  11. prefixes = prefixes,
  12. if isinstance( suffixes, str):
  13. suffixes = suffixes,
  14. while 1:
  15. for prefix in prefixes:
  16. if text.startswith( prefix):
  17. text = text[ len( prefix):]
  18. break
  19. else:
  20. break
  21. while 1:
  22. for suffix in suffixes:
  23. if suffix and text.endswith( suffix):
  24. text = text[ :-len( suffix)]
  25. break
  26. else:
  27. break
  28. return text
  29. def update_file_regress( text, filename, check_regression):
  30. '''
  31. Behaves like jlib.fs_update(), but if check_regression is true and
  32. <filename> already exists with different content from <text>, we show a
  33. diff and return an exception.
  34. '''
  35. text_old = jlib.fs_update( text, filename, check_regression)
  36. if check_regression:
  37. if text_old is not None:
  38. # Existing content differs and <check_regression> is true.
  39. with open( f'{filename}-2', 'w') as f:
  40. f.write( text)
  41. message = f'File would have changed: {os.path.relpath(filename)}'
  42. jlib.log( message)
  43. jlib.system( f'diff -u {filename} {filename}-2', verbose=True, raise_errors=False, prefix=f'diff {os.path.relpath(filename)}: ', out='log')
  44. return Exception( message)
  45. return text_old