Skip to content

Commit

Permalink
[actions] emit logging messages before waiting/exiting/etc
Browse files Browse the repository at this point in the history
distinguish between actions that should run before or after
a logging message gets emitted
  • Loading branch information
mikf committed Jun 30, 2024
1 parent f7a6401 commit e03b99b
Showing 1 changed file with 57 additions and 25 deletions.
82 changes: 57 additions & 25 deletions gallery_dl/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,33 +21,55 @@ def parse(actionspec):
actionspec = actionspec.items()

actions = {}
actions[logging.DEBUG] = actions_d = []
actions[logging.INFO] = actions_i = []
actions[logging.WARNING] = actions_w = []
actions[logging.ERROR] = actions_e = []
actions[-logging.DEBUG] = actions_bd = []
actions[-logging.INFO] = actions_bi = []
actions[-logging.WARNING] = actions_bw = []
actions[-logging.ERROR] = actions_be = []
actions[logging.DEBUG] = actions_ad = []
actions[logging.INFO] = actions_ai = []
actions[logging.WARNING] = actions_aw = []
actions[logging.ERROR] = actions_ae = []

for event, spec in actionspec:
level, _, pattern = event.partition(":")
search = re.compile(pattern).search if pattern else util.true

if isinstance(spec, str):
type, _, args = spec.partition(" ")
action = (search, ACTIONS[type](args))
before, after = ACTIONS[type](args)
else:
action_list = []
actions_before = []
actions_after = []
for s in spec:
type, _, args = s.partition(" ")
action_list.append(ACTIONS[type](args))
action = (search, _chain_actions(action_list))
before, after = ACTIONS[type](args)
if before:
actions_before.append(before)
if after:
actions_after.append(after)
before = _chain_actions(actions_before)
after = _chain_actions(actions_after)

level = level.strip()
if not level or level == "*":
actions_d.append(action)
actions_i.append(action)
actions_w.append(action)
actions_e.append(action)
if before:
action = (search, before)
actions_bd.append(action)
actions_bi.append(action)
actions_bw.append(action)
actions_be.append(action)
if after:
action = (search, after)
actions_ad.append(action)
actions_ai.append(action)
actions_aw.append(action)
actions_ae.append(action)
else:
actions[_level_to_int(level)].append(action)
level = _level_to_int(level)
if before:
actions[-level].append((search, before))
if after:
actions[level].append((search, after))

return actions

Expand All @@ -69,12 +91,14 @@ def log(self, level, msg, *args, **kwargs):
if args:
msg = msg % args

actions = self.actions[level]
if actions:
before = self.actions[-level]
after = self.actions[level]

if before:
args = self.extra.copy()
args["level"] = level

for cond, action in actions:
for cond, action in before:
if cond(msg):
action(args)

Expand All @@ -84,6 +108,12 @@ def log(self, level, msg, *args, **kwargs):
kwargs["extra"] = self.extra
self.logger._log(level, msg, (), **kwargs)

if after:
args = self.extra.copy()
for cond, action in after:
if cond(msg):
action(args)


def _level_to_int(level):
try:
Expand All @@ -99,10 +129,12 @@ def _chain(args):
return _chain


# --------------------------------------------------------------------

def action_print(opts):
def _print(_):
print(opts)
return _print
return None, _print


def action_status(opts):
Expand All @@ -119,21 +151,21 @@ def action_status(opts):

def _status(args):
args["job"].status = op(args["job"].status, value)
return _status
return _status, None


def action_level(opts):
level = _level_to_int(opts.lstrip(" ~="))

def _level(args):
args["level"] = level
return _level
return _level, None


def action_exec(opts):
def _exec(_):
util.Popen(opts, shell=True).wait()
return _exec
return None, _exec


def action_wait(opts):
Expand All @@ -146,19 +178,19 @@ def _wait(args):
def _wait(args):
input("Press Enter to continue")

return _wait
return None, _wait


def action_abort(opts):
return util.raises(exception.StopExtraction)
return None, util.raises(exception.StopExtraction)


def action_terminate(opts):
return util.raises(exception.TerminateExtraction)
return None, util.raises(exception.TerminateExtraction)


def action_restart(opts):
return util.raises(exception.RestartExtraction)
return None, util.raises(exception.RestartExtraction)


def action_exit(opts):
Expand All @@ -169,7 +201,7 @@ def action_exit(opts):

def _exit(args):
raise SystemExit(opts)
return _exit
return None, _exit


ACTIONS = {
Expand Down

0 comments on commit e03b99b

Please sign in to comment.