[Zope-dev] ZPatterns: transaction bug

2000-09-03 Thread Steve Alexander

While updating a load of DataSkins all together using a ZCatalog, I got
this error:


2000-09-03T08:03:13 PANIC(300) ZODB A storage error occurred in the last
phase of a two-phase commit.  This shouldn't happen. The application may
be in a hosed state, so transactions will not be allowed to commit until
the site/storage is reset by a restart. 
Traceback (innermost last):
  File lib/python/ZODB/Transaction.py, line 296, in commit
  File lib/python/Products/ZPatterns/Transactions.py, line 108, in
tpc_finish
  File lib/python/Products/ZPatterns/Transactions.py, line 137, in
end_tran
  File lib/python/Products/ZPatterns/Transactions.py, line 48, in
_unregister
(Object: ProviderContainer)
KeyError: _v_registered


The line from Transactions.py in question is:

def _unregister(self):
del self._v_registered

From a little bit of instrumentation, I see that one of my Customizer
instances is getting unregistered twice in a row.

An obvious naive fix is to put the del line in a try-except block, or to
change it to

  if self._v_registered: del self._v_registered


From a lot of instrumenting code, tinkering and reading up on the ZODB
transaction system, I think I've found what the problem is.

The error happens when the ZCatalog attempts to commit a subtransaction.

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




[Zope-dev] ZPatterns: transaction bug

2000-09-03 Thread Steve Alexander

**Darn**; I pressed the send button on my mail client by accident while
still working on this one. Ignore the last message.

I think the error is to do with the way that
ZPatterns.Transactions.Reporter doesn't do anything special for
subtransactions. On committing a subtransaction, it commits the
top-level transaction that it knows about.

Then again, I'm new to the way ZODB handles transactions, so I might
well be wrong here.

More later...

--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




[Zope-dev] ZPatterns transactions bug

2000-09-03 Thread Steve Alexander

Here's a trace of all the transaction calls to do with a particular
customizer.

I have instrumented ZPatterns.Transactions.Transactional like this:


def _register(self):
if self.id=='customize_items':
print "\n -- REGISTER %s" % self._v_registered
if self._v_registered: return
get_transaction().register(Reporter(self))
self._v_registered = 1


def _unregister(self):
try:
del self._v_registered
if self.id=='customize_items':
print "\n_unregister: NORMAL OPERATION"
# import traceback
# traceback.print_stack()
except:
print "\n\n_unregister: ERROR"
# import traceback
# traceback.print_stack()

ZPatterns.Transactions.Reporter in most of the methods. Specifically:

def tpc_begin(self, transaction, subtransaction=None):
if self.client.id=='customize_items':
print '\n -- TPC begin %s sub=%s' % (self, subtransaction)
self.tpc_entered = 1


Also: ZCatalog.py

def catalog_object(self, obj, uid):
""" wrapper around catalog """
self._v_total = (self._v_total +
 self._catalog.catalogObject(obj, uid,
self.threshold))

if self.threshold is not None:
if self._v_total  self.threshold:
print ' -- ZCatalog commit subtransaction start'
# commit a subtransaction
get_transaction().commit(1)
# kick the chache, this may be overkill but ya never
know
self._p_jar.cacheFullSweep(1)
self._v_total = 0
print ' -- ZCatalog commit subtransaction complete'


The trace starts when I try to update a ZCatalog containing lots of
DataSkin-derived instances.



 -- REGISTER 0

... lots of REGISTER 1

 -- REGISTER 1
 -- ZCatalog commit subtransaction start

 -- TPC begin Products.ZPatterns.Transactions.Reporter instance at
89600f8 sub=1

 -- TPC commit Products.ZPatterns.Transactions.Reporter instance at
89600f8

 -- TPC finish Products.ZPatterns.Transactions.Reporter instance at
89600f8

 -- TPC end tran Products.ZPatterns.Transactions.Reporter instance at
89600f8

_unregister: NORMAL OPERATION
 -- ZCatalog commit subtransaction complete

 -- REGISTER None

 -- REGISTER 1

 -- TPC begin Products.ZPatterns.Transactions.Reporter instance at
89f98b8 sub=1

 -- TPC commit Products.ZPatterns.Transactions.Reporter instance at
89f98b8

 -- TPC finish Products.ZPatterns.Transactions.Reporter instance at
