Beispiel #1
0
    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
Beispiel #2
0
    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()
Beispiel #4
0
 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
Beispiel #5
0
    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)
Beispiel #6
0
 def getDataBlobRevision(self):
     """ Get the data blob revision """
     return encoding.convertToUnicode(self._rev)