/scripts/vault/spg-param-edit.py

https://github.com/tessonec/PySPG · Python · 159 lines · 94 code · 42 blank · 23 comment · 21 complexity · 772be1fef9dab2917f9c176a2f574db4 MD5 · raw file

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # :::~ Author: Claudio Juan Tessone <claudio.tessone@uzh.ch> (c) 2010
  4. ###
  5. ###
  6. ###
  7. ###
  8. # Distributed According to GNU Generic Purpose License (GPL) version 3
  9. # Please visit www.gnu.org
  10. ###############################################################################
  11. PROGRAM_NAME = "SPG-Edit-Param"
  12. PROGRAM_VERSION = "0.1.0"
  13. PROGRAM_AUTHOR = "Claudio J. Tessone"
  14. PROGRAM_RELEASE_DATE = "2010/05/29"
  15. PROGRAM_EMAIL = "claudio.tessone@uzh.ch"
  16. import spg.utils as spgu
  17. import re, sys, shutil
  18. #########################################################################################
  19. #########################################################################################
  20. def parse_command_line():
  21. from optparse import OptionParser
  22. parser = OptionParser()
  23. parser.add_option("-e","--edit", type="string", action='append', dest="edit",
  24. help = "Replaces a given iterator. Its name is grabbed directly from the argument")
  25. parser.add_option("-s","--swap", type="string", nargs=2, action='append', dest="swap",
  26. help = "Swaps two variables in the param.dat file")
  27. parser.add_option("-i","--insert", type="string", nargs=2, action='append', dest="insert",
  28. help = "Inserts the given iterator before the first variable. The second argument is usually enclosed between quotes")
  29. parser.add_option("-a","--append", type="string", nargs=2, action='append', dest="append",
  30. help = "Appends the second iterator after the first variable. The second argument is usually enclosed between quotes")
  31. parser.add_option("-d","--delete", type="string", action='append', dest="delete",
  32. help = "Deletes the second whose variables are those named")
  33. parser.add_option("-m","--move", type="string", nargs=2, action='append', dest="move",
  34. help = "Moves the iterator to the position given as second argument")
  35. return parser.parse_args()
  36. def parse_param_dat(fin):
  37. regex = re.compile(r'(?P<iter>[*+.:/])(?P<var>[a-zA-Z]\w*)\s*(?P<values>.*)')
  38. vec_entities = []
  39. dict_iters = {}
  40. for l in fin:
  41. l = l.strip()
  42. if l[:2] == "%!":
  43. vec_entities.append( l )
  44. continue
  45. if l[:2] == "#":
  46. vec_entities.append( l )
  47. continue
  48. match = regex.match( l )
  49. iter = match.group( 'iter' )
  50. var = match.group( 'var' )
  51. values = match.group( 'values' )
  52. vec_entities.append( var )
  53. dict_iters[var] = (iter, values)
  54. return vec_entities, dict_iters
  55. def out_param_dat(fout, vec_ents, dict_iters):
  56. for ent in vec_ents:
  57. if ent in dict_iters.keys():
  58. (iter, values) = dict_iters[ent]
  59. print >> fout, '%s%s %s'%(iter, ent, values)
  60. else:
  61. print >> fout, '%s'%(ent)
  62. def find_var(vec_ents, var):
  63. try:
  64. return vec_ents.index(var)
  65. except:
  66. spgu.newline_msg("ERR","variable '%s' not found "%var1)
  67. sys.exit(1)
  68. #----------------------------------------------------- from spg import SPGParser
  69. #===============================================================================
  70. #
  71. # parser = SPGParser()
  72. #
  73. # vec_param_dat = glob.glob()
  74. #===============================================================================
  75. #--------------------------------------------- parser.fetch( open("param.dat") )
  76. #-------------------------------------------------------------- for i in parser:
  77. #--------------------------------------------------------------- print i
  78. opts, args = parse_command_line()
  79. #print opts
  80. for i_arg in args:
  81. spgu.newline_msg("MSG","parsing... '%s' "%i_arg)
  82. vec_entities, dict_iters = parse_param_dat( open(i_arg) )
  83. if opts.swap is not None:
  84. for var1, var2 in opts.swap:
  85. pos1 = find_var(vec_entities, var1)
  86. pos2 = find_var(vec_entities, var2)
  87. vec_entities[pos1], vec_entities[pos2] = vec_entities[pos2], vec_entities[pos1]
  88. if opts.edit is not None:
  89. for ed in opts.edit:
  90. var, dil = parse_param_dat( [ed] )
  91. var = var[0]
  92. (iter, values) = dil[ var ]
  93. dict_iters[var] = (iter, values)
  94. if opts.insert is not None:
  95. for var1, oth in opts.insert:
  96. pos1 = find_var(vec_entities, var1)
  97. var2, dil = parse_param_dat( [oth] )
  98. var2 = var2[0]
  99. dict_iters[var2] = dil[ var2 ]
  100. vec_entities.insert( pos1, var2 )
  101. if opts.append is not None:
  102. for var1, oth in opts.append:
  103. pos1 = find_var(vec_entities, var1)+1
  104. var2, dil = parse_param_dat( [oth] )
  105. var2 = var2[0]
  106. dict_iters[var2] = dil[ var2 ]
  107. vec_entities.insert( pos1, var2 )
  108. if opts.delete is not None:
  109. for var1 in opts.delete:
  110. vec_entities.remove( var1 )
  111. if opts.move is not None:
  112. for var1, shift in opts.move:
  113. pos1 = find_var(vec_entities, var1)
  114. vec_entities.remove( var1 )
  115. vec_entities.insert( pos1+int(shift) , var1 )
  116. shutil.copy( i_arg, "%s-"%i_arg )
  117. out_param_dat(open(i_arg,"w"), vec_entities, dict_iters)