1 | #!/usr/bin/env python |
---|
2 | #Dan Blankenberg |
---|
3 | """ |
---|
4 | Updates metadata in the database to match rev 1891. |
---|
5 | |
---|
6 | Remember to backup your database before running. |
---|
7 | """ |
---|
8 | |
---|
9 | import sys, os, ConfigParser |
---|
10 | import galaxy.app |
---|
11 | from galaxy.util.bunch import Bunch |
---|
12 | import galaxy.datatypes.tabular |
---|
13 | |
---|
14 | assert sys.version_info[:2] >= ( 2, 4 ) |
---|
15 | |
---|
16 | def main(): |
---|
17 | ini_file = sys.argv.pop(1) |
---|
18 | conf_parser = ConfigParser.ConfigParser({'here':os.getcwd()}) |
---|
19 | conf_parser.read(ini_file) |
---|
20 | configuration = {} |
---|
21 | for key, value in conf_parser.items("app:main"): configuration[key] = value |
---|
22 | app = galaxy.app.UniverseApplication( global_conf = ini_file, **configuration ) |
---|
23 | |
---|
24 | #Step through Database, turning metadata bunches into dictionaries. |
---|
25 | #print "Changing metadata bunches to dictionaries." |
---|
26 | #for row in app.model.Dataset.table.select().execute(): |
---|
27 | # if isinstance (row.metadata, Bunch): |
---|
28 | # print row.id |
---|
29 | # app.model.Dataset.table.update(app.model.Dataset.table.c.id == row.id).execute( _metadata = row.metadata.__dict__ ) |
---|
30 | |
---|
31 | #Make sure all metadata is jsonified |
---|
32 | #print "Rewriting all metadata to database, setting metadata dbkey, to ensure JSONified storage." |
---|
33 | #for row in app.model.Dataset.table.select().execute(): |
---|
34 | # print row.id |
---|
35 | # data = app.model.Dataset.get(row.id) |
---|
36 | # dbkey = data.old_dbkey |
---|
37 | # if not dbkey or data.metadata.dbkey not in ["?", ["?"], None, []]: |
---|
38 | # dbkey = data.metadata.dbkey |
---|
39 | # if not dbkey: dbkey = "?" |
---|
40 | # #change dbkey then flush, then change to real value and flush, ensures that metadata is rewritten to database |
---|
41 | # data.dbkey="~" |
---|
42 | # data.flush() |
---|
43 | # data.dbkey=dbkey |
---|
44 | # data.flush() |
---|
45 | |
---|
46 | |
---|
47 | #Search out tabular datatypes (and subclasses) and initialize metadata |
---|
48 | print "Seeking out tabular based files and initializing metadata" |
---|
49 | for row in app.model.Dataset.table.select().execute(): |
---|
50 | data = app.model.Dataset.get(row.id) |
---|
51 | if issubclass(type(data.datatype), type(app.datatypes_registry.get_datatype_by_extension('tabular'))): |
---|
52 | print row.id, data.extension |
---|
53 | #Call meta_data for all tabular files |
---|
54 | #special case interval type where we do not want to overwrite chr, start, end, etc assignments |
---|
55 | if issubclass(type(data.datatype), type(app.datatypes_registry.get_datatype_by_extension('interval'))): |
---|
56 | galaxy.datatypes.tabular.Tabular().set_meta(data) |
---|
57 | else: |
---|
58 | data.set_meta() |
---|
59 | app.model.context.add( data ) |
---|
60 | app.model.context.flush() |
---|
61 | |
---|
62 | #Search out maf datatypes and make sure that available species is set. |
---|
63 | #print "Seeking out maf files and setting available species." |
---|
64 | #for row in app.model.Dataset.table.select(app.model.Dataset.table.c.extension == 'maf').execute(): |
---|
65 | # print row.id |
---|
66 | # sys.stdout.flush() |
---|
67 | # data = app.model.Dataset.get(row.id) |
---|
68 | # if data.missing_meta: |
---|
69 | # data.set_meta() #Call maf set metadata method, setting available species |
---|
70 | # data.flush() |
---|
71 | |
---|
72 | app.shutdown() |
---|
73 | sys.exit(0) |
---|
74 | |
---|
75 | if __name__ == "__main__": |
---|
76 | main() |
---|