def Flatten(obj, name, res): """Recursively appends keys in path from obj into res. Args: obj: The object to flatten. name: The key name of the current obj. res: The ordered result value list. """ if isinstance(obj, list): if obj: for i, item in enumerate(obj): Flatten(item, '{name}[{index}]'.format(name=name, index=i), res) else: res.append((name, [])) elif isinstance(obj, dict): if obj: for k, v in sorted(obj.iteritems()): Flatten(v, '{name}{dot}{key}'.format( name=name, dot='.' if name else '', key=k), res) else: res.append((name, {})) elif isinstance(obj, float): res.append((name, resource_transform.TransformFloat(obj))) else: res.append((name, obj))
def _Stringify(value): # pylint: disable=invalid-name """Represents value as a JSON string if it's not a string.""" if value is None: return '' elif isinstance(value, (basestring, console_attr.Colorizer)): return value elif isinstance(value, float): return resource_transform.TransformFloat(value) elif hasattr(value, '__str__'): return unicode(value) else: return json.dumps(value, sort_keys=True)
def _AddRecord(self, record, delimit=False): """Prints the current record as CSV. Printer attributes: noheading: bool, Disable the initial key name heading record. Args: record: A list of JSON-serializable object columns. delimit: bool, Print resource delimiters -- ignored. Raises: ToolException: A data value has a type error. """ # The CSV heading has three states: # 1: No heading, used by ValuePrinter and CSV when 2. and 3. are empty. # 2: Heading via AddHeading(). # 3: Default heading from format labels, if specified. if not self._heading_printed: self._heading_printed = True if 'no-heading' not in self.attributes: if self._heading: labels = self._heading else: labels = self.column_attributes.Labels() if labels: labels = [x.lower() for x in labels] if labels: self._out.write( self._separator.join( [self._QuoteField(label) for label in labels]) + self._terminator) line = [] for col in record: if col is None: val = '' elif isinstance(col, dict): val = self._delimiter.join([ self._QuoteField(u'{0}={1}'.format( console_attr.DecodeFromInput(k), console_attr.DecodeFromInput(v))) for k, v in sorted(col.iteritems()) ]) elif isinstance(col, list): val = self._delimiter.join([ self._QuoteField(console_attr.DecodeFromInput(x)) for x in col ]) elif isinstance(col, float): val = self._QuoteField(resource_transform.TransformFloat(col)) else: val = self._QuoteField(console_attr.DecodeFromInput(col)) line.append(val) self._out.write(self._separator.join(line) + self._terminator)
def _FloatPresenter(unused_dumper, data): return yaml.nodes.ScalarNode( 'tag:yaml.org,2002:float', resource_transform.TransformFloat(data))