Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1import sys 

2from time import perf_counter 

3 

4from command import CommandList 

5from errors import DppArgparseError, DppDockerError, DppError, DppNoSuchTagError, DppSearchError 

6from message import message 

7 

8 

9def _handle_cmdline_error(e: DppError): 

10 if isinstance(e, DppArgparseError): 

11 message.stdout_argparse_error(str(e)) 

12 elif isinstance(e, DppDockerError): 

13 message.stdout_argparse_error(str(e)) 

14 elif isinstance(e, DppSearchError): 

15 message.stdout_search_error(str(e)) 

16 

17 

18def main(): 

19 def measure_time(func, args): 

20 start_time = perf_counter() 

21 func(args) 

22 elapsed = perf_counter() - start_time 

23 if elapsed < 100: 

24 message.stdout_progress(f"Elapsed: {elapsed:.2f}s") 

25 else: 

26 minutes, seconds = divmod(elapsed, 60) 

27 message.stdout_progress(f"Elapsed: {int(minutes)}m {seconds:.2f}s") 

28 

29 commands = CommandList() 

30 

31 try: 

32 name = sys.argv[1] 

33 except IndexError: 

34 name = "help" 

35 

36 argv = sys.argv[2:] 

37 if name not in commands: 

38 message.stdout_progress_error(f"'{name}' is not a valid command") 

39 return 1 

40 

41 try: 

42 if name not in ["help", "search"]: 

43 measure_time(commands[name], argv) 

44 else: 

45 commands[name](argv) 

46 except DppError as e: 

47 _handle_cmdline_error(e) 

48 

49 

50if __name__ == "__main__": 

51 from multiprocessing import freeze_support 

52 

53 freeze_support() 

54 

55 main()