\nsetting | value | "
pageText = pageText+"
---|
\n Build Dimenstions | "+str(gPronterPtr.settings.build_dimensions)+" | \n
"
pageText = pageText+" \n Last Bed Temp | "+str(gPronterPtr.settings.last_bed_temperature)+" | \n
"
pageText = pageText+" \n Last File Path | "+gPronterPtr.settings.last_file_path+" | \n
"
pageText = pageText+" \n Last Temperature | "+str(gPronterPtr.settings.last_temperature)+" | \n
"
pageText = pageText+" \n Preview Extrusion Width | "+str(gPronterPtr.settings.preview_extrusion_width)+" | \n
"
pageText = pageText+" \n Filename | "+str(gPronterPtr.filename)+" |
"
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 MoveButton(object):
def axis(self, *args):
if not args:
raise cherrypy.HTTPError(400, "No Move Command Provided!")
margs = list(args)
axis = margs.pop(0)
if(margs and axis == "x"):
distance = margs.pop(0)
gPronterPtr.onecmd('move X %s' % distance)
return ReloadPage("Moving X Axis " + str(distance))
if(margs and axis == "y"):
distance = margs.pop(0)
gPronterPtr.onecmd('move Y %s' % distance)
return ReloadPage("Moving Y Axis " + str(distance))
if(margs and axis == "z"):
distance = margs.pop(0)
gPronterPtr.onecmd('move Z %s' % distance)
return ReloadPage("Moving Z Axis " + str(distance))
raise cherrypy.HTTPError(400, "Unmached Move Command!")
axis.exposed = True
axis._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 CustomButton(object):
def button(self, *args):
if not args:
raise cherrypy.HTTPError(400, "No Custom Command Provided!")
margs = list(args)
command = margs.pop(0)
if(command):
gPronterPtr.onecmd(command)
return ReloadPage(str(command))
button.exposed = True
button._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 HomeButton(object):
def axis(self, *args):
if not args:
raise cherrypy.HTTPError(400, "No Axis Provided!")
margs = list(args)
taxis = margs.pop(0)
if(taxis == "x"):
gPronterPtr.onecmd('home X')
return ReloadPage("Home X")
if(taxis == "y"):
gPronterPtr.onecmd('home Y')
return ReloadPage("Home Y")
if(taxis == "z"):
gPronterPtr.onecmd('home Z')
return ReloadPage("Home Z")
if(taxis == "all"):
gPronterPtr.onecmd('home')
return ReloadPage("Home All")
axis.exposed = True
axis._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+= _("\n"
elif gPronterPtr.p.printing:
fractioncomplete = float(gPronterPtr.p.queueindex)/len(gPronterPtr.p.mainqueue)
txt+= _("\n"
else:
txt+="\n"
txt+=''
return txt
index.exposed = True
class WebInterface(object):
def __init__(self, pface):
if (sys.version_info[1] > 6):
# 'allow_no_value' wasn't added until 2.7
config = ConfigParser.SafeConfigParser(allow_no_value = True)
else:
config = ConfigParser.SafeConfigParser()
config.read(configfile(pface.web_auth_config or '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()
home = HomeButton()
move = MoveButton()
custom =CustomButton()
def index(self):
pageText = PrintHeader()+self.name+PrintMenu()
pageText+="\n"
pageText+="
\n"
pageText+="
- Connect
\n"
pageText+="- Disconnect
\n"
pageText+="- Reset
\n"
pageText+="- Print
\n"
pageText+="- Pause
\n"
for i in gPronterPtr.cpbuttons:
pageText+="- "+i[0]+"
\n"
#for i in gPronterPtr.custombuttons:
# print(str(i));
pageText+="
\n"
pageText+="
\n"
pageText+="
\n"
pageText+="
"
pageText+="
"
pageText+='
"
pageText+="
\n" #endxy
pageText+="
"
pageText+="
"
pageText+='
"
#TODO Map Z Moves
pageText+="
\n" #endz
pageText+="
\n" #endgui
pageText+="
\n" #endcontent
pageText+="\n"
# Temp Control TBD
# pageText+=""
# 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 KillWebInterfaceThread():
cherrypy.engine.exit()
def StartWebInterfaceThread(webInterface):
current_dir = os.path.dirname(os.path.abspath(__file__))
cherrypy.config.update({'engine.autoreload_on':False})
cherrypy.config.update(configfile(webInterface.pface.web_config or "http.config"))
conf = {'/css/style.css': {'tools.staticfile.on': True,
'tools.staticfile.filename': sharedfile('css/style.css'),
},
'/images/control_xy.png': {'tools.staticfile.on': True,
'tools.staticfile.filename': imagefile('control_xy.png'),
},
'/images/control_z.png': {'tools.staticfile.on': True,
'tools.staticfile.filename': imagefile('control_z.png'),
}}
cherrypy.config.update(configfile(webInterface.pface.web_config or "http.config"))
cherrypy.quickstart(webInterface, '/', config = conf)
if __name__ == '__main__':
cherrypy.config.update(configfile("http.config"))
cherrypy.quickstart(WebInterfaceStub())