def __init__(self, withname, mode='file'): """Object representing the metadata of filename. If mode == 'mad' - the filename is assumed to be the madfile. If mode == 'file', the metadata file is assumed to be the filename plus .mad. Note - started to ignore the 'mode' parameter - will determine that automatically (if the file ends with a .mad or not) """ if withname[-4:] == '.mad': #this is the .mad file self.filename = withname[:-4] self.metafile = withname else: self.filename = withname self.metafile = withname + '.mad' if (not os.path.exists(self.filename) and not os.path.exists(self.metafile)): mad.util.exer("Neither filename not metadata file " + "exist - do not know what to do") G.debug("created a metadata file for file %s" % self.filename) G.debug("metadata file is %s" % self.metafile) self.metadata = {} self.load()
def save(md): G.debug('pfridge save') if not 'Gid' in md.keys(): G.critical("error - no gid defined") sys.exit(-1) if not 'Pfridge' in md.keys(): url = conf.pfridge.gidserver url += 'register/%s' % md['Gid'] md['pfridge'] = md['Gid'] G.debug("pfridge GID register") G.debug("calling %s" % url) for k in md.keys(): if k == 'Gid': continue if k == 'Pfridge': continue v = md[k] url = conf.pfridge.metaserver + 'set/%s/%s' % (md['Gid'], k) G.debug("pfridge metadata store: %s %s" % (k, v)) rv = _POST(url, v) G.debug("rv %s" % rv)
def _POST(url, data): data = urllib.urlencode({'value': data}) G.debug('data encoded %s' % data) G.debug('contacting %s' % url) opener = urllib2.build_opener(urllib2.HTTPHandler) request = urllib2.Request(url, data) request.get_method = lambda: 'POST' F = opener.open(request) return F.read()
def hook_metadata_prepare(mdf): if 'gid' in mdf.metadata: G.debug("metadata has a gid") return True if not 'Sha1sum' in mdf.metadata: G.debug("metadata does not have a shasum") return True gid = _get_gid(mdf.metadata['Sha1sum']) mdf.metadata['Gid'] = gid
def load(self): """ Check if there is a metadata file for *filename*. If so - load if not - return an empty dict """ if os.path.exists(self.metafile): G.debug("loading metadata") with open(self.metafile) as F: self.metadata = yaml.load(F) plugin.run('post_metadata_load', self)
def run(args): """ add a key value pair to parse_argument file's metadata """ files = [] remove_keys = [] kvs = [] for parse_argument in args.setargs: #is this parse_argument file or parse_argument key=value pair? if '=' in parse_argument: #it seems this is a key=value pair key, value = parse_argument.split('=', 1) if (not args.force) and (not key in conf.datatypes.keys()): G.critical("Invalid key %s" % key) print "Available keys are:" print ", ".join(conf.datatypes.keys()) sys.exit(-1) if not value: remove_keys.append(key) G.info("Preparing %s for removal" % key) else: kvs.append((key, value)) G.debug("adding key, value pair %s, %s" % (key, value)) else: fmd = Metadata(parse_argument) files.append(fmd) G.info('found %d key value pairs' % len(kvs)) G.info('found %d files' % len(files)) if len(files) == 0: exerr("Must specify at least one file") for madfile in files: G.info("Processing file %s" % madfile) for k, v in kvs: G.debug("applying %s, %s" % (k, v)) madfile.apply_kv(k, v) madfile.remove_keys(remove_keys) madfile.save()