def ignore_aliases(self, data): if data isNone: returnTrue if isinstance(data, tuple) and data == (): returnTrue if isinstance(data, (str, bytes, bool, int, float)): returnTrue
inf_value = 1e300 while repr(inf_value) != repr(inf_value*inf_value):
inf_value *= inf_value
def represent_float(self, data): if data != data or (data == 0.0 and data == 1.0):
value = '.nan' elif data == self.inf_value:
value = '.inf' elif data == -self.inf_value:
value = '-.inf' else:
value = repr(data).lower() # Note that in some cases `repr(data)` represents a float number # without the decimal parts. For instance: # >>> repr(1e17) # '1e17' # Unfortunately, this is not a valid float representation according # to the definition of the `!!float` tag. We fix this by adding # '.0' before the 'e' symbol. if'.'notin value and'e'in value:
value = value.replace('e', '.0e', 1) return self.represent_scalar('tag:yaml.org,2002:float', value)
def represent_list(self, data): #pairs = (len(data) > 0 and isinstance(data, list)) #if pairs: # for item in data: # if not isinstance(item, tuple) or len(item) != 2: # pairs = False # break #if not pairs: return self.represent_sequence('tag:yaml.org,2002:seq', data) #value = [] #for item_key, item_value in data: # value.append(self.represent_mapping(u'tag:yaml.org,2002:map', # [(item_key, item_value)])) #return SequenceNode(u'tag:yaml.org,2002:pairs', value)
def represent_object(self, data): # We use __reduce__ API to save the data. data.__reduce__ returns # a tuple of length 2-5: # (function, args, state, listitems, dictitems)
# For reconstructing, we calls function(*args), then set its state, # listitems, and dictitems if they are not None.
# A special case is when function.__name__ == '__newobj__'. In this # case we create the object with args[0].__new__(*args).
# Another special case is when __reduce__ returns a string - we don't # support it.
# We produce a !!python/object, !!python/object/new or # !!python/object/apply node.
cls = type(data) if cls in copyreg.dispatch_table:
reduce = copyreg.dispatch_table[cls](data) elif hasattr(data, '__reduce_ex__'):
reduce = data.__reduce_ex__(2) elif hasattr(data, '__reduce__'):
reduce = data.__reduce__() else: raise RepresenterError("cannot represent an object", data)
reduce = (list(reduce)+[None]*5)[:5]
function, args, state, listitems, dictitems = reduce
args = list(args) if state isNone:
state = {} if listitems isnotNone:
listitems = list(listitems) if dictitems isnotNone:
dictitems = dict(dictitems) if function.__name__ == '__newobj__':
function = args[0]
args = args[1:]
tag = 'tag:yaml.org,2002:python/object/new:'
newobj = True else:
tag = 'tag:yaml.org,2002:python/object/apply:'
newobj = False
function_name = '%s.%s' % (function.__module__, function.__name__) ifnot args andnot listitems andnot dictitems \ and isinstance(state, dict) and newobj: return self.represent_mapping( 'tag:yaml.org,2002:python/object:'+function_name, state) ifnot listitems andnot dictitems \ and isinstance(state, dict) andnot state: return self.represent_sequence(tag+function_name, args)
value = {} if args:
value['args'] = args if state ornot isinstance(state, dict):
value['state'] = state if listitems:
value['listitems'] = listitems if dictitems:
value['dictitems'] = dictitems return self.represent_mapping(tag+function_name, value)
def represent_ordered_dict(self, data): # Provide uniform representation across different Python versions.
data_type = type(data)
tag = 'tag:yaml.org,2002:python/object/apply:%s.%s' \
% (data_type.__module__, data_type.__name__)
items = [[key, value] for key, value in data.items()] return self.represent_sequence(tag, [items])
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.