File indexing completed on 2026-04-09 07:48:49
0001
0002 """
0003 OpticksFlags.py
0004 =================
0005
0006 Used from optickscore/CMakeLists.txt
0007
0008 """
0009 import os, re, logging, argparse, json
0010
0011
0012
0013
0014
0015 def makedirs_(path):
0016 pdir = os.path.dirname(path)
0017 if not os.path.exists(pdir):
0018 os.makedirs(pdir)
0019 pass
0020 return path
0021
0022 expand_ = lambda path:os.path.expandvars(os.path.expanduser(path))
0023 json_load_ = lambda path:json.load(open(expand_(path), "r"))
0024 json_save_ = lambda path, d:json.dump(d, open(makedirs_(expand_(path)),"w"))
0025
0026
0027
0028 log = logging.getLogger(__name__)
0029
0030 class OpticksFlags(object):
0031 """
0032 """
0033 pfx = "const char* OpticksFlags::_"
0034 ptn = re.compile("^(?P<key>\S*)\s*=\s*\"(?P<val>\S{2})\"\s*;\s*$")
0035
0036 @classmethod
0037 def Flag2Abbrev(cls, lines):
0038 """
0039 Apply pattern to lines starting with the prefix
0040 and match to extract the flag name and abbreviation.
0041
0042 BULK_SCATTER = "SC" ;
0043
0044 """
0045 d = dict()
0046 for line in lines:
0047 if not line.startswith(cls.pfx): continue
0048 line = line[len(cls.pfx):]
0049 m = cls.ptn.match(line)
0050 if not m:
0051 log.debug("failed to match %s " % line )
0052 continue
0053 pass
0054 g = m.groupdict()
0055 k, v = g["key"], g["val"]
0056 d[k] = v
0057 pass
0058 return d
0059
0060 def __repr__(self):
0061 return "\n".join([" %2s : %s " % (kv[1], kv[0]) for kv in self.flag2abbrev.items()])
0062
0063 def __init__(self, path):
0064 path = os.path.expandvars(path)
0065 lines = open(path, "r").readlines()
0066 self.flag2abbrev = self.Flag2Abbrev(lines)
0067
0068 if __name__ == '__main__':
0069
0070 default_path = "$OPTICKS_HOME/optickscore/OpticksFlags.cc"
0071 parser = argparse.ArgumentParser(__doc__)
0072 parser.add_argument( "path", nargs="?", help="Path to input OpticksFlags.cc", default=default_path )
0073 parser.add_argument( "--jsonpath", default=None, help="When a path is provided an json file will be written to it." )
0074 parser.add_argument( "--quiet", action="store_true", default=False, help="Skip dumping" )
0075 parser.add_argument( "--level", default="info", help="logging level" )
0076 args = parser.parse_args()
0077
0078 fmt = '[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s'
0079 logging.basicConfig(level=getattr(logging,args.level.upper()), format=fmt)
0080
0081 if args.path == default_path:
0082 log.info("using default input path %s " % args.path)
0083 else:
0084 log.info("using argument input path %s " % args.path)
0085 pass
0086
0087 flags = OpticksFlags(args.path)
0088
0089 if not args.quiet:
0090 print(flags)
0091 pass
0092 if not args.jsonpath is None:
0093 log.info("writing flag2abbrev to jsonpath %s " % args.jsonpath)
0094 json_save_(args.jsonpath, flags.flag2abbrev )
0095 pass
0096
0097
0098