89f98b8

 -- TPC end tran Products.ZPatterns.Transactions.Reporter instance at
89f98b8

_unregister: NORMAL OPERATION

 -- TPC commit_sub Products.ZPatterns.Transactions.Reporter instance at
89600f8

 -- TPC begin Products.ZPatterns.Transactions.Reporter instance at
89600f8 sub=None

 -- TPC commit_sub Products.ZPatterns.Transactions.Reporter instance at
89f98b8

 -- TPC begin Products.ZPatterns.Transactions.Reporter instance at
89f98b8 sub=None

_unregister: ERROR, can't del self._v_registered



I don't know enough about ZODB transactions, and the intent of
ZPatterns.Transactions to do anything more at present.

I did note in ZODB/Transaction.py this comment. Perhaps it is relevant?


  # - For every jar for which we've called tpc_begin on,
  #   we either call tpc_abort or tpc_finish. It is OK
  #   to call these multiple times, as the storage is
  #   required to ignore these calls if tpc_begin has not
  #   been called.


--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




[Zope-dev] (no subject)

2000-09-03 Thread kvbodfvkop

LEARN HOW TO GET YOUR OWN 5 MEG WEBSITE FOR ONLY $11.95 PER MONTH 
TODAY!

STOP PAYING $19.95 or more TODAY for your web site, WHEN YOU CAN 
GET ONE FOR ONLY $11.95 PER MONTH!

DO YOU ALREADY HAVE A WEBSITE? ALL YOU HAVE TO DO IS TRANSFER THE 
DOMAIN TO OUR SERVERS AND UPLOAD YOUR DATA AND YOU ARE READY TO 
GO! YOUR NEW WEB SPACE CAN BE CREATED INSTANTLY WITH JUST A 
SIMPLE PHONE CALL TO  OUR OFFICE.

FRONT PAGE EXTENSIONS FULLY SUPPORTED!

YOU CAN CHANGE THE DESIGN OF YOUR SITE AS MUCH AS YOU WANT with 
no extra charge!  UNLIMITED TRAFFIC -- no extra charge!

A SET UP FEE OF $40.00 APPLIES for FIRST TIME CUSTOMERS.

ALL FEES PREPAID IN ADVANCE FOR THE YEAR PLUS A $40.00 SET UP 
CHARGE.

FOR DETAILS CALL 1 888 248 0765  

WEB HOSTING INTERNATIONAL 2001





 
 
 
 
 
 
 
 

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




Re: [Zope-dev] base href=... not being set under some circumstances

2000-09-03 Thread Jim Fulton

Steve Alexander wrote:
 
 Zope 2.2.1
 
 Zope is not setting the base tag in the html header under some
 circumstances.
 
 To get a reproducable example of this, create a folder "test" under the
 zope root object.
 
 Inside "test" create a new dtml document called "body_html". Leave the
 content of body_html as the default.
 
 Now, view the page, and view its source. You'll see no base element.
 
 Is this intentional?

Yes. This should be a FAQ.

 Does Zope now not bother with the body element if
 it doesn't think it is needed?

Yes.

 This would seem to be the rationale
 behind the request attribute "request._hacked_path".
 
 Comments?

This is needed because sometimes Zope does hack the path,
for example when index_html or :method form types are used.
The base href is needed in these cases to make sure that
relative URLs are treated correctly.

Jim


--
Jim Fulton   mailto:[EMAIL PROTECTED]
Technical Director   (888) 344-4332  Python Powered!
Digital Creationshttp://www.digicool.com http://www.python.org

Under US Code Title 47, Sec.227(b)(1)(C), Sec.227(a)(2)(B) This email
address may not be added to any commercial mail list with out my
permission.  Violation of my privacy with advertising or SPAM will
result in a suit for a MINIMUM of $500 damages/incident, $1500 for
repeats.

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




[Zope-dev] PLEA: Provide feedback on OracleStorage

2000-09-03 Thread Paul Everitt


Hello sports fans.  Last week we released a beta of OracleStorage. 
There was a pretty strong drumbeat in Zopeland for us to go ahead and
get this out.  We spent some extra time on the installation process and
instructions to make sure it was straightforward to use.

We at DC would like to get OracleStorage hardened as fast as possible. 
Thus, I have a serious of requests:

