File: args.py

package info (click to toggle)
petsc 3.22.5%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 516,740 kB
  • sloc: ansic: 814,333; cpp: 50,948; python: 37,416; f90: 17,187; javascript: 3,493; makefile: 3,198; sh: 1,502; xml: 619; objc: 445; java: 13; csh: 1
file content (82 lines) | stat: -rw-r--r-- 2,554 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from __future__ import absolute_import
class ArgumentProcessor(object):
  '''This class provides interaction with an RDict object, which by default is shared'''
  defaultDB = None

  def __init__(self, clArgs = None, argDB = None):
    '''Setup the argument database'''
    self.argDB = self.createArgDB(argDB)
    if clArgs is None:
      import sys

      self.clArgs = sys.argv[1:]
    else:
      self.clArgs = clArgs
    return

  def __getstate__(self):
    '''We do not want to pickle the default RDict'''
    d = self.__dict__.copy()
    if '_argDB' in d:
      if d['_argDB'] is ArgumentProcessor.defaultDB:
        del d['_argDB']
      else:
        d['_argDB'] = None
    return d

  def __setstate__(self, d):
    '''We must create the default RDict'''
    self.__dict__.update(d)
    if not '_argDB' in d:
      self.argDB = self.createArgDB(None)
    return

  def getArgDB(self):
    return self._argDB
  def setArgDB(self, argDB):
    self._argDB = argDB
    return
  argDB = property(getArgDB, setArgDB, doc = 'The RDict argument database')

  def createArgDB(self, initDB):
    '''Create an argument database unless initDB is provided, and insert the command line arguments'''
    if not initDB is None:
      argDB = initDB
    else:
      if ArgumentProcessor.defaultDB is None:
        import RDict
        import os
        import sys

        # Changed this to assume RDict is independent
        ArgumentProcessor.defaultDB = RDict.RDict(load = 0, autoShutdown = 0)
      argDB = ArgumentProcessor.defaultDB
    return argDB

  def setupArguments(self, argDB):
    '''Setup types in the argument database
       - This method should be overridden by any subclass with special arguments, making sure to call the superclass method'''
    return argDB

  def insertArguments(self, useEnvironment = 0):
    '''Put arguments in from the command line and environment
       - This will only insert command line arguments into a given RDict once'''
    if useEnvironment:
      import os

      self.argDB.insertArgs(os.environ)
    if not hasattr(self.argDB, '_setCommandLine'):
      self.argDB.insertArgs(self.clArgs)
      self.argDB._setCommandLine = 1
    return

  def setup(self):
    '''This method should be overridden for any setup after initialization
       - Here we determine argument types and insert arguments into the dictionary'''
    self.setupArguments(self.argDB)
    self.insertArguments()
    return

  def cleanup(self):
    '''This method should be overridden for any cleanup before finalization'''
    return