skilleter-thingy 0.0.61__tar.gz → 0.0.63__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.

Potentially problematic release.


This version of skilleter-thingy might be problematic. Click here for more details.

Files changed (73) hide show
  1. {skilleter_thingy-0.0.61/skilleter_thingy.egg-info → skilleter_thingy-0.0.63}/PKG-INFO +2 -2
  2. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/pyproject.toml +2 -2
  3. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/readable.py +35 -7
  4. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/tidy.py +2 -2
  5. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63/skilleter_thingy.egg-info}/PKG-INFO +2 -2
  6. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/LICENSE +0 -0
  7. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/README.md +0 -0
  8. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/setup.cfg +0 -0
  9. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/__init__.py +0 -0
  10. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/addpath.py +0 -0
  11. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/borger.py +0 -0
  12. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/box.py +0 -0
  13. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/console_colours.py +0 -0
  14. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/diskspacecheck.py +0 -0
  15. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/docker_purge.py +0 -0
  16. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/ffind.py +0 -0
  17. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/ggit.py +0 -0
  18. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/ggrep.py +0 -0
  19. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_br.py +0 -0
  20. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_ca.py +0 -0
  21. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_cleanup.py +0 -0
  22. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_co.py +0 -0
  23. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_common.py +0 -0
  24. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_hold.py +0 -0
  25. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_mr.py +0 -0
  26. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_parent.py +0 -0
  27. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_review.py +0 -0
  28. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_update.py +0 -0
  29. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/git_wt.py +0 -0
  30. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/gitcmp_helper.py +0 -0
  31. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/gitprompt.py +0 -0
  32. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/gl.py +0 -0
  33. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/gphotosync.py +0 -0
  34. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/linecount.py +0 -0
  35. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/moviemover.py +0 -0
  36. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/photodupe.py +0 -0
  37. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/phototidier.py +0 -0
  38. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/py_audit.py +0 -0
  39. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/remdir.py +0 -0
  40. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/rmdupe.py +0 -0
  41. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/rpylint.py +0 -0
  42. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/splitpics.py +0 -0
  43. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/strreplace.py +0 -0
  44. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/sysmon.py +0 -0
  45. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/tfm.py +0 -0
  46. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/tfparse.py +0 -0
  47. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/__init__.py +0 -0
  48. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/colour.py +0 -0
  49. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/dc_curses.py +0 -0
  50. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/dc_defaults.py +0 -0
  51. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/dc_util.py +0 -0
  52. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/dircolors.py +0 -0
  53. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/docker.py +0 -0
  54. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/files.py +0 -0
  55. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/git.py +0 -0
  56. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/git2.py +0 -0
  57. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/gitlab.py +0 -0
  58. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/path.py +0 -0
  59. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/popup.py +0 -0
  60. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/process.py +0 -0
  61. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/run.py +0 -0
  62. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/tfm_pane.py +0 -0
  63. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/thingy/venv_template.py +0 -0
  64. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/trimpath.py +0 -0
  65. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/venv_create.py +0 -0
  66. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/window_rename.py +0 -0
  67. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/xchmod.py +0 -0
  68. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy/yamlcheck.py +0 -0
  69. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy.egg-info/SOURCES.txt +0 -0
  70. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy.egg-info/dependency_links.txt +0 -0
  71. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy.egg-info/entry_points.txt +0 -0
  72. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy.egg-info/requires.txt +0 -0
  73. {skilleter_thingy-0.0.61 → skilleter_thingy-0.0.63}/skilleter_thingy.egg-info/top_level.txt +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skilleter_thingy
3
- Version: 0.0.61
3
+ Version: 0.0.63
4
4
  Summary: A collection of useful utilities, mainly aimed at making Git more friendly
5
5
  Author-email: John Skilleter <john@skilleter.org.uk>
6
6
  Project-URL: Home, https://skilleter.org.uk
7
7
  Classifier: Programming Language :: Python :: 3
8
8
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
9
9
  Classifier: Operating System :: OS Independent
10
- Requires-Python: >=3.6
10
+ Requires-Python: >=3.8
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
13
  Requires-Dist: imagehash
