[Zope3-Users] Reminder: Early Bird Registration for PyCon Ending Soon
Greetings. As the co-chair for the upcoming Python conference, being held in Dallas (Addison) Texas, I want to remind folk to register before early bird registration prices end. The event is the fifth international Python Conference, being held Feb 23-25, 2007 at the Marriott-Quorum in Addison Texas, with early-bird registration ending **Jan 15**. The conference draws approximately 400-500 attendees from diverse backgrounds such as scientists from national and medical labs, college/K-12 educators, web engineers and the myriad of IT developers and programming hobbyists. Those new to the Python language are welcome, and we're offering a half-day Python 101 tutorial on the day before the conference, Thursday Feb 22 to help you get up to speed and better enjoy the rest of the conference. We have a great selection of talks this year, some of which that are relevant to Zope are: - Web Frameworks Panel - Introduction to Zope 3 - The Component Architecture - Panel: State of Zope - WSGI: An Introduction - Using Python Eggs - Distributing your project with Python Eggs - Half-Day Tutorial: zc.buildout and the Zope Component Architecture - Half-Day Tutorial: How to Document a Python Open Source Project Being run by the Python community as a non-profit event, the conference strives to be inexpensive, with registration being only $260 (or $195 if you register prior to Jan 15th), with a further discount for students. On the day before the conference we are running a full day of classroom tutorials (extra charge per class) and then after the conference is a free four-days of sprints, which are informal gatherings of programmers to work together in coding on various projects. Sprints are excellent opportunities to do agile pair-programming side-by-side with experienced programmers and make new friends. Other activities are lightning talks, which are 5-minute presentations to show off a cool technology or spread the word about a project, open space talks, which are spontaneous gatherings around a topic and, new this year, a Python Lab where experienced and novice programmers will work together to solve challenging problems and then present their solutions. The conference is also running four keynote talks by leaders in the programming field, with a special focus on education this year: The Power of Dangerous Ideas: Python and One Laptop per Child by Ivan Krstic, senior member of the One Laptop per Child project Premise: eLearning does not Belong in Public Schools by Adele Goldberg, of SmallTalk fame Python 3000 by Guido van Rossum, creator of Python The Importance of Programming Literacy by Robert M. r0ml Lefkowitz, a frequent speaker at O'Reilly conferences I believe you will find the conference educational and enjoyable. More information about the conference along with the full schedule of presentations with abstracts, is available online: http://us.pycon.org/ Thanks for any help you can give in spreading the word, Jeff Rush Co-Chair PyCon 2007 ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Representation for Zope at PyCon 2007
PyCon 2007 will be held in Addison (Dallas) from Feb 23 to 25, and we're fast approaching the talk submission deadline of Oct 31. I'd like to encourage talks about Zope, particularly how to get started with Zope and also the new technologies coming out of Zope 3. Information on both of those topics has been in very short supply at PyCons. We're also approaching the deadline, Nov 15, for half-day tutorials taught on Feb 22. Attendees register separately for these and teachers can earn up to $1500 per half-day, depending upon the number of students. The tutorial format would be ideal for getting someone up to speed on either Zope 2 or Zope 3. Teach a basic intro in the morning and advanced material in the afternoon. And if you're nervous about such a commitment, tutorials are a great opportunity to partner with another teacher or class helper. As a longtime advocate of Zope (both 2 and 3) I'd very much like to see extensive coverage this year of getting started with Zope 3. Zope has a PR problem, partly from the immense power that comes with it, and the difficulty in getting your arms around it all. It evokes strong feelings and has a distinct philosophy and design tradeoff that you have to understand before you're productive. And with the recent formation of the Zope Foundation, putting forth your best image and getting new members into the community should be a priority. PyCon is a significant opportunity for the Zope community to evangelize. In the PyCon's I've attended one challenge is breaking Zope down into teaching chunks that can be taught in 30-40 minutes. It is very easy to leave the audience behind in the buzzwords and concepts of Zope. So please don't try to teach all of Zope + Plone in 30 minutes. ;-) ;-) One possible talk I think would fit, would help someone just getting into Zope 3 and I wish someone would tackle is the Zope 3 component architecture - nothing about the web or databases or security. Start with the abstract concept of interfaces and adapters, as exists in the zope/interface package, and then layer on it the idea of registries, as implemented in the zope/component package. And wrap up with the reasons why interfaces are better than abstract base classes and what kind of problems adapters are good at solving, including some _non-abstract_ examples. If you'd like to get involved, check out the following conference pages: http://us.pycon.org/TX2007/CallForProposals http://us.pycon.org/TX2007/CallForTutorials Django and TurboGears will be at PyCon in force; I hope Zope will be too. Jeff Rush PyCon 2007 Co-Chair ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Call for Members of Panels on Web Technologies
Talks at previous PyCons have tended to be of the lecture format. I'd like to see if we can get some panel discussions going and am looking for participants. At PyCon 2005 in D.C. Michelle Levesque gave a wonderful talk, PyWebOff, contrasting a few of the web frameworks. However, it is a lot of work to research many of them, so how about instead we just invite some experts for the various frameworks to debate them instead? And answer tough questions from the audience? For updating, links to the following rough outlines are at: http://us.pycon.org/TX2007/TalkIdeas We need some moderators to work up more questions, and to coordinate with the panelists. Hey, it may be easier than preparing your own presentation and slides. I'd like to see three talk panels: --- Panel - Web Frameworks Frameworks * Django * Zope 2 * Zope 3 * Twisted Web * Quixote * TurboGears Questions Put To the Panel * When did the framework come into existence and what problem was it created to solve? * What are its strengths and maturity level? What is it ideal to use for? * What are its weaknesses? What would you NOT use it for? --- Panel - Web Templating Languages Templates Covered * Zope TAL, TALES, METAL * Twisted STAN * Cheetah * Myghty * Django's Template Language * TurboGears Kid * Quixote Python Template Language (PTL) Questions to Put to the Panelists * Python code in your HTML, or HTML in your code? * Which can and cannot be handed off to a graphics designer? * Where do they stand in performance? in Caching? * Which can work with less than a page i.e. Zope viewlets, widgets? * Which frameworks let me plug in my choice of template language? (initially show the audience a representative sample of each) --- Panel - Object Relational Mappers (ORMs) Mappers Covered * SQLObject * SQLAlchemy * Django ORM Questions Put to Panelists * Natural or artificial keys? * Support for existing database schemas or must I do it your way? * How is the performance? * How smart is it in handling complex schema? * Any support for access control security at the object level? * What flavor and degree of transaction support is offered? Per thread, per context, autocommit? -Jeff Co-Chair PyCon 2007 ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Seeking a ZCML Example for a CSSViewlet
I've got viewlets working fine (really cool too!) but I'm stumped on getting a CSSViewlet declared. Googling doesn't show anyone using CSSViewlets but hopefully someone who implemented it might clarify. The doc files show how to do it with pure Python and the utility function viewlet.viewlet.CSSViewlet but I need it using ZCML. I'm trying: browser:viewlet name=success.css-link manager=.interfaces.IStylingLinks permission=zope.Public media=screen rel=css class=zope.viewlet.viewlet.CSSResourceViewletBase / This bypasses the utility function and generates an error about there being no 'index' attribute, which is the small template file containing the parameterized HTML link tag, in the result class. So I give it a template file, although I really hate putting such a full path in my component ZCML file: template=/usr/share/zope-3.3.0-py2.4/lib/python/zope/viewlet/css_viewlet.pt And now it errors out about a missing '_path' class attribute, which is passed into the utility function. I've also thought about passing in the utility function via a 'factory=' parameter but the viewlet directive doesn't support such a parameter. And I've tried just passing in the utility function on a 'class=' parameter, figuring maybe it just wants a callable. No luck, it wants a real class to pass into type() for instantiation. It's only seven lines of ZCML but I sure can't see how to use it properly. Next I'll just roll my own ZCML directive but it seems there ought to be a way to use CSSViewlet as intended and I'm just missing it. Help please? -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Versionitis with psycopgda Again
Philipp von Weitershausen wrote: Jeff Rush wrote: Studying the psycopgda repository for branches/tags I figured there was a tag set to match psycopgda with each Zope version released, but no luck. There are no tags at all in several years. The package has obviously been poorly maintained. Are you a contributor yet, Jeff? :) A good question considering what I'm wrestling with at the moment. I would very much like to get involved. At PyCon I filled out the contributor form, got write access and got too busy to use it (plus it was during the quiet time before the 3.3.0 release). Now my ssh key isn't working, so I need to see someone about resetting it. But with the Zope Foundation situation, I may very well need to sign a new contributor form to do that, but I'm not sure. I also would like to create a new project on svn.zope.org, to contain the various Zope3 components I'm creating for the Python advocacy effort. However I'm not sure whether I can just create another z3c.advocacy namespace or myname.advocacy. Is there a requirement that everything on svn.zope.org be licensed under the ZPL? The PSF would like what I produce to be under either the Apache or Artistic license. If the license is a problem I can use svn.python.org instead I suppose, but the components are of a general nature and I'd like to contribute them to the Zope community. Poking around svn.zope.org, I've got a question regarding how you avoid overwrite conflicts on the file z3c/__init__.py file. I see different projects using different such files, some with code in them (extfile). If several z3c components are installed in a site, it seems that file is a hotspot of contention. Any suggestions? With the popularity of psycopg + Zope3, any chance we could get psycopgda added into the Zope3 distribution to mitigate this chasing? I don't think that can happen. We're thinking about making the core smaller, not bigger :). Also, not everyone has or needs psycopg, so the testing would become a burden. Understandable. By the way, revision 40054 is the one that works with Zope 3.2.1 and I'd like to put a meaningful tag on that when I get access. I've also got a simple patch to psycopgda that lets it use psycopg2 and fallback to psycopg1 if not found. It's been working great here for almost a year, with psycopg2. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Versionitis with psycopgda Again
Greetings. The last time I was matching up psycopgda with a new Zope installation, I was informed I should not be using the tarball for 1.0.0 on zope.org but instead using the psycopgda at the subversion head. Doing so worked fine with Zope 3.2.1. Today I need to install another Zope 3.2.1 but the head of that subversion repository has moved on and no longer works. It appears to have been updated for Zope 3.3.0, with zope.app.rdb moved under zope.app (a good thing), and I'm not yet able to jump this site to that version of Zope. Studying the psycopgda repository for branches/tags I figured there was a tag set to match psycopgda with each Zope version released, but no luck. There are no tags at all in several years. Any suggestions? With the popularity of psycopg + Zope3, any chance we could get psycopgda added into the Zope3 distribution to mitigate this chasing? -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Referencing objects in auto-generated forms
Frank Burkhardt wrote: On Sat, Apr 15, 2006 at 08:41:57AM -0700, Ruben Gutierrez wrote: I'm having trouble understanding some of the semantics or conventions with Zope. One simple question I have is how do I create a list of selectable values in a form. Sounds like a classic use case for a vocabulary. Frank, I thought vocabularies were being de-emphasized though, in favor of the newer 'sources' component? Vocabularies were good for short lists of choices, but because it read them all into memory at once not so good at lazy evaluation. Sources supposedly uses an iterator and is good for both short and long lists, as I roughly understand it. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: A Few Questions re Namespaces
Martin Aspeli wrote: 2. I finally found the + view in container/browser, but all uses of it are as /@@+/newitem.html. I could have sworn I saw the + used w/o the @@ prefix someplace but can't find it again. Did I indeed imagine ever seeing /+/newitem.html? No, I've seen this too. As far as I understand, the @@ is optional, but useful to disambiguate views from other things. If you had an object in / called '+', /+ would find that, not the add view. I finally found uses of + as well as @+, so I wasn't crazy. I was confused because the + wasn't special-cased in the scattered traversal logic and because I first saw it in the persistent schemas component, which didn't seem to fit into anything going on. I was also trying to understand the trailing '=' on those URLS, but couldn't search for just a '+' or '='. I've stepped thru all the traversal and form add/edit components and understand how it fits together now. A few odd things though, the add and edit code looks written by two different people, with different styles and names. And in some places there is aggressive removal of leading '@@' without checking if there is an item by that name first, so that if you use the same name for two kinds of things, the view will always be found but not the item. 3. What happens if you register a utility or adapter with the -exact- same criteria including the same name? Does a queryAdapter() lookup return the oldest or newest? Is that a legitimate way of overriding, other than using an overrides.zcml? Did you try it? Haven't had the time to set up the test case re several ZCML files and so forth - was hoping for an off-the-cuff answer, as I have a long list here of other, more novice, experiments to try to understand the boundary cases and ambiguous docs. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Found a (perhaps obvious) page template speedup
Perhaps most of you already know this but it bit me this week. For my project I've noticed some sluggish presentation of pages, and a lot of container queries flying around for very simple pages. It turns out to be Javascript code (singleBranchTree.xml) that is walking one-level of parents, siblings and children for each of my pages, even though I don't have a nav tree widget in my skin. I thought I was doing things the preferred way, by using the existing @@standard_macros/page and filling in slots to change out selected portions. It turns out that while there is a slot to disable the -display- of the nav tree, there isn't one for the page header to disable the -computation- of the nav tree, which is triggered from within the browser via navigation_tree.js upon the body load event. It probably doesn't make a noticeable difference when your containers use the ZODB and only have a handful of items per folder. In my case most of my containers are SQL tables, with hundreds to thousands of records, so even a localized tree traversal results in SQL queries and instantiation of quite a few objects. Besides rolling my own skin from scratch, my solution, since I can't slot it out, was to layer the navigation_tree_js with my own, modified copy: browser:page for=* name=skin_macros permission=zope.View layer=webaccountant template=template_tablelayout.pt / !-- layer=zope.app.rotterdam.rotterdam -- and then copy zope/app/rotterdam/template_tablelayout.pt into my project and edit it to comment out the line: !-- metal:tree use-macro=context/@@standard_macros/navigation_tree_js / -- It made a world of difference in performance for me. Your milage may vary. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Use Case for a Tree of Adapter Registries?
I've read the code for adapter registries, how there is a global one and any number of local ones, arranged in a tree and that each can be disabled. But I can't figure out when you'd want to make use of such an arrangement. The docstrings and .txt files use abstract examples, for unit testing, and don't provide a motivation for this feature. Related to that, the global registry is loaded at server startup time from the various .zcml directives, and I presume that the only way to loaded up a local registry is thru-the-web, right? Which means all local registries are persistent in the ZODB, I think. Can anyone nudge me onto the right path? -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Time for a Decimal field type in zope.schema?
Perhaps this is an old topic, although I've done searches. I've seen the brief discussion about security proxies and the Decimal type on zope3-users, but (to zope3-dev) what about getting it added to the zope.schema as a first-class field type? So we can have auto-generated HTML forms and such? Has anyone already done this, in some Zope3 branch or private development? If not, is there any good reason it should not happen? Must Zope3 support Python versions prior to the introduction of the Decimal type? I'm willing to tackle it and make a submission, otherwise. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Traversal Tricks (was Seeking Reference Guide on TAL/TALES/METAL)
Jeff Rush wrote: My specific question is how evaluation of the path expression X/Z is handled. It *seems* to be: X.__getitem__('Y')# X['Y'] whereas I'm trying to get: X.__getattr__('Y')# X.Y Under Zope 2, as I recall, it would try several algorithms; attribute, mapping, sequence. And I'm wondering if that mechanism was simplified for Zope 3, and in what way. Study has shown that it searches attribute then item namespace for non-containers, *but* item and then attribute namespace for containers. My objects are contained containers representing specialized SQL tables (records are items), that also themselves have attributes. So the search of item namespace first was causing bogus (and time consuming) SQL queries to be made. I need control over which namespace is searched, so I added a couple of generic TALES namespace adapters. Now I can do: h1 tal:content=context/attr:name / to -only- search for a name attribute, and (less frequently): h1 tal:content=context/item:ABC123 / to -only- search using __getitem__() calls. Perhaps this is useful to others, and since it wasn't much code, here it is: cut here _marker = object() class AttrPathAdapter(object): Only search attribute not item namespace for path members. implements(ITALESFunctionNamespace) def __init__(self, context): self.context = context def setEngine(self, engine): self.locale = removeSecurityProxy(engine.vars['request']).locale def __getattribute__(self, name): if name.startswith(_): return super(AttrPathAdapter, self).__getattribute__(name) value = getattr(self.__dict__['context'], name, _marker) if value is _marker: return super(AttrPathAdapter, self).__getattribute__(name) return value class ItemPathAdapter(object): Only search item not attribute namespace for path members. implements(ITALESFunctionNamespace) def __init__(self, context): self.context = context def setEngine(self, engine): self.locale = removeSecurityProxy(engine.vars['request']).locale def __getattribute__(self, name): if name.startswith(_): return super(ItemPathAdapter, self).__getattribute__(name) value = self.__dict__['context'].get(name, _marker) if value is _marker: return super(ItemPathAdapter, self).__getattribute__(name) return value cut here adapter factory=webaccountant.pathadapters.AttrPathAdapter provides=zope.app.traversing.interfaces.IPathAdapter for=* name=attr / adapter factory=webaccountant.pathadapters.ItemPathAdapter provides=zope.app.traversing.interfaces.IPathAdapter for=* name=item / cut here -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Traversal Tricks (was Seeking Reference Guide on TAL/TALES/METAL)
Jeff Rush wrote: My specific question is how evaluation of the path expression X/Z is handled. It *seems* to be: X.__getitem__('Y')# X['Y'] whereas I'm trying to get: X.__getattr__('Y')# X.Y Under Zope 2, as I recall, it would try several algorithms; attribute, mapping, sequence. And I'm wondering if that mechanism was simplified for Zope 3, and in what way. My approach of using attr: and item: TALES namespace adapters doesn't work in all cases, since those TAL templates not under my control, for ZMI, access the attribute/item namespaces using the old ordering. So another approach is to override the traversal algorithm for selected classes of objects. There are (at least) two traversal algorithms, one that seaches the item namespace first then the attribute namespace, and one that does it in the other order. zope.app.traversing.adapters.DefaultTraversable (attr then item) zope.app.container.traversal.ContainerTraversable (item then attr) Therefore I didn't need to write my own traverser, just select the non-content style for those containers that needs the other order. So for my IVenture container class, I do: zope:adapter factory=zope.app.traversing.adapters.DefaultTraversable provides=zope.app.traversing.interfaces.ITraversable for=.interfaces.IVenture / And the old search order is now 'attr then item'! I thought this technique might useful to someone. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] Multiple containers in one object - how to implement in Zope3?
Alek Kowalczyk wrote: Florian Lindner napisał(a): Am Samstag, 1. April 2006 15:15 schrieb Alek Kowalczyk: I have a single object, which can contain many objects of 2 another types (IType1, IType2). My intention is to have those objects contained in separate collections (because they are very different 2 types of objects and should not be mixed in one collection) I'd like to have each collection editable like Zope folder, i.e each collection to be IContainer/BTreeContainer. why don't just create two subfolders (of type zope.folder) in you Container object, one for IType1, one for IType2? Good idea, thanks! In the meantime I have made something similar, i.e defined two more container types (IObjects1, IObjects2) and created one IObjects1 and one IObjects2 in the IMasterObject's (which now is also a IContainer) constructor . But now the new question follows: how to limit cardinality of items? I want now to have one and exactly one IObjects1 and IObjects2 instance in IMasterObject. Is there some type of constraint defined, similar to ItemTypeConstraint, for limiting number of elements of specific type, or I should do it on my own by overriding __setitem__ and other methods? Alek, I do the same thing for a complex container with a fixed set of member sub-containers. IVenture(RUSH) ILedgerSet, name ledgers ILedgers ... IJournalSet, name journals IJournals ... http://sample.com/ventures/RUSH/ledgers/CASH http://sample.com/ventures/RUSH/journals/CHECKING The way to get what you want is to make IMasterObject *not* an IContainer but an IReadContainer. There are IWriteContainer and IReadContainer which are sub-interfaces of IContainer. This way no one can ever add/remove those sub-containers. And (presumeably you're doing it now) you add those the instances of Objects1 and Objects2 at creation time of MasterObject, and then never again need to manipulate them. You should also place Container/Containee constraints on the IObjects1 and IObjects2 so they cannot be created in inappropriate places, and of course omit their menu entries from the ZMI so they are not manually addable. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Is Zope Zope2 or Zope3?
David Johnson wrote: This is unfortunate. I do think Zope 3 will get the recognition it deserves in time. I feel the Zope community is more focused on how it works than how it is marketed and this seems like the best long term approach. Actually I think Zope3 is in danger of being rendered irrelevant by failure to get the word out. I was there back in the days of Bobo and DocumentTemplate (i.e. before Zope2) and today is a very different world. Zope3 has some serious contenders in other frameworks, and if they gain significant mindshare, Zope3 will fade to one of those oddball frameworks used by one guy in the back office. Zope3 has some really cool architecture ideas, and unless the PR picture changes, I predict it will be gutted/componentized and those good ideas used in other frameworks. Although that's not necessarily a bad thing, that it cross-pollinate others, but it means Zope3 would have been just a (really cool) RD project, not a production framework. In fact at this year's PyCon the Zope sprint plans to work on making the Zope3 components more useful outside of Zope, encouraging this approach. http://tinyurl.com/7hvtn (Sprint Desc on zope.org) Maybe bits of Zope could be used to help write smaller applications than those that are well served by the application server. That's where I'll be, since I've been experimenting with using Zope3 components to write non-web applications. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Zope 3 Capacities
David Johnson wrote: In general we’re looking at using an RDBMS, but we’re trying to get a better feeling of when we can use the ZODB and when we should stick to the RDBMS. We have various datasets: 1. Transactions: 10-100 billion objects 2. Users: 10-100 million objects 3. Contacts: 100,000 objects 4. Customers: 100-1000 objects I see other good replies but one factor you must keep in mind for ZODB is that it keeps the index of all objects in memory. With 100 billion transaction objects, you're going to need a LOT of RAM and have a large startup-time. I've always wondered why ZODB didn't offer an option of storing the object index in a BTREE, but I guess its the performance issue of potential additional disk accesses. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: URL Traversal/SelectedManagementView
David Johnson wrote: Thanks for the help. I think I understand, however, I think I might be missing something. You specified that you would get a URL such as: http://www.taupro.com/venture/IBM/ledger/100 This looks good, but it seems that the object is not persistent, and a restart of the server would cause the URL to be invalid. Am I understanding correctly? This also seems to be for a relatively small number of objects, since you are creating objects on the fly. A larger number of objects may consume the memory. No, actually the objects ARE persistent, just not in the ZODB. When Zope3 traveral reaches the venture folder, which is a ZODB-persistent object with one attribute of a RDB connection name, that connection name is looked up and turned into a volatile RDB connection instance. Then a query to obtain the items in the folder is translated into SQL queries whose responses are wrapped in non-persistent classes. To continue the example the traversal engine then picks the IBM object, which both acts as a folder representing a business venture -and- has attributes about IBM, such as legalname and such. The IBM venture object is transient in memory but recreated as needed. Since the Zope3 component SQLMethod I build on caches the SQL query and response, recreation takes little time for each successive traversal. Now when the traversal engine queries the IBM object for its members, that object returns a brief canned list of magic subfolders, such as ledger, journal, transaction, statements, etc. These are transient classes as well, that appear as folders to Zope3. So in this case it returns the ledger folder object. And then when the traversal engine queries the ledger object for ledger #100, the ledger transient object has retained as an attribute from its creation a reference to its parent, as part of the ILocation interface. Using such explicit locational acquisition, the ledger object can issue an SQL query, contextualized by the parent(s) to look for ledger #100 -OF THE VENTURE IBM-, and wrap that response in a transient Ledger class as well. And now we can locate and return views based on the ILedger interface. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Seeking Zope 3 Equivalent to Zope 2 LocalFS
Michael Haubenwallner wrote: Jeff Rush wrote: The Resource directive exposes a single file, say a .CSS or favicon.png, but I'm not seeing that it can expose an entire directory tree. The browser:resourceDirectory works for me, here is eg. the 'configure.zcml' of a package that just holds files and folders:: Ah, yes I'd forgotten there was a resourceDirectory as well as a resource directive. I kept looking for a resource package but it's in the publisher package. Thanks, although I think I'm going to have to implement LocalFS to get all the flexibility I need. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Anyone doing an ORM for Zope3?
Just wondering if anyone is currently or planning to produce any kind of ORM for Zope 3? I'm representing some rows of SQL data as Zope 3 objects and find I need some kind of minimal layer. While I can issue SQL requests easily, in Zope3 when receiving, validating and storing an add/edit form, Zope3 wants to write to my object attributes one at a time. I tried hooking setattr and issuing UPDATEs for each attribute but its (a) slow and (b) some combinations violate my table constraints. What I need is something that accumulates the setattr operations and hooks into the Zope3 transaction mechanism. Then when the commit occurs, turn those into one multi-column UPDATE operation per object modified. Something like a Persistence mix-in for SQL-backed data. Or is there another approach people are using for RDB objects? -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Meaning of a Single + in a URL?
I've got viewing of my component working and now adding works but I don't quite understand how it is working. I have the following URL, where 'ventures' is a container of mine. https://taupro.com/webaccountant/ventures/+/newventure.html I want to display the form necessary to add a new entry to that container, so I use the ZCML tag 'browser:addform'. The writeup for the 'for' attribute of that tag in Philipp's book says: Instead, add forms are registered by default for IAdding, the interface of the adding view (usually +). I'm not specifying that attribute, letting it default but does the '+' represent a 'view'? I thought 'newventure.html' was my auto-generated view? Or is a form something totally different from a view, with a separate utility registry? And am I correct that we need '+' to disambiguate the following name because otherwise in the case: https://somehost.com/container/somename one can't tell whether 'somename' is a item in that container or an view on that container? I wish there was a one-page description of the breakdown of a Zope 3 URL, pointing out the various special characters you might find. The two Zope 3 books introduce them gradually but lacks a URL Ref Sheet. It would make a nice appendix in a 2nd edition of either of those books. -Jeff ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users