source: TI03-DataExtractor/trunk/dxs/scripts/addWholeCatalogue.py @ 1715

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI03-DataExtractor/trunk/dxs/scripts/addWholeCatalogue.py@1715
Revision 1715, 3.8 KB checked in by astephen, 13 years ago (diff)

Merged with titania version.

Line 
1#!/usr/bin/env python
2
3"""
4addWholeCatalogue.py
5====================
6
7Utility script used to add a mass of datasets to the DX in one go.
8
9Usage:
10
11    addWholeCatalogue.py [-E] [<datasetGroupID> <datasetGroupID> <...>]
12
13Where:
14
15    No args means add everything.
16    -E   - empty out the whole DX datasets XML file before adding new stuff.
17    <datasetGroupID> only adds those listed.
18
19
20"""
21
22import sys, os, ConfigParser, getopt
23
24ADD_DATASET_GROUP_CMD="addDatasetGroup.py"
25ADD_DATASET_CMD="addDataset.py"
26
27def parseArgs(args):
28    "Parses input arguments."
29    emptyFirst=None
30    addAll=None
31    (argList, datasetGroups)=getopt.getopt(args, "e")
32    if len(datasetGroups)==0: addAll=1   
33
34    for arg, value in argList:
35        if arg=="-E":
36            emptyFirst=1
37
38    return (addAll, emptyFirst, datasetGroups)
39
40
41def getConfig(confFile="wholeCat.conf"):
42    "Returns a dictionary of config details."
43    confDict={}
44    c=ConfigParser.ConfigParser()
45    c.read(confFile)
46
47    #print "Building dict by dataset groups first..."
48    for sect in c.sections():
49        items=c.options(sect)
50
51        if sect.find(":")<0:
52            # it is datasetGroup level
53            confDict[sect]={}
54            confDict[sect]["items"]={}
55            confDict[sect]["datasets"]={}
56            for i in items:
57                confDict[sect]["items"][i]=c.get(sect, i)
58
59    #print "Building dict by datasets second..."
60    for sect in c.sections():
61        items=c.options(sect)
62
63        if sect.find(":")>-1:
64            # it is dataset level
65            (dsg, ds)=sect.split(":")
66            confDict[dsg]["datasets"][ds]={}
67            for i in items:
68                confDict[dsg]["datasets"][ds][i]=c.get(sect, i)
69
70    return confDict
71
72
73def backMap(dct, value):
74    "Returns key from dct when given value."
75    if value in dct.values():
76        for a,b in dct.items():
77            if b==value: return a
78    else:
79        raise "Value not found in dictionary: %s" % value
80
81def main(args):
82    "Controls flow."
83    (addAll, emptyFirst, datasetGroups)=parseArgs(args)
84    dsgMap={"s":"shortname", "l":"longname", "p":"prefix", "r":"roles", "u":"users", "b":"bmetadata",
85            "d":"dmetadata", "a":"uri", "w":"doclink"}
86    dsMap={"s":"shortname", "l":"longname", "g":"dsg", "n":"namesection", "r":"roles", "u":"users", "b":"bmetadata",
87            "d":"dmetadata", "a":"uri", "w":"doclink"}
88           
89    if emptyFirst==1:
90        print "Emptying out old datasets first...\n"
91        os.system("cleanOutDatasetXMLFile.py")
92
93
94    confDict=getConfig()
95    dsgs=confDict.keys()
96    dsgs.sort()
97
98    for dsg in dsgs:
99        if addAll==None and dsg not in datasetGroups: continue
100        #print "Adding dataset group:", dsg
101        d=confDict[dsg]["items"]
102       
103        items=d.items()
104
105        cmd=ADD_DATASET_GROUP_CMD
106        for (key, value) in items:
107            if value.strip()=="": continue
108            if key in ("roles", "users"):
109                value=value.replace(":",",")
110            argString="-%s %s" % (backMap(dsgMap, key), value)
111            cmd=cmd+" "+argString
112       
113        print "Executing:", cmd
114        os.system(cmd)
115
116        #print "\nAdding datasets for:", dsg
117        datasets=confDict[dsg]["datasets"].keys()
118        datasets.sort()
119
120        for ds in datasets:
121            #print "Adding dataset:", ds
122            items=confDict[dsg]["datasets"][ds].items()
123            cmd="%s -g %s" % (ADD_DATASET_CMD, dsg)
124
125            for (key, value) in items:
126                if value.strip()=="": continue
127                if key in ("roles", "users"):
128                    value=value.replace(":",",")
129
130                argString="-%s %s" % (backMap(dsMap, key), value)
131                cmd=cmd+" "+argString
132
133            print "Executing:", cmd
134            os.system(cmd)
135
136if __name__=="__main__":
137    args=sys.argv[1:]
138    main(args)
139   
140
141
Note: See TracBrowser for help on using the repository browser.