@@ -7,7 +7,7 @@ name = "skilleter_thingy"
7
7
 
8
8
  # Version must be incremented to install updated Thingy
9
9
 
10
- version = "0.0.61"
10
+ version = "0.0.63"
11
11
 
12
12
  authors = [
13
13
  {name="John Skilleter", email="john@skilleter.org.uk"},
@@ -17,7 +17,7 @@ description = "A collection of useful utilities, mainly aimed at making Git more
17
17
 
18
18
  readme = "README.md"
19
19
 
20
- requires-python = ">=3.6"
20
+ requires-python = ">=3.8"
21
21
 
22
22
  classifiers = [
23
23
  "Programming Language :: Python :: 3",
@@ -31,6 +31,7 @@ TF_IGNORE_MSG = 'Unless you have made equivalent changes to your configuration,
31
31
 
32
32
  TF_REFRESHING_AND_READING = re.compile(r'.*: (?:Refreshing state\.\.\.|Reading\.\.\.|Still reading\.\.\.|Read complete after |Preparing import\.\.\.).*')
33
33
  TF_FINDING_AND_INSTALLING = re.compile(r'- (?:Finding .*[.]{3}|Installing .*[.]{3}|Installed .*)')
34
+ TF_FETCHING_AND_INSTALLING = re.compile(r'(Fetching|Installing|Using) [-a-z0-9_]+ [0-9.]+')
34
35
 
35
36
  TF_UNCHANGED_HIDDEN = re.compile(r' +# \(\d+ unchanged (?:attribute|block|element)s? hidden\)')
36
37
 
@@ -40,16 +41,23 @@ TF_HAS_CHANGED_END = re.compile(r' [}]')
40
41
  TF_READ_DURING_APPLY = re.compile(r' +# [-a-z_.0-9\[\]]+ will be read during apply')
41
42
  TF_READ_DURING_APPLY_END = re.compile(r' [}]')
42
43
 
44
+ TF_TAG_CHANGE_BLOCK_START = re.compile(r'^ +~ +tags(_all)? += +\{$')
45
+ TF_TAG_ENTRY_IGNORE = re.compile(r'^ +".*" += +".*"')
46
+ TF_TAG_CHANGE_BLOCK_END = re.compile(r'^ +}$')
47
+
43
48
  TF_MISC_REGEX = \
44
49
  [
45
- { 'regex': re.compile(r'(Read complete after) \d+s'), 'replace': r'\1 {SECONDS}'},
50
+ { 'regex': re.compile(r'(Read complete after) (\d+s|\d+m\d+s)'), 'replace': r'\1 {ELAPSED}'},
46
51
  { 'regex': re.compile(r'"(.*:.*)"( = ".*")'), 'replace': r'\1\2'},
47
52
  { 'regex': re.compile(r'"(.*:.*)"( = \[$)'), 'replace': r'\1\2'},
53
+ { 'regex': re.compile(r'^last "terraform apply":$'), 'replace':r'last "terraform apply" which may have affected this plan:'},
48
54
  ]
49
55
 
50
56
  TF_IGNORE_LIST = [
51
57
  {'start': TF_HAS_CHANGED, 'end': TF_HAS_CHANGED_END},
52
58
  {'start': TF_READ_DURING_APPLY, 'end': TF_READ_DURING_APPLY_END},
59
+ {'start': re.compile(r'(Releasing|Acquiring) state lock. This may take a few moments\.+')},
60
+ {'start': re.compile(r'.*: Still reading\.{3} \[.* elapsed\]')},
53
61
  ]
54
62
 
55
63
  ################################################################################
@@ -142,6 +150,10 @@ def cleanfile(args, infile, outfile):
142
150
 
143
151
  collection = []
144
152
 
153
+ # True if we are processing a tag block
154
+
155
+ in_tag_block = False
156
+
145
157
  # Read, process and write stdin to stdout, converting appropriately
146
158
 
147
159
  for data in infile:
@@ -196,22 +208,31 @@ def cleanfile(args, infile, outfile):
196
208
 
197
209
  for ignore in TF_IGNORE_LIST:
198
210
  if ignore['start'].fullmatch(clean):
199
- ignore_until = ignore['end']
211
+ if 'end' in ignore:
212
+ ignore_until = ignore['end']
213
+
214
+ logging.info('Found ignore start marker: "%s"', clean)
215
+ logging.info('Skipping until end marker: "%s"', ignore_until.pattern)
216
+ else:
217
+ clean = None
200
218
 
201
- logging.info('Found ignore start marker: "%s"', clean)
202
- logging.info('Skipping until end marker: "%s"', ignore_until.pattern)
203
219
  break
204
220
  else:
205
- if TF_UNCHANGED_HIDDEN.fullmatch(clean):
221
+ if TF_TAG_CHANGE_BLOCK_START.fullmatch(clean):
222
+ in_tag_block = True
223
+
224
+ elif TF_TAG_CHANGE_BLOCK_END.fullmatch(clean):
225
+ in_tag_block = False
226
+
227
+ elif TF_UNCHANGED_HIDDEN.fullmatch(clean):
206
228
  clean = None
207
229
 
208
230
  elif clean == TF_IGNORE_MSG:
209
231
  clean = None
210
232
 
211
- elif TF_REFRESHING_AND_READING.match(clean) or TF_FINDING_AND_INSTALLING.fullmatch(clean):
233
+ elif TF_REFRESHING_AND_READING.match(clean) or TF_FINDING_AND_INSTALLING.fullmatch(clean) or TF_FETCHING_AND_INSTALLING.fullmatch(clean):
212
234
  # Collect a block of non-deterministically-ordered data
213
235
 
214
- logging.info('Adding "%s" to collection', clean)
215
236
  collection.append(clean)
216
237
  clean = None
217
238
 
@@ -227,6 +248,9 @@ def cleanfile(args, infile, outfile):
227
248
 
228
249
  collection = []
229
250
 
251
+ if in_tag_block and clean and TF_TAG_ENTRY_IGNORE.fullmatch(clean):
252
+ clean = None
253
+
230
254
  # Write normal output, skipping >1 blank lines
231
255
 
232
256
  if clean is not None and not ignore_until:
@@ -248,6 +272,10 @@ def cleanfile(args, infile, outfile):
248
272
  print(f'INTERNAL ERROR: Code never found end of ignore-block marker "{ignore_until.pattern}" - either the Terraform output format has changed, or the log file is incomplete!')
249
273
  sys.exit(2)
250
274
 
275
+ if in_tag_block:
276
+ print('INTERNAL ERROR: Code never found end of tag block marker - either the Terraform output format has changed, or the log file is incomplete!')
277
+ sys.exit(2)
278
+
251
279
  ################################################################################
252
280
 
253
281
  def main():
@@ -58,8 +58,8 @@ RE_TIME = [
58
58
 
59
59
  {'regex': re.compile(r'[0-9]([.][0-9]*)*\s*(second[s]?)'), 'replace': '{ELAPSED}'},
60
60
 
61
- {'find': r'{DATE} {TIME}', 'replace': '{DATE+TIME}'},
62
- {'find': r'\d{2}m \d{2}s', 'replace': '{TIME}'},
61
+ {'find': '\{DATE\} \{TIME\}', 'replace': '{DATE+TIME}'},
62
+ {'regex': re.compile(r'[0-9]+m *[0-9]+s'), 'replace': '{ELAPSED}'},
63
63
  ]
64
64
 
65
65
  # SHA values
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skilleter_thingy
3
- Version: 0.0.61
3
+ Version: 0.0.63
4
4
  Summary: A collection of useful utilities, mainly aimed at making Git more friendly
5
5
  Author-email: John Skilleter <john@skilleter.org.uk>
6
6
  Project-URL: Home, https://skilleter.org.uk
7
7
  Classifier: Programming Language :: Python :: 3
8
8
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
9
9
  Classifier: Operating System :: OS Independent
10
- Requires-Python: >=3.6
10
+ Requires-Python: >=3.8
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
13
  Requires-Dist: imagehash