Пример #1
0
 def capture_async(self, headers=None, **kwargs):
     '''
     Returns a screenshot of the URL. Runs asynchronously in Gramex. Arguments
     are same as :py:func:`capture`
     '''
     # If ?start is provided, start server and wait until timeout
     if 'start' in kwargs:
         self.start()
         end_time = time.time() + self.timeout
         while not self.started and time.time() < end_time:
             yield tornado.gen.sleep(self.check_interval)
     if not self.started:
         raise RuntimeError('%s not started. See logs' % self.engine.script)
     if six.PY2:
         recursive_encode(kwargs)
     r = yield self.browser.fetch(self.url,
                                  method='POST',
                                  body=urlencode(kwargs, doseq=True),
                                  raise_error=False,
                                  connect_timeout=self.timeout,
                                  request_timeout=self.timeout,
                                  headers=headers)
     if r.code == OK:
         self._validate_server(r)
     raise tornado.gen.Return(r)
Пример #2
0
 def test_recursive_encode(self):
     ua, ub = 'α', 'β'
     ba, bb = ua.encode('utf-8'), ub.encode('utf-8')
     src = {ua: ub, True: [1, ub], None: {ua: ub, '': {ua: 1, ub: 0.1}}}
     out = {ba: bb, True: [1, bb], None: {ba: bb, b'': {ba: 1, bb: 0.1}}}
     recursive_encode(src)
     eq_(src, out)
Пример #3
0
 def __call__(self, *cmds):
     _key, cmds = cmds, list(cmds)
     if _key not in self.cache:
         # deepcopy of args preserving order
         args = OrderedDict((k, list(v)) for k, v in self.args.items())
         while len(cmds):
             cmd = cmds.pop(0)
             if cmd == ADD:
                 key, val = cmds.pop(0), cmds.pop(0)
                 if key not in args:
                     args[key] = [val]
                 elif val not in args[key]:
                     args[key].append(val)
             elif cmd == SET:
                 key, val = cmds.pop(0), cmds.pop(0)
                 if val is None:
                     args.pop(key, None)
                 else:
                     args[key] = [val]
             elif cmd == POP:
                 key = cmds.pop(0)
                 val = cmds.pop(
                     0) if len(cmds) and cmds[0] not in self.cmds else None
                 if key in args:
                     if val is None:
                         args.pop(key)
                     elif val in args[key]:
                         args[key].remove(val)
             elif cmd == XOR:
                 key, val = cmds.pop(0), cmds.pop(0)
                 if key in args:
                     if val in args[key]:
                         args[key].remove(val)
                     else:
                         args[key].append(val)
                 else:
                     args[key] = [val]
         if six.PY2:
             recursive_encode(args)
         self.cache[_key] = urlencode(args, doseq=True)
     return self.cache[_key]