RE: RE: DorothyLocker and Tool diff
"Garth T Kidd" <garth-OnzZ1s1DREKDegMON/[email protected]> Fri, 16 Jul 2004 08:03:39 +1000
| Newsgroups | gmane.comp.pythin.pyds.devel |
|---|---|
| Organization | Deadly Bloody Serious |
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. ------=_NextPart_000_0185_01C46B0B.68D2E340 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit I liked the ``if _PyDS.verbose`` check when I saw it in CVS. Can we have ``pyds-win32`` debug automatically set verbose? The attached diff has the rest of the Wiki stuff; either I forgot to send it in or Georg forgot to put it in. I can probably lose the debugging wrapper for ``renderNodeOnline``, but the rest of it is pretty vital to make WikiTool behave if you rename items, etc. Regards, Garth. -----Original Message----- From: pyds-dev-admin-iYtK5bfT9M//Ad8WF/[email protected] [mailto:pyds-dev-admin-iYtK5bfT9M//Ad8WF/[email protected]] On Behalf Of Georg Bauer Sent: Friday, 16 July 2004 12:12 AM To: Garth T Kidd Cc: pyds-dev-iYtK5bfT9M//Ad8WF/[email protected] Subject: Re: [Pyds-dev] RE: DorothyLocker and Tool diff Hi! > One caveat I forgot to mention: DorothyLocker *is* complicated stuff, > and > *might* induce more errors than it's worth. Georg, you might want to > make it optional rather than inbuilt. Ok, I added your patch and made the self.lock = .... code dependend on _PyDS.verbose - so if you start with -v, you will get your DorothyLocker, if you start without, you will use standard RLock. I didn't test this, so if something breaks with current CVS code, please tell the list. bye, Georg _______________________________________________ Pyds-dev mailing list Pyds-dev-iYtK5bfT9M//Ad8WF/[email protected] http://www.westfalen.de/cgi-bin/mailman/listinfo/pyds-dev ------=_NextPart_000_0185_01C46B0B.68D2E340 Content-Type: application/octet-stream; name="20040716-0757-wikitool.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="20040716-0757-wikitool.diff" Index: PyDS/WikiTool.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /pyds/PyDS/PyDS/WikiTool.py,v retrieving revision 1.25 diff -c -r1.25 WikiTool.py *** PyDS/WikiTool.py 6 Jul 2004 08:30:36 -0000 1.25 --- PyDS/WikiTool.py 13 Jul 2004 06:24:04 -0000 *************** *** 571,577 **** if not id: id =3D '' if oldid and text and oldid !=3D id:=20 ! self.deleteNode(oldid, noRender=3D1) # the addNode will get it if id and text: id =3D self.addNode(id, title, text, template=3Dint(template)) return self.getUrl('show_html', id=3Dstr(id)) --- 571,577 ---- if not id: id =3D '' if oldid and text and oldid !=3D id:=20 ! self.renameNode(oldid, id, renderNew=3D0) if id and text: id =3D self.addNode(id, title, text, template=3Dint(template)) return self.getUrl('show_html', id=3Dstr(id)) *************** *** 581,609 **** else: return self.getUrl('edit_html', errmsg=3D_('You need to give id = and text!')) =20 ! # this method deletes an existing node and drops the rendered output ! def deleteNode(self, id, noRender=3D0): try: self._acquire() (idx, found) =3D self.nodes.locate({'id':id}) if found: self.nodes.delete(idx) self._commit() ! self.queue.append( ! self._deleteRenderedNode, ! id, ! None ! ) ! return found finally: self._release() - meshTool =3D self.getToolByNamespace('mesh') - meshTool.delItem(id, self) - if not noRender: - meshTool.renderItemsWithUnresolvedLinks() =20 def _deleteRenderedNode(self, id, dummy): ! mirror =3D self.getToolByNamespace('mirror') self.deleteFile('%s.html' % id) mirror.deleteItem(self, id) =20 # This method delivers the description of your preferences panels --- 581,620 ---- else: return self.getUrl('edit_html', errmsg=3D_('You need to give id = and text!')) =20 ! # this method renames an existing node ! def renameNode(self, id, newid, renderNew=3D1):=20 ! self.logVerbose("Renaming Wiki node %s to %s", id, newid) ! try: ! self._acquire() ! (idx, found) =3D self.nodes.locate({'id':id}) ! if found: ! self.unrenderNode(id) ! self.nodes[idx].id =3D newid ! self._commit() ! if renderNew:=20 ! self.renderNode(newid) ! meshTool =3D self.getToolByNamespace('mesh') ! meshTool.renItem(id, self.name, newid) ! finally: self._release() ! =09 ! # this method deletes an existing node ! def deleteNode(self, id):=20 ! self.logVerbose("Deleting Wiki node %s", id) try: self._acquire() (idx, found) =3D self.nodes.locate({'id':id}) if found: self.nodes.delete(idx) self._commit() ! self.unrenderNode(id) ! meshTool =3D self.getToolByNamespace('mesh') ! meshTool.delItem(id, self) finally: self._release() =20 def _deleteRenderedNode(self, id, dummy): ! self.logVerbose("Deleting rendered output for Wiki node %s", id) self.deleteFile('%s.html' % id) + mirror =3D self.getToolByNamespace('mirror') mirror.deleteItem(self, id) =20 # This method delivers the description of your preferences panels *************** *** 672,677 **** --- 683,689 ---- categoryid, baseid =3D os.path.split(id) macros =3D self.getToolByNamespace('macros') hook =3D '' + renderjob =3D () try: self._acquire() pubtime =3D time.time() *************** *** 691,697 **** if template: if not(oldtemplate): self.unrenderNode(id) ! else: self.renderNode(id) else: # NEW! self.nodes.append({ 'id': id, --- 703,713 ---- if template: if not(oldtemplate): self.unrenderNode(id) ! else:=20 ! self.renderNode(id) ! meshTool =3D self.getToolByNamespace('mesh') ! renderjob =3D (meshTool.renderInbound, (id, self)) !=20 else: # NEW! self.nodes.append({ 'id': id, *************** *** 706,715 **** if not(template): self.renderNode(id) meshTool =3D self.getToolByNamespace('mesh') ! meshTool.renderItemsWithUnresolvedLinks() return id finally: self._release() if hook and hasattr(macros, hook): getattr(macros, hook)(id) =20 --- 722,734 ---- if not(template): self.renderNode(id) meshTool =3D self.getToolByNamespace('mesh') ! renderjob =3D (meshTool.renderItemsWithUnresolvedLinks, ()) return id finally: self._release() + if renderjob:=20 + method, args =3D renderjob + method(*args) if hook and hasattr(macros, hook): getattr(macros, hook)(id) =20 *************** *** 722,737 **** =20 # this method renders a single page in the background. def renderNode(self, id): self.queue.append(self.renderNodeOnline, (id,), None) return self.queue.length() =20 # this method removes the rendered output of a node in the background def unrenderNode(self, id): self.queue.append(self._deleteRenderedNode, id, None) return self.queue.length() =20 # this method renders a single page, but does it online (not queued) ! def renderNodeOnline(self, key, data): (id,) =3D key mirror =3D self.getToolByNamespace('mirror') node =3D self.getNode(id=3Did) --- 741,782 ---- =20 # this method renders a single page in the background. def renderNode(self, id): + self.logVerbose("Queueing render for Wiki node %s", id) self.queue.append(self.renderNodeOnline, (id,), None) return self.queue.length() =20 # this method removes the rendered output of a node in the background def unrenderNode(self, id): + self.logVerbose("Queueing unrender for Wiki node %s", id) self.queue.append(self._deleteRenderedNode, id, None) return self.queue.length() =20 # this method renders a single page, but does it online (not queued) ! def renderNodeOnline(self, key, data):=20 ! import time ! (id,) =3D key ! try:=20 ! self.logVerbose("Rendering Wiki node %s", id) ! begin =3D time.time() ! result =3D self.__renderNodeOnline(key, data) ! duration =3D time.time() - begin ! self.logVerbose("%s rendered in %.3fs", id, duration) ! except: ! import traceback ! (e, d, tb) =3D sys.exc_info() ! msg =3D _('Background thread exception %s: %s') % (e, d) ! try:=20 ! msg +=3D _('Exception instance __dict__: %s') % = (repr(d.__dict__),) ! except:=20 ! pass ! msg +=3D '<br><br>' !=20 ! for row in traceback.extract_tb(tb): ! (file, line, function, source) =3D row ! msg +=3D '<br>%s[%s] in %s' % (file, line, function) ! self.logError(msg.replace('%', '%%')) !=20 ! def __renderNodeOnline(self, key, data): (id,) =3D key mirror =3D self.getToolByNamespace('mirror') node =3D self.getNode(id=3Did) ------=_NextPart_000_0185_01C46B0B.68D2E340--