#!/usr/bin/python import cherrypy, pronterface, re, ConfigParser, io import os.path users = {} def PrintHeader(): return '\n\nPronterface-Web\n\n\n\n' def PrintMenu(): return '' def PrintFooter(): return "" def ReloadPage(action): return ""+action+"" def clear_text(mypass): return mypass gPronterPtr = 0 gWeblog = "" gLogRefresh =5 class SettingsPage(object): def __init__(self): self.name="
Pronterface Settings
" def index(self): pageText=PrintHeader()+self.name+PrintMenu() pageText=pageText+"
\n" pageText=pageText+"\n \n" pageText=pageText+" \n \n" pageText=pageText+" \n \n" pageText=pageText+" \n \n" pageText=pageText+" \n \n" pageText=pageText+" \n " pageText=pageText+PrintFooter() return pageText index.exposed = True class LogPage(object): def __init__(self): self.name="
Pronterface Console
" def index(self): pageText="" pageText+="
" pageText+=gPronterPtr.status.GetStatusText() pageText+="
" pageText=pageText+"
"+gWeblog+"
" pageText=pageText+"" return pageText index.exposed = True class ConsolePage(object): def __init__(self): self.name="
Pronterface Settings
" def index(self): pageText=PrintHeader()+self.name+PrintMenu() pageText+="
" pageText+=PrintFooter() return pageText index.exposed = True class ConnectButton(object): def index(self): #handle connect push, then reload page gPronterPtr.connect(0) return ReloadPage("Connect...") index.exposed = True index._cp_config = {'tools.basic_auth.on': True, 'tools.basic_auth.realm': 'My Print Server', 'tools.basic_auth.users': users, 'tools.basic_auth.encrypt': clear_text} class DisconnectButton(object): def index(self): #handle connect push, then reload page gPronterPtr.disconnect(0) return ReloadPage("Disconnect...") index.exposed = True index._cp_config = {'tools.basic_auth.on': True, 'tools.basic_auth.realm': 'My Print Server', 'tools.basic_auth.users': users, 'tools.basic_auth.encrypt': clear_text} class ResetButton(object): def index(self): #handle connect push, then reload page gPronterPtr.reset(0) return ReloadPage("Reset...") index.exposed = True index._cp_config = {'tools.basic_auth.on': True, 'tools.basic_auth.realm': 'My Print Server', 'tools.basic_auth.users': users, 'tools.basic_auth.encrypt': clear_text} class PrintButton(object): def index(self): #handle connect push, then reload page gPronterPtr.printfile(0) return ReloadPage("Print...") index.exposed = True index._cp_config = {'tools.basic_auth.on': True, 'tools.basic_auth.realm': 'My Print Server', 'tools.basic_auth.users': users, 'tools.basic_auth.encrypt': clear_text} class PauseButton(object): def index(self): #handle connect push, then reload page gPronterPtr.pause(0) return ReloadPage("Pause...") index.exposed = True index._cp_config = {'tools.basic_auth.on': True, 'tools.basic_auth.realm': 'My Print Server', 'tools.basic_auth.users': users, 'tools.basic_auth.encrypt': clear_text} class XMLstatus(object): def index(self): #handle connect push, then reload page txt='\n\n' state="Offline" if gPronterPtr.statuscheck or gPronterPtr.p.online: state="Idle" if gPronterPtr.sdprinting: state="SDPrinting" if gPronterPtr.p.printing: state="Printing" if gPronterPtr.paused: state="Paused" txt=txt+''+state+'\n' txt=txt+''+str(gPronterPtr.filename)+'\n' txt=txt+''+str(gPronterPtr.status.GetStatusText())+'\n' try: temp = str(float(filter(lambda x:x.startswith("T:"),gPronterPtr.tempreport.split())[0].split(":")[1])) txt=txt+''+temp+'\n' except: txt=txt+'NA\n' pass try: temp = str(float(filter(lambda x:x.startswith("B:"),gPronterPtr.tempreport.split())[0].split(":")[1])) txt=txt+''+temp+'\n' except: txt=txt+'NA\n' pass if gPronterPtr.sdprinting: fractioncomplete = float(gPronterPtr.percentdone/100.0) txt+= _("%04.2f %%") % (gPronterPtr.percentdone,) txt+="\n" elif gPronterPtr.p.printing: fractioncomplete = float(gPronterPtr.p.queueindex)/len(gPronterPtr.p.mainqueue) txt+= _("%04.2f %% |") % (100*float(gPronterPtr.p.queueindex)/len(gPronterPtr.p.mainqueue),) txt+="\n" else: txt+="NA\n" txt+='' return txt index.exposed = True class WebInterface(object): def __init__(self, pface): config = ConfigParser.SafeConfigParser(allow_no_value=True) config.read('auth.config') users[config.get("user", "user")] = config.get("user", "pass") self.pface = pface global gPronterPtr global gWeblog self.name="
Pronterface Web-Interface
" gWeblog = "" gPronterPtr = self.pface settings = SettingsPage() logpage = LogPage() console = ConsolePage() #actions connect = ConnectButton() disconnect = DisconnectButton() reset = ResetButton() printbutton = PrintButton() pausebutton = PrintButton() status = XMLstatus() def index(self): pageText=PrintHeader()+self.name+PrintMenu() pageText+="
" pageText+="" pageText+="
" pageText=pageText+"
File Loaded: "+str(gPronterPtr.filename)+"
" pageText+="
" pageText+=PrintFooter() return pageText def AddLog(self, log): global gWeblog gWeblog=gWeblog+"
"+log def AppendLog(self, log): global gWeblog gWeblog=re.sub("\n", "
", gWeblog)+log index.exposed = True class WebInterfaceStub(object): def index(self): return "Web Interface Must be launched by running Pronterface!" index.exposed = True def StartWebInterfaceThread(webInterface): current_dir = os.path.dirname(os.path.abspath(__file__)) cherrypy.config.update({'engine.autoreload_on':False}) cherrypy.config.update("http.config") conf = {'/css/style.css': {'tools.staticfile.on': True, 'tools.staticfile.filename': os.path.join(current_dir, 'css/style.css'), }} cherrypy.config.update("http.config") cherrypy.quickstart(webInterface, '/', config=conf) if __name__ == '__main__': cherrypy.config.update("http.config") cherrypy.quickstart(WebInterfaceStub())
settingvalue
Build Dimenstions"+str(gPronterPtr.settings.build_dimensions)+"
Last Bed Temp"+str(gPronterPtr.settings.last_bed_temperature)+"
Last File Path"+gPronterPtr.settings.last_file_path+"
Last Temperature"+str(gPronterPtr.settings.last_temperature)+"
Preview Extrusion Width"+str(gPronterPtr.settings.preview_extrusion_width)+"
Filename"+str(gPronterPtr.filename)+"