Example #1
0
def custom_decoder(d):
    if isinstance(d, list):
        pairs = enumerate(d)
    elif isinstance(d, dict):
        pairs = d.items()
    result = []
    for k, v in pairs:
        if isinstance(v, basestring):
            if v.startswith(_filedata_marker):
                if v == _filedata_marker + _deferred_marker:
                    v = Deferred
                else:
                    filedata = v[len(_filedata_marker):]
                    if filedata:
                        v = StringIO(base64.b64decode(filedata))
                    else:
                        v = ''
            elif v.startswith(_type_marker):
                v = v[len(_type_marker):]
                results = loads(v)
                try:
                    _type = resolve(results['type'])
                    serializer = _serializers[_type]
                    v = serializer.deserialize(results['data'])
                except ImportError:
                    pass
        elif isinstance(v, (dict, list)):
            v = custom_decoder(v)
        result.append((k, v))
    if isinstance(d, list):
        return [x[1] for x in result]
    elif isinstance(d, dict):
        return dict(result)
Example #2
0
def custom_decoder(d):
    if isinstance(d, list):
        pairs = enumerate(d)
    elif isinstance(d, dict):
        pairs = d.items()
    result = []
    for k, v in pairs:
        if isinstance(v, basestring):
            if v.startswith(_filedata_marker):
                if v == _filedata_marker + _deferred_marker:
                    v = Deferred
                else:
                    filedata = v[len(_filedata_marker):]
                    if filedata:
                        v = StringIO(base64.b64decode(filedata))
                    else:
                        v = ''
            elif v.startswith(_type_marker):
                v = v[len(_type_marker):]
                results = loads(v)
                _type = resolve(results['type'])
                serializer = _serializers[_type]
                v = serializer.deserialize(results['data'])
        elif isinstance(v, (dict, list)):
            v = custom_decoder(v)
        result.append((k, v))
    if isinstance(d, list):
        return [x[1] for x in result]
    elif isinstance(d, dict):
        return dict(result)
def test_from_python_output():
  import logging, sys

  if sys.version_info[0] < 3:
    from StringIO import StringIO
  else:
    from io import StringIO
  # create an artificial logger using the logging module
  logger = logging.getLogger("XXX.YYY")

  # add handlers
  out, err = StringIO(), StringIO()
  _warn_err = logging.StreamHandler(err)
  _warn_err.setLevel(logging.WARNING)
  logger.addHandler(_warn_err)

  _debug_info = logging.StreamHandler(out)
  _debug_info.setLevel(logging.DEBUG)
  _debug_info.addFilter(bob.core.log._InfoFilter())
  logger.addHandler(_debug_info)

  # now, set up the logger
  logger = bob.core.log.setup("XXX.YYY")

  # send log messages
  bob.core.log.set_verbosity_level(logger, 2)
  logger.debug("This is a test debug message")
  logger.info("This is a test info message")

  bob.core.log.set_verbosity_level(logger, 0)
  logger.warn("This is a test warn message")
  logger.error("This is a test error message")

  out = out.getvalue().rstrip()
  err = err.getvalue().rstrip()

  assert out.startswith("XXX.YYY")
  assert "INFO" in out
  assert out.endswith("This is a test info message")

  assert err.startswith("XXX.YYY")
  assert "ERROR" in err
  assert err.endswith("This is a test error message")
Example #4
0
def test_from_python_output():
  import logging, sys

  if sys.version_info[0] < 3:
    from StringIO import StringIO
  else:
    from io import StringIO
  # create an artificial logger using the logging module
  logger = logging.getLogger("XXX.YYY")

  # add handlers
  out, err = StringIO(), StringIO()
  _warn_err = logging.StreamHandler(err)
  _warn_err.setLevel(logging.WARNING)
  logger.addHandler(_warn_err)

  _debug_info = logging.StreamHandler(out)
  _debug_info.setLevel(logging.DEBUG)
  _debug_info.addFilter(bob.extension.log._InfoFilter())
  logger.addHandler(_debug_info)

  # now, set up the logger
  logger = bob.core.log.setup("XXX.YYY")

  # send log messages
  bob.core.log.set_verbosity_level(logger, 2)
  logger.debug("This is a test debug message")
  logger.info("This is a test info message")

  bob.core.log.set_verbosity_level(logger, 0)
  logger.warn("This is a test warn message")
  logger.error("This is a test error message")

  out = out.getvalue().rstrip()
  err = err.getvalue().rstrip()

  assert out.startswith("XXX.YYY")
  assert "INFO" in out
  assert out.endswith("This is a test info message")

  assert err.startswith("XXX.YYY")
  assert "ERROR" in err
  assert err.endswith("This is a test error message")
Example #5
0
    def expand_macro(self, formatter, name, content):
        (args, kwargs) = parse_args(content, False)

        page_name = self.MACRO_PAGES + name
        page = WikiPage(self.env, page_name)
        if not page.exists:
            raise RuntimeError(u'Can\'t find page', page_name)

        for i, arg in enumerate(args):
            kwargs[unicode(i+1)] = arg

        text = RelaxedIdTemplate(page.text).safe_substitute(kwargs)

        out = StringIO()
        Formatter(self.env, formatter.context).format(text, out)

        out = out.getvalue().strip()
        if out.startswith(u'<p>'): out = out[3:]
        if out.endswith(u'</p>'): out = out[:-4]
        return out
def _encode_field_name(s):
    """Encodes arbitrary string into an elasticsearch field name

    See:
    https://discuss.elastic.co/t/special-characters-in-field-names/10658/2
    https://discuss.elastic.co/t/illegal-characters-in-elasticsearch-field-names/17196/2
    """
    field_name = StringIO()
    for i, c in enumerate(s):
        if c == ES_FIELD_NAME_ESCAPE_CHAR:
            field_name.write(2 * ES_FIELD_NAME_ESCAPE_CHAR)
        elif c in ES_FIELD_NAME_SPECIAL_CHAR_MAP:
            field_name.write(
                ES_FIELD_NAME_SPECIAL_CHAR_MAP[c])  # encode the char
        else:
            field_name.write(c)  # write out the char as is

    field_name = field_name.getvalue()

    # escape 1st char if necessary
    if any(field_name.startswith(c) for c in ES_FIELD_NAME_BAD_LEADING_CHARS):
        return ES_FIELD_NAME_ESCAPE_CHAR + field_name
    else:
        return field_name