Coverage for gpaw/cli/python.py: 52%

27 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-07-09 00:21 +0000

1import argparse 

2import runpy 

3import sys 

4 

5 

6class CLICommand: 

7 """Run GPAW's Python interpreter.""" 

8 

9 @staticmethod 

10 def add_arguments(parser): 

11 parser.add_argument( 

12 '--dry-run', '-z', type=int, default=0, 

13 metavar='NCPUS', 

14 help='Dry run on NCPUS cpus.') 

15 parser.add_argument( 

16 '-d', '--debug', action='store_true', 

17 help='Run in debug-mode.') 

18 

19 group = parser.add_mutually_exclusive_group() 

20 group.add_argument( 

21 '--command', '-c', 

22 dest='cmd', 

23 nargs=argparse.REMAINDER, 

24 help='Program passed in as string (terminates option list).') 

25 group.add_argument( 

26 '--module', '-m', 

27 nargs=argparse.REMAINDER, 

28 help='Run library module as a script (terminates option list).') 

29 

30 parser.add_argument( 

31 'arguments', metavar='ARG', 

32 help='Arguments passed to program in ' 

33 'sys.argv[1:]. ' 

34 'Use -- to force all remaining arguments to be ' 

35 'passed to target program (useful for passing ' 

36 'options starting with -).', 

37 nargs='*') 

38 

39 @staticmethod 

40 def run(args): 

41 from gpaw import all_lazy_imports, broadcast_imports, __getattr__ 

42 with broadcast_imports: 

43 for attr in all_lazy_imports: 

44 __getattr__(attr) 

45 

46 if args.cmd: 

47 sys.argv[:] = ['-c'] + args.cmd[1:] 

48 d = {} 

49 exec(args.cmd[0], d, d) 

50 elif args.module: 

51 sys.argv[:] = args.module 

52 runpy.run_module(args.module[0], 

53 run_name='__main__', 

54 alter_sys=True) 

55 else: 

56 sys.argv[:] = args.arguments 

57 runpy.run_path(args.arguments[0], run_name='__main__')