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)
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")
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")
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