Example #1
0
 def loadSettings(self, settings):
     self.splitterstate = settings.value('splitter', '', QByteArray)
     self.presetdict = {}
     # read new format if present
     settings.beginGroup('presets_new')
     for key in settings.childKeys():
         self.presetdict[key] = json.loads(settings.value(key))
     settings.endGroup()
     # convert old format
     try:
         presetval = settings.value('presets')
         if presetval:
             for (name, value) in presetval.items():
                 if not isinstance(value, bytes):
                     value = value.encode('latin1')
                 self.presetdict[name] = pickle.loads(value)
     except Exception:
         pass
     settings.remove('presets')
     self.last_views = []
     settings.beginGroup('views_new')
     for key in settings.childKeys():
         try:
             info = json.loads(settings.value(key))
             self.last_views.append((key, info))
         except Exception:
             pass
     settings.endGroup()
Example #2
0
    def _refresh_presets(self):
        pmenu = self.presetmenu
        pmenu.clear()
        delmenu = QMenu('Delete', self)
        try:
            for preset, info in iteritems(self.presetdict):
                paction = QAction(preset, self)
                pdelaction = QAction(preset, self)
                info = pickle.loads(str(info))

                def launchpreset(on, info=info):
                    self._createViewFromDialog(info)

                def delpreset(on, name=preset, act=paction, delact=pdelaction):
                    pmenu.removeAction(act)
                    delmenu.removeAction(delact)
                    self.presetdict.pop(name, None)
                    self._refresh_presets()

                paction.triggered[bool].connect(launchpreset)
                pmenu.addAction(paction)
                pdelaction.triggered[bool].connect(delpreset)
                delmenu.addAction(pdelaction)
        except AttributeError:
            self.presetdict = {}
        if self.presetdict:
            pmenu.addSeparator()
            pmenu.addMenu(delmenu)
        else:
            pmenu.addAction('(no presets created)')
Example #3
0
def test_pickable():
    store = {'phi': 3.1415926535897931, 'type': 'e', 'dx': 400, 'chi': 0.0,
             'theta': -0.17453292519943295, 'omega': 0.0}
    hw = None
    pos = residevice.position.PositionFromStorage(hw, store)
    proxied = residevice.ResiPositionProxy(pos)
    res = pickle.dumps(proxied, protocol=0)
    restored = pickle.loads(res)
    print(store)
    print(restored.storable())
    assert restored.storable() == store
Example #4
0
 def loadSettings(self, settings):
     self.splitterstate = settings.value('splitter', '', QByteArray)
     presetval = settings.value('presets')
     self.presetdict = presetval if presetval is not None else {}
     self.last_views = []
     settings.beginGroup('views')
     for key in settings.childKeys():
         try:
             info = pickle.loads(bytes(settings.value(key, '', QByteArray)))
             self.last_views.append((key, info))
         except Exception:
             pass
     settings.endGroup()
Example #5
0
def test_readonly_objects():
    d = readonlydict({'a': 1, 'b': 2})
    assert raises(TypeError, d.update, {})

    # pickle Protocoll 0
    unpickled = pickle.loads(pickle.dumps(d))
    assert isinstance(unpickled, readonlydict)
    assert len(unpickled) == 2
    # pickle Protocoll 2
    unpickled = pickle.loads(pickle.dumps(d, 2))
    assert isinstance(unpickled, readonlydict)
    assert len(unpickled) == 2

    l = readonlylist([1, 2, 3])
    assert raises(TypeError, l.append, 4)

    # pickle Protocoll 0
    unpickled = pickle.loads(pickle.dumps(l))
    assert isinstance(unpickled, readonlylist)
    assert len(unpickled) == 3
    # pickle Protocoll 2
    unpickled = pickle.loads(pickle.dumps(l, 2))
    assert isinstance(unpickled, readonlylist)
    assert len(unpickled) == 3