a. If you are interested in it, please download it this week and give it
a shot.

b. If you downloaded it, please send me a note and tell me so.

c. If you find any bugs with it, please file something in the
Collector.  We'll make sure there's a keyword for OracleStorage.

d. If you have a general question, request, or discussion, start a
thread here in zope-dev.

My indebtedness goes out to anybody that can help us on this.  Thanks!

--Paul

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




[Zope-dev] ZPattens Question? Guestbook example

2000-09-03 Thread James Johnson

Hello,
I'm trying to get the basic app building concept down with ZPatterns. 
Forgive me if I'm way off the mark. I'm building off the guest book 
example from the new Zope book. What I've done is created a product 
folder call Gbook. Inside I've created a dtml method index_html, a 
specialist named Guestbook and a Dataskin instance called 
Guestbook_entry. I have one property sheet named GBookProps defined 
for dataskin ZClass. Instead of storing the guestbook entries in 
documents I'm trying to store them using the dataskin database.

In the Specialist(Guestbook) I have 3 methods addEntry, 
addEntryAction, and addEntryForm
When I call addEntry I get. 
TypeError
sequence-index must be an integer
I thought I was so close to understanding me not understanding. :)
It seems to me that the only way to produce a ZPatterns based 
product is to do it from python. 
How about this, should I be trying to add entries this way? 
 dtml method addEntry
dtml-var standard_html_header
center
h2 Inserting new Guest Book Table Info Item!/h2
dtml-let id='entry_%d' % len(self.objectIds())
 ni=newItem(Guestbook)
/dtml-let
  dtml-call ni.propertysheets.manage_addPropertySheet
(id='GBookProps', ns='')
dtml-let nips=ni.propertysheets.get('GBookProps')
  dtml-call nips.manage_addProperty('guest_name', guest_name, 
'string')
  dtml-call nips.manage_changeProperties(REQUEST)

/dtml-let
form action=index_html
input type=submit value=OK
/form
/center
Thanks,
Jimbo
Hitz N Bitz member
http://www.tacomaplace.com
http://bbs.tacomaplace.com Get your Free E-mail at http://tacoma.zzn.comGet your own Web-Based E-mail Service at http://www.zzn.com

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )



Re: [Zope-dev] ZPattens Question? Guestbook example

2000-09-03 Thread Steve Alexander

Hi James,

Please don't post to the list in HTML.

James Johnson wrote:

 
 Hello,
 I'm trying to get the basic app building concept down with
 ZPatterns.
 Forgive me if I'm way off the mark.  I'm building off the guest
 book
 example from the new Zope book.  What I've done is created a
 product
 folder call Gbook.  Inside I've created a dtml method index_html, a
 specialist named Guestbook and a Dataskin instance called
 Guestbook_entry. I have one property sheet named GBookProps defined
 for dataskin ZClass.  Instead of storing the guestbook entries in
 documents I'm trying to store them using the dataskin database.
 
 In the Specialist(Guestbook) I have 3 methods addEntry,
 addEntryAction, and addEntryForm
 When I call addEntry I get.
 TypeError
 sequence-index must be an integer
 I thought I was so close to understanding me not understanding. :)
 It seems to me that the "only" way to produce a ZPatterns based
 product is to do it from python.
 How about this, should I be trying to add entries this way?  
 """dtml method addEntry"""
 dtml-var standard_html_header
 center
 h2 Inserting new Guest Book Table Info Item!/h2
 dtml-let id="'entry_%d' % len(self.objectIds())"
  ni="newItem(Guestbook)"
 /dtml-let

This is a bit odd -- you're closing your dtml-let tag immediately after 
opening it.
Also, I don't understand your call to newItem. You should be passing an 
id into it.

dtml-call "ni.propertysheets.manage_addPropertySheet
 (id='GBookProps', ns=''

You probably ought to close the bracket, quote and tag here.

 dtml-let nips="ni.propertysheets.get('GBookProps')"

The variable "ni" won't be bound to anything in particular here.


dtml-call "nips.manage_addProperty('guest_name', guest_name,
 'string')"
dtml-call "nips.manage_changeProperties(REQUEST)"
 
 /dtml-let
 form action=index_html
 input type=submit value="OK"
 /form
 /center

You can use ZPatterns from DTML alone quite easily. However, some things 
are easier from an external method or a python method.

