Changeset 4903:008cf60987da
- Timestamp:
- 06/08/07 02:17:35 (6 years ago)
- Branch:
- default
- Location:
- sage
- Files:
-
- 6 edited
-
interfaces/expect.py (modified) (4 diffs)
-
server/notebook/cell.py (modified) (1 diff)
-
server/notebook/css.py (modified) (1 diff)
-
server/notebook/js.py (modified) (3 diffs)
-
server/notebook/twist.py (modified) (2 diffs)
-
server/notebook/worksheet.py (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sage/interfaces/expect.py
r4554 r4903 355 355 raise NotImplementedError 356 356 357 def quit(self, verbose=False ):357 def quit(self, verbose=False, timeout=0.25): 358 358 """ 359 359 EXAMPLES: … … 377 377 try: 378 378 E.sendline(self._quit_string()) 379 self._so_far(wait= 0.25)379 self._so_far(wait=timeout) 380 380 os.killpg(E.pid, 9) 381 381 os.kill(E.pid, 9) … … 469 469 raise KeyboardInterrupt, "Ctrl-c pressed while running %s"%self 470 470 471 def interrupt(self, tries=20, timeout=0.3 ):471 def interrupt(self, tries=20, timeout=0.3, quit_on_fail=True): 472 472 E = self._expect 473 473 if E is None: … … 489 489 if success: 490 490 pass 491 el se:491 elif quit_on_fail: 492 492 self.quit() 493 493 return success -
sage/server/notebook/cell.py
r4896 r4903 531 531 if 'cell://%s'%F in out: 532 532 continue 533 url = "/w /%s/data/%s/%s"%(self.worksheet_name(), self.relative_id(), F)533 url = "/ws/%s/data/%s/%s"%(self.worksheet_name(), self.relative_id(), F) 534 534 if F.endswith('.png') or F.endswith('.bmp'): 535 535 images.append('<img src="%s?%d">'%(url, self.version())) -
sage/server/notebook/css.py
r4902 r4903 597 597 598 598 span.pane div.worksheet_list { 599 /*position:fixed; */599 position:fixed; 600 600 overflow:scroll; 601 601 font-size:12px; -
sage/server/notebook/js.py
r4902 r4903 1818 1818 1819 1819 function interrupt_callback(status, response_text) { 1820 if (response_text == "restart") { 1821 alert("The SAGE kernel had to be restarted (your variables are no longer defined)."); 1822 restart_sage_callback('success', response_text); 1820 if (response_text == "failed") { 1821 1823 1822 } else if(status == "success") { 1824 1823 halt_active_cells() … … 1836 1835 link.className = "interrupt_in_progress"; 1837 1836 link.innerHTML = "Interrupt" 1838 async_request( '/interrupt', interrupt_callback, 'worksheet_id='+worksheet_id);1837 async_request(worksheet_command('interrupt'), interrupt_callback); 1839 1838 } 1840 1839 … … 1902 1901 link.className = "restart_sage_in_progress"; 1903 1902 link.innerHTML = "Restart"; 1904 async_request( '/restart_sage', restart_sage_callback, 'worksheet_id='+worksheet_id);1903 async_request(worksheet_command('restart_sage'), restart_sage_callback); 1905 1904 } 1906 1905 -
sage/server/notebook/twist.py
r4902 r4903 54 54 class WorksheetResource: 55 55 def __init__(self, worksheet_name): 56 self._name = worksheet_name 56 57 self.worksheet = notebook.get_worksheet_with_name(worksheet_name) 57 58 … … 205 206 206 207 207 class Worksheet_plain(resource.Resource): 208 class Worksheet_restart_sage(WorksheetResource, resource.Resource): 209 def render(self, ctx): 210 # TODO -- this must not block long (!) 211 self.worksheet.restart_sage() 212 return http.Response(stream='done') 213 214 class Worksheet_interrupt(WorksheetResource, resource.Resource): 215 def render(self, ctx): 216 # TODO -- this must not block long (!) 217 s = self.worksheet.interrupt() 218 return http.Response(stream='ok' if s else 'failed') 219 220 221 class Worksheet_plain(WorksheetResource, resource.Resource): 222 def render(self, ctx): 223 s = notebook.plain_text_worksheet_html(self._name) 224 return http.Response(stream=s) 225 226 class Worksheet_print(WorksheetResource, resource.Resource): 227 def render(self, ctx): 228 s = notebook.worksheet_html(self._name) 229 return http.Response(stream=s) 230 231 232 class Worksheet(resource.Resource): 233 addSlash = True 234 208 235 def __init__(self, name): 209 236 self._name = name 210 211 def render(self, ctx):212 s = notebook.plain_text_worksheet_html(self._name)213 return http.Response(stream=s)214 215 class Worksheet_print(resource.Resource):216 def __init__(self, name):217 self._name = name218 219 def render(self, ctx):220 s = notebook.worksheet_html(self._name)221 return http.Response(stream=s)222 223 class Worksheet(resource.Resource):224 addSlash = True225 226 def __init__(self, name):227 self._name = name228 237 229 238 def render(self, ctx): 230 239 s = notebook.html(worksheet_id = self._name) 240 notebook.get_worksheet_with_id(self._name).sage() 231 241 return http.Response(stream=s) 232 242 -
sage/server/notebook/worksheet.py
r4899 r4903 32 32 from cell import Cell, TextCell 33 33 34 INTERRUPT_TRIES = 1534 INTERRUPT_TRIES = 3 35 35 36 36 INITIAL_NUM_CELLS = 1 … … 382 382 cmd = '__DIR__="%s/"; DIR=__DIR__;'%self.DIR() 383 383 cmd += '_support_.init("%s", globals()); '%object_directory 384 #S.eval(cmd) 385 S._send(cmd) # so web server doesn't lock. 384 S._send(cmd) # non blocking 386 385 except Exception, msg: 387 386 print "ERROR initializing compute process:\n" … … 389 388 del self.__sage 390 389 raise RuntimeError 391 390 print "Done starting" 392 391 A = self.attached_files() 393 392 for F in A.iterkeys(): … … 776 775 pass 777 776 else: 778 success = S.interrupt(INTERRUPT_TRIES, timeout=0.3) 779 777 success = S.interrupt(INTERRUPT_TRIES, timeout=0.3, quit_on_fail=False) 778 779 if success: 780 self.clear_queue() 781 782 return success 783 784 def clear_queue(self): 780 785 # empty the queue 781 786 for C in self.__queue: 782 787 C.interrupt() 783 784 788 self.__queue = [] 785 789 self.__comp_is_running = False 786 790 787 return success788 789 791 def restart_sage(self): 790 792 """ 791 793 Restart SAGE kernel. 792 794 """ 793 # stop the current computation in the running SAGE 794 self.interrupt() 795 print "restarting" 795 796 796 797 try: … … 800 801 return 801 802 802 alarm(3) 803 try: 804 S.quit() 803 try: 804 pid = S._expect.pid 805 os.killpg(pid, 9) 806 os.kill(pid, 9) 805 807 S._expect = None 806 808 del self.__sage … … 810 812 print msg 811 813 print "WARNING: Error deleting SAGE object!" 812 cancel_alarm()813 814 814 815 try: … … 818 819 819 820 # We do this to avoid getting a stale SAGE that uses old code. 821 self.clear_queue() 820 822 self.__sage = initialized_sage() 821 823 self.initialize_sage() 822 823 824 self._enqueue_auto_cells() 824 825 self.start_next_comp() 825 826 826 827 def postprocess_output(self, out, C): 827 828 i = out.find('\r\n')
Note: See TracChangeset
for help on using the changeset viewer.
