import io from matplotlib.backend_bases import GraphicsContextBase, FigureManagerBase, FigureCanvasBase from matplotlib.figure import Figure from fable.logs import log _log = log('fab') class FigureCanvas(FigureCanvasBase): pass class FigureManager(FigureManagerBase): pass def new_figure_manager(num, *args, **kwargs): FigureClass = kwargs.pop('FigureClass', Figure) thisFig = FigureClass(*args, **kwargs) return new_figure_manager_given_figure(num, thisFig) def new_figure_manager_given_figure(num, figure): canvas = FigureCanvas(figure) manager = FigureManager(canvas, num) return manager def show(fmt='svg', **kw): import matplotlib.pyplot as plt from fable.fab import plot formats = ('svg', 'png') if fmt not in formats: raise Exception('Format must be one of: ' + ', '.join(formats))
import asyncio import signal import html import sys import os from fable.back.repl_proto import Events, encode, decode from fable.logs import log _PYTHON = sys.executable _REPL = os.path.join(*os.path.split(__file__)[:-1], 'repl.py') _shells = {} _glock = asyncio.Lock() _log = log('backend') class Shell: def __init__(self, name, user, buffsize=1024): self._proc = None self._user = user self._name = name self._hidden = False self._lock = asyncio.Lock() self._buff = b'' # run state self._running = False self._interrupting = False self._nointerrupt = False
import os import sys import json import signal import argparse from fable.back.interpreter import Interpreter from fable.back.repl_proto import Events, encode, decode from fable.logs import log _log = log('repl') class IO: def __init__(self, inp, out): self.inp = inp self.out = out def write(self, event, data, urgent=False): _log.debug('Writing', event, data) _log.debug('Length', event, len(data)) print(encode(event, data), file=self.out, flush=urgent) def read(self, size=-1): print(encode(Event.INP), file=self.out, flush=True) return decode(self.inp.readline()) def flush(self): self.out.flush()