Example #6
0
 def _convert(node):
     if isinstance(node, (Str, Bytes)):
         return node.s
     elif isinstance(node, Num):
         return node.n
     elif isinstance(node, Tuple):
         return tuple(map(_convert, node.elts))
     elif isinstance(node, List):
         return readonlylist(map(_convert, node.elts))
     elif isinstance(node, Dict):
         return readonlydict((_convert(k), _convert(v)) for k, v
                             in zip(node.keys, node.values))
     elif isinstance(node, Set):
         return frozenset(map(_convert, node.elts))
     elif isinstance(node, Name):
         if node.id in _safe_names:
             return _safe_names[node.id]
     elif isinstance(node, NameConstant):
         return node.value
     elif isinstance(node, UnaryOp) and \
             isinstance(node.op, USub) and \
             isinstance(node.operand, Name) and \
             node.operand.id in _safe_names:
         return -_safe_names[node.operand.id]
     elif isinstance(node, UnaryOp) and \
             isinstance(node.op, USub) and \
             isinstance(node.operand, Num):
         return -node.operand.n
     elif isinstance(node, BinOp) and \
             isinstance(node.op, (Add, Sub)) and \
             isinstance(node.right, Num) and \
             isinstance(node.right.n, complex) and \
             isinstance(node.left, Num) and \
             isinstance(node.left.n, number_types):
         left = node.left.n
         right = node.right.n
         if isinstance(node.op, Add):
             return left + right
         else:
             return left - right
     elif isinstance(node, Call) and node.func.id == 'cache_unpickle':
         return pickle.loads(b64decode(ast_eval(node.args[0])))
     raise ValueError('malformed literal string with %s' % node)
Example #7
0
 def _object_hook(self, obj):
     if '__pickle__' in obj:
         return pickle.loads(obj['__pickle__'].encode('latin1'))
     return obj
Example #8
0
 def deserialize_event(self, data, evtname=None):
     return evtname, pickle.loads(data)
Example #9
0
 def deserialize_reply(self, data, success=None):
     assert success is not None
     data = pickle.loads(data) if data else None
     return success, data
Example #10
0
 def deserialize_cmd(self, data, cmdname=None):
     return cmdname, pickle.loads(data)
Example #11
0
 def deserialize_event(self, data, evtname=None):
     return evtname, pickle.loads(data, encoding='latin1')
Example #12
0
 def deserialize_cmd(self, data, cmdname=None):
     return cmdname, pickle.loads(data, encoding='latin1')
Example #13
0
    def run(cls, sock, uuid, setups, user, code, quiet=False, debug=False):
        session.__class__ = cls
        session._is_sandboxed = sock.startswith('ipc://')
        session._debug_log = debug

        socket = nicos_zmq_ctx.socket(zmq.DEALER)
        socket.connect(sock)

        # we either get an empty message (retrieve cache data ourselves)
        # or a pickled key-value database
        data = socket.recv()
        db = pickle.loads(data) if data else None

        # send log messages back to daemon if requested
        session.log_sender = SimLogSender(socket, session, uuid, quiet)

        username, level = user.rsplit(',', 1)
        session._user = User(username, int(level))

        try:
            session.__init__(SIMULATION)
        except Exception as err:
            try:
                session.log.exception('Fatal error while initializing')
            finally:
                print('Fatal error while initializing:', err, file=sys.stderr)
            return 1

        # Give a sign of life and then tell the log handler to only log
        # errors during setup.
        session.log.info('setting up dry run...')
        session.begin_setup()
        # Handle "print" statements in the script.
        sys.stdout = LoggingStdout(sys.stdout)

        try:
            # Initialize the session in simulation mode.
            session._mode = SIMULATION

            # Load the setups from the original system, this should give the
            # information about the cache address.
            session.log.info('loading simulation mode setups: %s',
                             ', '.join(setups))
            session.loadSetup(setups, allow_startupcode=False)

            # Synchronize setups and cache values.
            session.log.info('synchronizing to master session')
            session.simulationSync(db)

            # Set session to always abort on errors.
            session.experiment.errorbehavior = 'abort'
        except:  # really *all* exceptions -- pylint: disable=W0702
            session.log.exception('Exception in dry run setup')
            session.log_sender.finish()
            session.shutdown()
            return 1

        # Set up log handlers to output everything.
        session.log_sender.begin_exec()
        # Execute the script code.
        exception = False
        try:
            last_clock = session.clock.time
            code, _ = parseScript(code)
            for i, c in enumerate(code):
                exec_(c, session.namespace)
                time = session.clock.time - last_clock
                last_clock = session.clock.time
                session.log_sender.send_block_result(i, time)
        except Abort:
            session.log.info('Dry run finished by abort()')
        except:  # pylint: disable=W0702
            session.log.exception('Exception in dry run')
            exception = True
        else:
            session.log.info('Dry run finished')
        finally:
            session.log_sender.finish(exception)

        # Shut down.
        session.shutdown()