From 4158bc63ca5c7b63ff0b7fb08b9f91a169fe2f1a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 4 Jun 2012 13:44:49 -0500 Subject: [PATCH] Only enable webinterface if CherryPy is available. Fix buttons on the web --- .../dist/CherryPy-3.2.2-py2.7.egg | Bin 851999 -> 851999 bytes libs/CherryPy-3.2.2/files.txt | 231 ++++++++++++++++++ pronterface.py | 95 +++++-- webinterface.py | 61 ++++- 4 files changed, 351 insertions(+), 36 deletions(-) create mode 100644 libs/CherryPy-3.2.2/files.txt diff --git a/libs/CherryPy-3.2.2/dist/CherryPy-3.2.2-py2.7.egg b/libs/CherryPy-3.2.2/dist/CherryPy-3.2.2-py2.7.egg index 17e220a5c34bc956b83ae8a5a5c3d189e0461578..b68299a8d1bf6187f7889bf23341b02663e4517e 100644 GIT binary patch delta 2224 zcmXw&dr(w$6vyx0-M#lN_W-USC<_XPiK!q;l%u2AOomgW(C9R2iA+k4C}rwoPaqT@ zJXDY?IlAVMlD37&%$+e3g%uHX!IYGmV>!uwZ^YDV{6+XQC1om$eX~t-x_E!a%3SZxqy*ZkjnBNOJ-;M+1;- zk(#xuNK-Z1SxCW+8nY3prbpxJjWpuQZ=>jrCHz@m)OrDBZDfNT#oKH$0Kr({yRUNZ*&}!rw-!7}hyYK(f2& z+XN(=hyEs=Vza` zq!VqzKXeO`yqLo7!$Yie#b{}Os3R}s%fwcH)GmA@CeqfHWQ!Z8pk^r+m(q;hD$z`P zKGG~klB*Ye;ugBg7+&hvVMVkkt(Ki$y{nLxe#f{0iQ`h;70oqik}}i;vf49Vdf{Xo z4U5OW4Gn!2cA3C&CMEt2X`%c|O&F<7#}A#amuAsBH#EwJA`V z>5dIH{7^n~zLDd$E#f#|jW+Tso zju@>?D)4tu3;gBTA7Q7CcsWsr4)`43#jALZYu70&vSd%?%S72lwd|G)^_Uo&EdNJO z@$(GXPBxYulXbM16{qBb6m7D|J85KOzC4>u9=Is8BgB`<3Pnw~^tv5MtWo z3+r*(jOAdDL~_anFJ3!!jaBi_g9W3K5|an>MiupB9&~Du((_@m7Aao^Gfq%eU4&hj zUw;u25!M&NZiLQ47TR%%g(_m}9d-JVL}3 zh(oBn0!avKOJEN|dkG{U#9n2};8jRNCApL}G+kq%Q)3WV#*~6G*o(=b*BRWo&it&o z!5lW-K}ETo2r@TzG|i<)v%5eYgs6}mKh4DqmX*34yI6R`&~GS zt>f-N27>#2Hsj2FNJk~49W5PZCH?RR!uA399l>Xi9n3li y?Wml4!CZ$8u~63-q`zdB8aNE^;}`#F7(%hCY#2gNaU6k#2p^2VVuaKYIQT!lduJ~I delta 2224 zcmXxjdrTBp6bInh+1+_C2XF-eSx{)OVo?yKv__+7Qj2M+LZfMFTai?$5u^__wNIcZ zK6t1gBQ?6#P^DTbBFQ9{f&wC24eA|W|DZU_4mUhEIxY)qN~V$0b-MSNy!+_4m3pL@)ZYR~9%h_{2nE7mGue+i8eqz^?bstz*!z_Ki zdfM7@HpdP%W@XD64eD5_9yvL8!b2eV`fD(yz~V zKxMLqeN$0h(+nkkC|igj%NzB5l;QXkl=&OOO%GIex*fL2jGh~ENBuT~ z`;^>V7tB5L!L0vd?u8TT$u@2}5ueB%AU8Ua$<>oAE|&`>y7V`Zy>W&ui`uXF}w6FpG2P8@*IB4Ow97i_?6_0!8+bT zp7YUmK9WrJa){qX-en9c3>$DqG%u`|9Mm@*(lKlwKO!(pnyak4E=-rl+CWkUrV1|| zOj?;g@m*-BT6UVoFlIU74Z%(J@(_%Q=W9ZSBQ{tWm~}DDj$sI6d zLZOE|jloLc5qUz5Ey7t7?%2~W*gR2NP2vh~{GRg{i0X6E{xcpC;yY6uRD~pk3%{3f z3=`!ndpB{@mAz5oR}!unixqo`p6(LQ3z%6F#d15;=2Wqh{5Qh?5}io@=xQ;H!>Up% zo*~+JU;HRS%aV)y?UW*aY2Jspq9;L0GT;PkuFtY{EW>mg7kxGoX zFfK*d(g(%l-whSc~MC0$8Xe%BceA)uA#9VTK-6sDK4e zkk=K%Zd~773`vMhC9nt4TS7}aFVoViNhDo?{kX(R87+mB!vS1l zEr$d|#8rq#)Lw;T#D)ski|DR^MD0tEI+%(qEBTevth8dTrpT?PjThF?Gd)$FOz$eaJ+(KA>lueE=Dlgfv4o;(jy8h@B7V8T=zSfl2No zIE4snp}SgJ=sVb9gTq*|YlS0-Q>}0a5!^;mHHpvK=@>8C;W(~2(g8;i^B>dB6_4pW zQJr+2u})e#+yy6b@tfUXLDYBC(_@~fXQ^L#R*!mu_O;7B@GBzdsoGCVYM!bCYWSj8 zZLEQP23d$>&(s@h$=p8mC=I23>VO)eo|9e5=yO=0(;_9HANHf-eyhqiGX{VKsLO0^VOFDJf7%lZpBIA|%Qnkf_ g "title" [/c "colour"] command'); self.webInterface.AddLog('Defines custom button. Usage: button "title" [/c "colour"] command') + print _('Defines custom button. Usage: button "title" [/c "colour"] command'); + if webavail: + self.webInterface.AddLog('Defines custom button. Usage: button "title" [/c "colour"] command') def do_button(self,argstr): def nextarg(rest): @@ -889,7 +913,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): pass command=argstr.strip() if num<0 or num>=64: - print _("Custom button number should be between 0 and 63"); self.webInterface.AddLog("Custom button number should be between 0 and 63") + print _("Custom button number should be between 0 and 63"); + if webavail: + self.webInterface.AddLog("Custom button number should be between 0 and 63") return while num >= len(self.custombuttons): self.custombuttons+=[None] @@ -1143,7 +1169,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): self.onecmd(e.GetEventObject().properties[1]) self.cur_button=None except: - print _("event object missing"); self.webInterface.AddLog("event object missing") + print _("event object missing"); + if webavail: + self.webInterface.AddLog("event object missing") self.cur_button=None raise @@ -1160,7 +1188,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole): except: pass self.Destroy() - webinterface.KillWebInterfaceThread() + if webavail: + webinterface.KillWebInterfaceThread() def do_monitor(self,l=""): if l.strip()=="": @@ -1172,12 +1201,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole): self.monitor_interval=float(l) wx.CallAfter(self.monitorbox.SetValue,self.monitor_interval>0) except: - print _("Invalid period given."); self.webInterface.AddLog("Invalid period given.") + print _("Invalid period given."); + if webavail: + self.webInterface.AddLog("Invalid period given.") self.setmonitor(None) if self.monitor: - print _("Monitoring printer."); self.webInterface.AddLog("Monitoring printer.") + print _("Monitoring printer."); + if webavail: + self.webInterface.AddLog("Monitoring printer.") else: - print _("Done monitoring."); self.webInterface.AddLog("Done monitoring.") + print _("Done monitoring."); + if webavail: + self.webInterface.AddLog("Done monitoring.") def setmonitor(self,e): @@ -1194,7 +1229,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole): if not len(command): return wx.CallAfter(self.logbox.AppendText,">>>"+command+"\n") - self.webInterface.AppendLog(">>>"+command+"\n") + if webavail: + self.webInterface.AppendLog(">>>"+command+"\n") self.onecmd(str(command)) self.commandbox.SetSelection(0,len(command)) @@ -1356,7 +1392,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): try: import shlex param = self.expandcommand(self.settings.slicecommand).encode() - print "Slicing: ",param; self.webInterface.AddLog("Slicing: "+param) + print "Slicing: ",param; + if webavail: + self.webInterface.AddLog("Slicing: "+param) pararray=[i.replace("$s",self.filename).replace("$o",self.filename.replace(".stl","_export.gcode").replace(".STL","_export.gcode")).encode() for i in shlex.split(param.replace("\\","\\\\").encode())] #print pararray self.skeinp=subprocess.Popen(pararray,stderr=subprocess.STDOUT,stdout=subprocess.PIPE) @@ -1367,7 +1405,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): self.skeinp.wait() self.stopsf=1 except: - print _("Failed to execute slicing software: "); self.webInterface.AddLog("Failed to execute slicing software: ") + print _("Failed to execute slicing software: "); + if webavail: + self.webInterface.AddLog("Failed to execute slicing software: ") self.stopsf=1 traceback.print_exc(file=sys.stdout) @@ -1454,7 +1494,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): def loadviz(self): Xtot,Ytot,Ztot,Xmin,Xmax,Ymin,Ymax,Zmin,Zmax = pronsole.measurements(self.f) print pronsole.totalelength(self.f), _("mm of filament used in this print\n") - print _("the print goes from %f mm to %f mm in X\nand is %f mm wide\n") % (Xmin, Xmax, Xtot); self.webInterface.AddLog("the print goes from %f mm to %f mm in X\nand is %f mm wide\n") % (Xmin, Xmax, Xtot) + print _("the print goes from %f mm to %f mm in X\nand is %f mm wide\n") % (Xmin, Xmax, Xtot); + if webavail: + self.webInterface.AddLog("the print goes from %f mm to %f mm in X\nand is %f mm wide\n") % (Xmin, Xmax, Xtot) print _("the print goes from %f mm to %f mm in Y\nand is %f mm wide\n") % (Ymin, Ymax, Ytot) print _("the print goes from %f mm to %f mm in Z\nand is %f mm high\n") % (Zmin, Zmax, Ztot) print _("Estimated duration (pessimistic): "), pronsole.estimate_duration(self.f) @@ -1686,7 +1728,8 @@ class macroed(wx.Dialog): self.callback(self.e.GetValue().split("\n")) def close(self,ev): self.Destroy() - webinterface.KillWebInterfaceThread() + if webavail: + webinterface.KillWebInterfaceThread() def unindent(self,text): self.indent_chars = text[:len(text)-len(text.lstrip())] if len(self.indent_chars)==0: diff --git a/webinterface.py b/webinterface.py index e8ebd06..b959807 100644 --- a/webinterface.py +++ b/webinterface.py @@ -131,22 +131,37 @@ class MoveButton(object): if(margs and axis == "x"): distance = margs.pop(0) gPronterPtr.onecmd('move X %s' % distance) - return "Moving X Axis " + str(distance) + return ReloadPage("Moving X Axis " + str(distance)) if(margs and axis == "y"): distance = margs.pop(0) gPronterPtr.onecmd('move Y %s' % distance) - return "Moving Y Axis " + str(distance) + return ReloadPage("Moving Y Axis " + str(distance)) if(margs and axis == "z"): distance = margs.pop(0) gPronterPtr.onecmd('move Z %s' % distance) - return "Moving Z Axis " + str(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: @@ -241,6 +256,7 @@ class WebInterface(object): status = XMLstatus() home = HomeButton() move = MoveButton() + custom =CustomButton() def index(self): pageText=PrintHeader()+self.name+PrintMenu() @@ -264,15 +280,40 @@ class WebInterface(object): pageText+="
" pageText+="" pageText+='' - pageText+='X Home' - pageText+='Y Home' - pageText+='Z Home' - pageText+='All Home' - #TODO Map X, Y Moves + + pageText+='X Home' + pageText+='Y Home' + pageText+='All Home' + pageText+='Z Home' + pageText+='Y 100' + pageText+='Y 10' + pageText+='Y 1' + pageText+='Y .1' + pageText+='Y -.1' + pageText+='Y -1' + pageText+='Y -10' + pageText+='Y -100' + pageText+='X -100' + pageText+='X 100' + pageText+='X -10' + pageText+='X 10' + pageText+='X -1' + pageText+='X 1' + pageText+='X -.1' + pageText+='X .1' + pageText+="" pageText+="
\n" #endxy pageText+="
" - pageText+="" + pageText+="" + pageText+='' + pageText+='Z 10' + pageText+='Z 1' + pageText+='Z .1' + pageText+='Z -.1' + pageText+='Z -1' + pageText+='Z -10' + pageText+="" #TODO Map Z Moves pageText+="
\n" #endz pageText+="\n" #endgui