コード例 #1
0
  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))
コード例 #2
0
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)
コード例 #3
0
    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)
コード例 #4
0
 def _FloatPresenter(unused_dumper, data):
     return yaml.nodes.ScalarNode(
         'tag:yaml.org,2002:float',
         resource_transform.TransformFloat(data))