Implemented special file keys

This commit is contained in:
Jamie Hardt
2024-06-30 14:16:08 -07:00
parent 2b6bafe1f6
commit 19e629c614

View File

@@ -6,10 +6,11 @@ import sys
import shlex import shlex
import shutil import shutil
import re import re
import os.path
import mfbatch.metaflac as flac import mfbatch.metaflac as flac
from typing import Dict, Tuple from typing import Dict, Tuple, Optional
class UnrecognizedCommandError(Exception): class UnrecognizedCommandError(Exception):
@@ -33,7 +34,7 @@ class CommandEnv:
metadatums: Dict[str, str] metadatums: Dict[str, str]
incr: Dict[str, str] incr: Dict[str, str]
patterns: Dict[str, Tuple[str, str, str]] patterns: Dict[str, Tuple[str, str, str]]
oncse: Dict[str, str] onces: Dict[str, Optional[str]]
def __init__(self) -> None: def __init__(self) -> None:
self.metadatums = dict() self.metadatums = dict()
@@ -60,17 +61,26 @@ class CommandEnv:
self.onces[key] = self.metadatums.get(key, None) self.onces[key] = self.metadatums.get(key, None)
self.metadatums[key] = value self.metadatums[key] = value
def set_file_keys(self, path):
apath = os.path.abspath(path)
self.metadatums['_ABSPATH'] = apath
dirname, self.metadatums['_FILENAME'] = os.path.split(apath)
_, self.metadatums['_FOLDER'] = os.path.split(dirname)
def clear_file_keys(self):
del self.metadatums['_ABSPATH']
del self.metadatums['_FILENAME']
del self.metadatums['_FOLDER']
def revert_onces(self): def revert_onces(self):
keys = list(self.onces) keys = list(self.onces)
for key in keys: for key in keys:
if self.onces[key] == None: del self.metadatums[key]
del self.metadatums[key] if self.onces[key] != None:
else: self.metadatums[key] = self.onces[key] or ''
self.metadatums[key] = self.onces[key]
del self.onces[key] del self.onces[key]
def increment_all(self): def increment_all(self):
for k in self.incr.keys(): for k in self.incr.keys():
v = int(self.metadatums[k]) v = int(self.metadatums[k])
@@ -128,6 +138,8 @@ they appear in the batchfile.
def _handle_file(self, line, interactive): def _handle_file(self, line, interactive):
while True: while True:
self.env.set_file_keys(line)
self.env.evaluate_patterns() self.env.evaluate_patterns()
if self.dry_run: if self.dry_run:
@@ -165,6 +177,7 @@ they appear in the batchfile.
self.env.increment_all() self.env.increment_all()
self.env.revert_onces() self.env.revert_onces()
self.env.clear_file_keys()
elif val.startswith(self.COMMAND_LEADER): elif val.startswith(self.COMMAND_LEADER):
self._handle_command(val.lstrip(self.COMMAND_LEADER), self._handle_command(val.lstrip(self.COMMAND_LEADER),