source: TI03-DataExtractor/branches/repackaging/server/dxs/scripts/addWholeCatalogue.py @ 1761

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

Modified scripts to work with entry_points.

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
24# import script modules
25import addDatasetGroup, addDataset
26
27
28
29def parseArgs(args):
30    "Parses input arguments."
31    emptyFirst=None
32    addAll=None
33    (argList, datasetGroups)=getopt.getopt(args, "e")
34    if len(datasetGroups)==0: addAll=1   
35
36    for arg, value in argList:
37        if arg=="-E":
38            emptyFirst=1
39
40    return (addAll, emptyFirst, datasetGroups)
41
42
43def getConfig(confFile="wholeCat.conf"):
44    "Returns a dictionary of config details."
45    confDict={}
46    c=ConfigParser.ConfigParser()
47    c.read(confFile)
48
49    #print "Building dict by dataset groups first..."
50    for sect in c.sections():
51        items=c.options(sect)
52
53        if sect.find(":")<0:
54            # it is datasetGroup level
55            confDict[sect]={}
56            confDict[sect]["items"]={}
57            confDict[sect]["datasets"]={}
58            for i in items:
59                confDict[sect]["items"][i]=c.get(sect, i)
60
61    #print "Building dict by datasets second..."
62    for sect in c.sections():
63        items=c.options(sect)
64
65        if sect.find(":")>-1:
66            # it is dataset level
67            (dsg, ds)=sect.split(":")
68            confDict[dsg]["datasets"][ds]={}
69            for i in items:
70                confDict[dsg]["datasets"][ds][i]=c.get(sect, i)
71
72    return confDict
73
74
75def backMap(dct, value):
76    "Returns key from dct when given value."
77    if value in dct.values():
78        for a,b in dct.items():
79            if b==value: return a
80    else:
81        raise "Value not found in dictionary: %s" % value
82
83def main2(args):
84    "Controls flow."
85    (addAll, emptyFirst, datasetGroups)=parseArgs(args)
86    dsgMap={"s":"shortname", "l":"longname", "p":"prefix", "r":"roles", "u":"users", "b":"bmetadata",
87            "d":"dmetadata", "a":"uri", "w":"doclink"}
88    dsMap={"s":"shortname", "l":"longname", "g":"dsg", "n":"namesection", "r":"roles", "u":"users", "b":"bmetadata",
89            "d":"dmetadata", "a":"uri", "w":"doclink"}
90           
91    if emptyFirst==1:
92        print "Emptying out old datasets first...\n"
93        os.system("cleanOutDatasetXMLFile.py")
94
95
96    confDict=getConfig()
97    dsgs=confDict.keys()
98    dsgs.sort()
99
100    for dsg in dsgs:
101        if addAll==None and dsg not in datasetGroups: continue
102        #print "Adding dataset group:", dsg
103        d=confDict[dsg]["items"]
104       
105        items=d.items()
106
107        args = []
108       
109        for (key, value) in items:
110            if value.strip()=="": continue
111            if key in ("roles", "users"):
112                value=value.replace(":",",")
113            args += ['-%s' % backMap(dsgMap, key), '%s' % value]
114       
115        print "Executing: addDatasetGroup %s" % ' '.join(args)
116        addDatasetGroup.main(args)
117
118        #print "\nAdding datasets for:", dsg
119        datasets=confDict[dsg]["datasets"].keys()
120        datasets.sort()
121
122        for ds in datasets:
123            #print "Adding dataset:", ds
124            items=confDict[dsg]["datasets"][ds].items()
125            cmd="%s -g %s" % (ADD_DATASET_CMD, dsg)
126
127            args = ['-g', '%s' % dsg]
128            for (key, value) in items:
129                if value.strip()=="": continue
130                if key in ("roles", "users"):
131                    value=value.replace(":",",")
132
133                args += ['-%s' % backMap(dsMap, key), '%s' % value]
134
135            print "Executing: addDataset %s" % ' '.join(args)
136            addDataset.main(args)
137
138if __name__=="__main__":
139
140def main(args=None):
141    if not args:
142        args=sys.argv[1:]
143    main(args)
144   
145
146
Note: See TracBrowser for help on using the repository browser.