exec_pre_post.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/env python2
  2. # -*- coding:utf-8 -*-
  3. import os
  4. import sh
  5. import shlex
  6. from .hook import JobHook
  7. class CmdExecHook(JobHook):
  8. POST_SYNC = "post_sync"
  9. PRE_SYNC = "pre_sync"
  10. def __init__(self, command, exec_at=POST_SYNC):
  11. self.command = shlex.split(command)
  12. if exec_at == self.POST_SYNC:
  13. self.before_job = self._keep_calm
  14. self.after_job = self._exec
  15. elif exec_at == self.PRE_SYNC:
  16. self.before_job = self._exec
  17. self.after_job = self._keep_calm
  18. def _keep_calm(self, ctx={}, **kwargs):
  19. pass
  20. def _exec(self, ctx={}, **kwargs):
  21. new_env = os.environ.copy()
  22. new_env["TUNASYNC_MIRROR_NAME"] = ctx["mirror_name"]
  23. new_env["TUNASYNC_WORKING_DIR"] = ctx["current_dir"]
  24. new_env["TUNASYNC_JOB_EXIT_STATUS"] = kwargs.get("status", "")
  25. _cmd = self.command[0]
  26. _args = [] if len(self.command) == 1 else self.command[1:]
  27. cmd = sh.Command(_cmd)
  28. cmd(*_args, _env=new_env)
  29. # vim: ts=4 sw=4 sts=4 expandtab