def hasMetaDataValue(self, complete_value_string, **kwargs): field_array = complete_value_string.rsplit(':', 1) # TODO modify to accept base level dicts and lists if len(field_array) < 2: logger.warning( "hasMetaDataValue() requires a complete, colon delimited, key value pairing." ) return False value = utils.get_field_value(self._meta_data, field_array[0], {}) if value is None: return False else: if isinstance(value, dict): for value_iterkey in value.iterkeys(): if field_array[1] == value_iterkey: return True if isinstance(value, list): for item in value: if field_array[1] == encoding.convertToUnicode(item): return True if field_array[1] == encoding.convertToUnicode(value): return True return False
def __str__(self): '''Prints out the various fields in the data blob''' return_string = "" return_string += "DataBlob UUID: %s\n" % (self._uuid) return_string += "DataBlob Revision: %s\n" % (self._rev) return_string += "DataBlob Type: %s\n" % (self._type) return_string += "Creation Time: %s\n" % (self.getCreationDateString()) return_string += "Meta data\n" for k, v in self._meta_data.iteritems(): print " :::Converting:", k, v return_string += "\t\t[" + encoding.convertToUnicode( k) + "] = " + self.str_conversion(v) print " :::Finished conversion", k, v return_string += "Binary data\n" for k, v in self._binary_data.iteritems(): # Sanity check print " :::binary iteritems" print k, v if v["data"] is None: return_string += "\t[ " + encoding.convertToUnicode( k) + " ] ( Empty!!! )" else: return_string += "\t[ " + encoding.convertToUnicode( k ) + " ] ( " + encoding.convertToUnicode( v["mime_type"] ) + " ) = binary object of length: " + encoding.convertToUnicode( len(v["data"])) + "\n" print print print print return_string return return_string
def logMessage(self, category, *args): calling_function = "N/A" if inspect.stack: calling_function = os.path.basename( inspect.stack()[1][1]).split('.')[0] # If silent do nothing if self._silent: return # Conditionals on verbose, info and warning if category == "verbose": if self._verbose: print curtime() + "\tVerbose:", print "(%s)" % (calling_function), for a in args: print encoding.convertToUnicode( repr(a)).encode("utf-8")[:_max_log_item], print elif category == "info": if self._info: print curtime() + "\tInfo:", print "(%s)" % (calling_function), for a in args: print encoding.convertToUnicode( repr(a)).encode("utf-8")[:_max_log_item], print elif category == "warning": if self._warning: print curtime() + "\tWarning:", print "(%s)" % calling_function, for a in args: print encoding.convertToUnicode( repr(a)).encode("utf-8")[:_max_log_item], print elif category == "error": self._errors_found = True print curtime() + "\tError:", for a in args: print encoding.convertToUnicode( repr(a)).encode("utf-8")[:_max_log_item], print # Print compressed stack trace for s in inspect.stack()[1:]: print '\t', print '%s:%d:%s ' % (os.path.basename(s[1]), s[2], s[3]), print s[4] else: raise TypeError("Unknown logger category:", category) # Flush output if self._auto_flush: sys.stdout.flush()
def str_conversion(self, value): return_string = "" # print "====in string conversion" if type(value) is list: # print "====list" return_string += "<<<List>>>\n" for item in value: return_string += "\t\t[" + encoding.convertToUnicode( self.str_conversion(item)) + "]\n" elif type(value) is dict: # print "====dict" return_string += "<<<Dict>>>\n" for key, value in value.iteritems(): # print "\tTrying to convert:",key,value return_string += "\t\t[" + encoding.convertToUnicode( key) + "] = " + encoding.convertToUnicode( self.str_conversion(value)) + "\n" else: # print "====else",value return_string += encoding.convertToUnicode(value) + "\n" # print "Finished converting",value return return_string
def convertStringsToUnicode(self, verbose=True): """ Validate the meta data fields in the data blob, and make sure they have sane values. For more advanced validation a subclass can overwrite this method """ self.getDataBlobUUID() self.getDataBlobType() self.getCreationDate() for field in self.getRequiredMetaFields(): self.getMetaData(field) # Convert all non unicode strings meta = self.getMetaDataDict() for k, v in meta.iteritems(): if isinstance(v, str): if verbose: logger.info("DataBlob contains non-unicode value at key:" + k + " value: " + v + "converting...") v = encoding.convertToUnicode(v)
def getDataBlobRevision(self): """ Get the data blob revision """ return encoding.convertToUnicode(self._rev)