diff --git a/scripts/update_metadata.py b/scripts/update_metadata.py new file mode 100644 index 00000000000..2ffab49b1ae --- /dev/null +++ b/scripts/update_metadata.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python2.4 +#Dan Blankenberg +""" +Updates metadata in the database to match rev 1891. + +Remember to backup your database before running. +""" + +import sys, os, ConfigParser +import galaxy.app +from galaxy.util.bunch import Bunch +import galaxy.datatypes.tabular + + +def main(): + ini_file = sys.argv.pop(1) + conf_parser = ConfigParser.ConfigParser({'here':os.getcwd()}) + conf_parser.read(ini_file) + configuration = {} + for key, value in conf_parser.items("app:main"): configuration[key] = value + app = galaxy.app.UniverseApplication( global_conf = ini_file, **configuration ) + + # Step through Database, turning metadata bunches into dictionaries. + print "Changing metadata bunches to dictionaries." + for row in app.model.Dataset.table.select().execute(): + if isinstance (row.metadata, Bunch): + print row.id + app.model.Dataset.table.update(app.model.Dataset.table.c.id == row.id).execute( _metadata = row.metadata.__dict__ ) + + print "Rewriting all metadata to database, setting metadata dbkey, to ensure JSONified storage." + #Make sure all metadata is jsonified + for row in app.model.Dataset.table.select().execute(): + print row.id + data = app.model.Dataset.get(row.id) + dbkey = data.old_dbkey + if not dbkey or data.metadata.dbkey not in ["?", ["?"], None, []]: + dbkey = data.metadata.dbkey + if not dbkey: dbkey = "?" + #change dbkey then flush, then change to real value and flush, ensures that metadata is rewritten to database + data.dbkey="~" + data.flush() + data.dbkey=dbkey + data.flush() + + print "Seeking out tabular based files and setting number of columns." + #Search out tabular datatypes and make sure that number of columns is set. + for row in app.model.Dataset.table.select().execute(): + data = app.model.Dataset.get(row.id) + if issubclass(type(data.datatype), type(app.datatypes_registry.get_datatype_by_extension('tabular'))): + print row.id + galaxy.datatypes.tabular.Tabular().set_meta( data ) #Call tabular set metadata method for all Classes, this will set number of columns. + data.flush() + + app.shutdown() + sys.exit(0) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/update_metadata.sh b/update_metadata.sh new file mode 100644 index 00000000000..a1153d1d3dc --- /dev/null +++ b/update_metadata.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +## Set MACHTYPE to something, +MACHTYPE=`uname -m` +[ "$MACHTYPE" = "Power Macintosh" ] && MACHTYPE="powerpc" +LC_ALL=POSIX +export MACHTYPE LC_ALL + +KERNEL=`uname -s | tr "A-Z" "a-z"` +ARCH="$KERNEL-$MACHTYPE" + +echo "Architecture appears to be $ARCH" + +UNIVERSE_HOME=`pwd` +PYTHONPATH=$UNIVERSE_HOME/lib:$UNIVERSE_HOME/eggs +export UNIVERSE_HOME PYTHONPATH + +## For PBS - if you need to force node paths (i.e. the arch the frontend +## runs on is not the same arch as the compute nodes or Galaxy is +## installed in a different path on the node). +#NODEMACH="i686" +#NODEARCH="linux-i686" +#NODEPATH=$PATH + +## Certain tools (EMBOSS, PAML...) are not distributed with Galaxy. +## If you have them installed, add their bin directories to the PATH. +PATH=$PATH:/depot/apps/$MACHTYPE/bin:/home/universe/$ARCH/EMBOSS/bin:/home/universe/$ARCH/ImageMagick/bin:/home/universe/$ARCH/PAML/paml3.15/bin + +## NODEPATH defaults to $PATH +: ${NODEPATH:=$PATH} + +export PATH NODEPATH + +echo "python path: $PYTHONPATH" + +python2.4 ./scripts/update_metadata.py universe_wsgi.ini $@