isolate migration scripts in migrations/v4-to-v5
[plcapi.git] / migrations / v4-to-v5 / parse-site-nodegroups.py
1 #!/usr/bin/env python
2
3 import sys
4 import re
5
6 class Nodegroups:
7
8     def __init__ (self,input,output=None):
9         self.input=input
10         self.output=output
11
12     # strip off comments
13     comment=re.compile("\s*#.*")
14     id="[\w\.-]+|\'[^\']+\'"
15     id3="\s*(?P<groupname>%s)\s+(?P<tagname>%s)\s+(?P<tagvalue>%s\s*)"%(id,id,id)
16     line=re.compile(id3)
17
18     def parse (self):
19         if self.output:
20             outfile = open(self.output,"w")
21         else:
22             outfile = sys.stdout
23         lineno=0
24         print >> outfile, """
25 CREATE TABLE mgn_site_nodegroup (groupname text, tagname text, tagvalue text);
26 """
27         for line in file(self.input).readlines():
28             lineno += 1
29             if Nodegroups.comment.match(line):
30                 continue
31             match=Nodegroups.line.match(line)
32             if not match:
33                 print "%s:%s:%d: syntax error %s"%(
34                     sys.argv[0],self.input,lineno,line)
35                 sys.exit(1)
36             def normalize (id):
37                 if id.find("'")==0:
38                     return id
39                 return "'%s'"%id
40             [groupname,tagname,tagvalue]=[normalize(x) for x in match.groups()]
41
42             print >> outfile, \
43 "INSERT INTO mgn_site_nodegroup (groupname,tagname,tagvalue) VALUES (%s,%s,%s);"%\
44 (groupname,tagname,tagvalue)
45         if outfile != sys.stdout:
46             outfile.close()
47
48 if __name__ == '__main__':
49     if len(sys.argv) not in [2,3]:
50         print 'Usage:',sys.argv[0],'input [output]'
51         sys.exit(1)
52     input=sys.argv[1]
53     try:
54         output=sys.argv[2]
55     except:
56         output=None
57     Nodegroups(input,output).parse()