--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net


___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




[Zope-dev] Re: Re: [Zope-dev] ZPattens Question? Guestbook example

2000-09-03 Thread James Johnson

I wondered why my post looked so bad.  Thanks.
I wonder if you are planning on releasing some UML stuff related to 
ZPatterns and Zope?  I use a Freeware product called DOME. It has 
support for UML and COAD-YOURDON OOA.  I'm don't have any formal 
training so I'm still trying to figure out what it all means.
If you have any example diagrams that you can share that would be 
most kind.
Here is the code I was trying to use in the first place.

h2 Inserting new Guest Book Table Info Item!/h2
dtml-let id="'entry_%d' % len(self.objectIds())"
  ni="Guestbook.newItem(id)"

dtml-call "ni.propertysheets.manage_addPropertySheet
(id='GBookProps', ns='')"
  nips="ni.propertysheets.get('GBookProps')"
dtml-call "nips.manage_addProperty('guest_name', guest_name, 
'string')"
dtml-call "nips.manage_changeProperties(REQUEST)"

/dtml-let

You can use ZPatterns from DTML alone quite easily. However, some 
things 
are easier from an external method or a python method.

I hope it happens soon.
Jimbo


Get your Free E-mail at http://tacoma.zzn.com

Get your own Web-Based E-mail Service at http://www.zzn.com

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




Re: [Zope-dev] ZPattens Question? Guestbook example

2000-09-03 Thread Steve Alexander

James Johnson wrote:
 
 I wonder if you are planning on releasing some UML stuff related to
 ZPatterns and Zope?

I don't think UML is a very good match for describing either the
internals of ZPatterns, or for describing systems built using ZPatterns
-- or Zope for that matter.

 I use a Freeware product called DOME. It has
 support for UML and COAD-YOURDON OOA.  

For Zope and ZPatterns work, I prefer the Coad notation to UML. It is
more Object-oriented, whereas UML is more class-oriented.

I tend to use a whiteboard and digital camera for modeling work. Either
that, or pens and paper.

 I'm don't have any formal
 training so I'm still trying to figure out what it all means.

Keep on figuring. I think you're doing ok :-)

 If you have any example diagrams that you can share that would be
 most kind.

What would you most like a diagram of? I find diagrams generally most
useful when they come along with a description in words.

 Here is the code I was trying to use in the first place.
 
 h2 Inserting new Guest Book Table Info Item!/h2
 dtml-let id="'entry_%d' % len(self.objectIds())"

I can see what you're trying to do here. You can't do it like this
though.

You can't use "len" or "self" in dtml. The variable "self" is kind of
taken as read in most cases. Use "_.len()" for "len()". So, you could
use 

  dtml-let id="'entry_%d' % _.len(objectIds())"

However, although this will return a value, it still won't do what you
want. The items that you store in a specialist actually live in a Rack.
They are not visible as normal sub-objects that you can access using
self.objectIds().

The number returned by len(self.objectIds()) represents the number of
DTML methods, DTML documents, folders, External methods, Python methods,
images, files and so forth, plus the number of Racks and Data-PlugIns in
the specialist.

Rather that try to give you new item a unique sequential id, try just
giving it a unique id.

You can use a method in a Rack called "newKey" for this. Then, this
method will be called to determine the new id, you pass _.None (from
DTML) or None (from a Python method or an External method).

I use this external method to generate a new unique key for my racks. I
put this inside the Rack, from the rack's methods tab.

from DateTime import DateTime

def newKey(self):
# self is a rack instance
fk = lambda x: 'entry-%d' % x
n = int(DateTime().timeTime())
max_tries = 10
key = fk(n)
while max_tries and self.getItem(key) is not None:
n = n + 1
max_tries = max_tries-1
key = fk(n)
return key


   ni="Guestbook.newItem(id)"
 
 dtml-call "ni.propertysheets.manage_addPropertySheet
 (id='GBookProps', ns='')"

You'll want a dtml-let here I should think.

   nips="ni.propertysheets.get('GBookProps')"
 dtml-call "nips.manage_addProperty('guest_name', guest_name,
 'string')"
 dtml-call "nips.manage_changeProperties(REQUEST)"


And, of course, another dtml-let closing tag here.
 
 /dtml-let

--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )