Re: [Zope-dev] ZPatterns + Skinscript
On Mon, 30 Oct 2000, Steve Spicklemire wrote:
Hi Joachim,
rackList just refers to the racks in the 'racks' tab of the Specialist. Do you have any racks defined for this Specialist? The rackList is managed magically with the plug-in-group stuff.
Yes that's what I found too, but it doesn't work, with SQL-database and SkinScripts, the setup is described below:
"Joachim" == Joachim Schmitz <js@aixtraware.de> writes:
Joachim> for debugging I inserted in Specialists.py in getItem:
Joachim> return str(self.rackList) <-- inserted for rack in Joachim> self.rackList: item = rack.__of__(self).getItem(key) if Joachim> item is not None: return item
Joachim> this alway returns an empty list, when calling it from Joachim> the dtml:
Joachim> <dtml-var "getItem(_.int(609))"> returns "[]"
Joachim> I tried to follow the magic how this rackList is setup, Joachim> but it is to much python-Zen for me.
Joachim> On Sun, 29 Oct 2000, Joachim Schmitz wrote:
>> On Sat, 28 Oct 2000, Phillip J. Eby wrote: >> >> > At 05:17 PM 10/28/00 +0200, Joachim Schmitz wrote: >> > > >> > >select e.event_id as event_id > >,e.zeiten as zeiten > >> >,v.firma as firma > >,v.tel as tel > >,e.movie_id as movie_id >> > >,m.movie_title as movie_title > >,m.movie_link as movie_link >> > >,m.movie_text as movie_text > >,e.datum_von as datum_von > >> >,e.datum_bis as datum_bis > >from event as e, veranstalter as >> v, movies as m > >where > >e.event_id = <dtml-sqlvar e_id >> type=int> > >and e.movie_id = m.movie_id and e.veran_id = >> v.veran_id > >order by m.movie_title >> > >> > Just out of curiosity, why do you have an "order by" clause, >> if this is > supposed to only return one row? If more than one >> item is returned by this > query, only the first will be used >> to supply data to your DataSkin. >> > >> that was just left over from an reused query-template, I forgot >> to take it out. >> >> > >> > >I also added a SkinScript method as a Data Plug-in in the >> defaultRack like > this >> > > >> > >WITH QUERY readEvents(e_id=self.event_id) COMPUTE >> zeiten,firma,tel > >,movie_id,movie_text,movie_link,movie_title >> > >,datum_von,datum_bis,zeiten >> > >> > Do you have some way of providing self with an "event_id" >> value? Keep in > mind that when DataSkins are created, they >> have only an "id" attribute, > nothing else. So unless you >> have an attribute provider that provides an > "event_id" value, >> this statement will fail. Perhaps what you actually mean > is: >> > >> > WITH QUERY readEvents(e_id=self.id) COMPUTE > event_id, > >> zeiten,firma,tel, > movie_id,movie_text,movie_link,movie_title, >> > datum_von,datum_bis,zeiten >> > >> > Notice that I'm passing self.id to readEvents, and that I've >> added event_id > to the list of attributes retrieved from the >> query. >> > >> how do I set "self.id" I tried in dtml-method in the >> event-specialist: There is a event_id 609 in the table: >> >> <dtml-var "getItem(_.int(609))"> returns none or <dtml-var >> "getItem(key=_.int(609))"> returns none >> >> >> > >> > >under the storage tab I selected for: >> > > >> > >Class to use for stored items: ZPatterns:DataSkin and >> > > >> > >Objects are: o stored persistently. > > x loaded by >> accessing attribute: event_id >> > >> > This will work fine, if you use the revised SkinScript above. >> You will > probably want to create a ZClass subclass of >> DataSkin at some point to use > instead, so that you can define >> permissions, methods, and so on for your > Event objects. >> > >> > >>
Mit freundlichen Grüßen Joachim Schmitz AixtraWare, Ing. Büro für Internetanwendungen Hüsgenstr. 33a, D-52457 Aldenhoven Telefon: +49-2464-8851, FAX: +49-2464-905163
Hi Joachim, Hmm.. I would start start really simple here, and then 'work up' to the sql query.... Create a default rack with the following SkinScript. WITH ['a','b','c'] COMPUTE movie_link=RESULT[0],movie_title=RESULT[1], zeiten=RESULT[2] Set the storage for this rack to be a DataSkin derived ZClass loaded by accessing attribute 'movie_link'. Then try the following method in the Specialist: <dtml-var standard_html_header> <dtml-let theItem="getItem('anyOldThing')"> <dtml-with theItem> <dtml-var movie_link> <dtml-var movie_title> <dtml-var zeiten> </dtml-with> </dtml-let> <dtml-var standard_html_footer> If this does what you expect.. then you're getting close. Now change the ['a','b','c'] to be a call to your query: WITH yourQuery(... parameters for your query... ) COMPUTE movie_link, movie_title... etc. If you get the same errors in the first case.. then your problem has nothing to do with SQL. -steve
"Joachim" == Joachim Schmitz <js@aixtraware.de> writes:
Joachim> On Mon, 30 Oct 2000, Steve Spicklemire wrote: >> Hi Joachim, >> >> rackList just refers to the racks in the 'racks' tab of the >> Specialist. Do you have any racks defined for this Specialist? >> The rackList is managed magically with the plug-in-group stuff. >> Joachim> Yes that's what I found too, but it doesn't work, with Joachim> SQL-database and SkinScripts, the setup is described Joachim> below: >> >>>>> "Joachim" == Joachim Schmitz <js@aixtraware.de> writes: >> Joachim> for debugging I inserted in Specialists.py in getItem: >> Joachim> return str(self.rackList) <-- inserted for rack in Joachim> self.rackList: item = rack.__of__(self).getItem(key) if Joachim> item is not None: return item >> Joachim> this alway returns an empty list, when calling it from Joachim> the dtml: >> Joachim> <dtml-var "getItem(_.int(609))"> returns "[]" >> Joachim> I tried to follow the magic how this rackList is setup, Joachim> but it is to much python-Zen for me. >> Joachim> On Sun, 29 Oct 2000, Joachim Schmitz wrote: >> >> On Sat, 28 Oct 2000, Phillip J. Eby wrote: >> >> >> >> > At 05:17 PM 10/28/00 +0200, Joachim Schmitz wrote: >> >> > > >> >> > >select e.event_id as event_id > >,e.zeiten as zeiten > >> >> >,v.firma as firma > >,v.tel as tel > >,e.movie_id as movie_id >> >> > >,m.movie_title as movie_title > >,m.movie_link as >> movie_link >> > >,m.movie_text as movie_text > >,e.datum_von as >> datum_von > >> >,e.datum_bis as datum_bis > >from event as e, >> veranstalter as >> v, movies as m > >where > >e.event_id = >> <dtml-sqlvar e_id >> type=int> > >and e.movie_id = m.movie_id >> and e.veran_id = >> v.veran_id > >order by m.movie_title >> >> > >> >> > Just out of curiosity, why do you have an "order by" >> clause, >> if this is > supposed to only return one row? If >> more than one >> item is returned by this > query, only the >> first will be used >> to supply data to your DataSkin. >> >> > >> >> that was just left over from an reused query-template, I >> forgot >> to take it out. >> >> >> >> > >> >> > >I also added a SkinScript method as a Data Plug-in in the >> >> defaultRack like > this >> >> > > >> >> > >WITH QUERY readEvents(e_id=self.event_id) COMPUTE >> >> zeiten,firma,tel > >,movie_id,movie_text,movie_link,movie_title >> >> > >,datum_von,datum_bis,zeiten >> >> > >> >> > Do you have some way of providing self with an "event_id" >> >> value? Keep in > mind that when DataSkins are created, they >> >> have only an "id" attribute, > nothing else. So unless you >> >> have an attribute provider that provides an > "event_id" >> value, >> this statement will fail. Perhaps what you actually >> mean > is: >> >> > >> >> > WITH QUERY readEvents(e_id=self.id) COMPUTE > event_id, > >> >> zeiten,firma,tel, > >> movie_id,movie_text,movie_link,movie_title, >> > >> datum_von,datum_bis,zeiten >> >> > >> >> > Notice that I'm passing self.id to readEvents, and that >> I've >> added event_id > to the list of attributes retrieved >> from the >> query. >> >> > >> >> how do I set "self.id" I tried in dtml-method in the >> >> event-specialist: There is a event_id 609 in the table: >> >> >> >> <dtml-var "getItem(_.int(609))"> returns none or <dtml-var >> >> "getItem(key=_.int(609))"> returns none >> >> >> >> >> >> > >> >> > >under the storage tab I selected for: >> >> > > >> >> > >Class to use for stored items: ZPatterns:DataSkin and >> >> > > >> >> > >Objects are: o stored persistently. > > x loaded by >> >> accessing attribute: event_id >> >> > >> >> > This will work fine, if you use the revised SkinScript >> above. >> You will > probably want to create a ZClass subclass >> of >> DataSkin at some point to use > instead, so that you can >> define >> permissions, methods, and so on for your > Event >> objects. >> >> > >> >> > >> >> Joachim> Mit freundlichen Grüßen Joachim> Joachim Schmitz Joachim> AixtraWare, Ing. Büro für Internetanwendungen Joachim> Hüsgenstr. 33a, D-52457 Aldenhoven Telefon: Joachim> +49-2464-8851, FAX: +49-2464-905163
Hi Steve, thanks for the tips, I try to do it without the ZClass, according to my understanding, and Phil Eby's reply that should work too, but apparently I the first one to try it. I try it out. On Mon, 30 Oct 2000, Steve Spicklemire wrote:
Hi Joachim,
Hmm.. I would start start really simple here, and then 'work up' to the sql query.... Create a default rack with the following SkinScript.
WITH ['a','b','c'] COMPUTE movie_link=RESULT[0],movie_title=RESULT[1], zeiten=RESULT[2]
Set the storage for this rack to be a DataSkin derived ZClass loaded by accessing attribute 'movie_link'. Then try the following method in the Specialist:
<dtml-var standard_html_header> <dtml-let theItem="getItem('anyOldThing')"> <dtml-with theItem> <dtml-var movie_link> <dtml-var movie_title> <dtml-var zeiten>
</dtml-with> </dtml-let> <dtml-var standard_html_footer>
If this does what you expect.. then you're getting close. Now change the ['a','b','c'] to be a call to your query:
WITH yourQuery(... parameters for your query... ) COMPUTE movie_link, movie_title... etc.
If you get the same errors in the first case.. then your problem has nothing to do with SQL.
-steve
"Joachim" == Joachim Schmitz <js@aixtraware.de> writes:
Joachim> On Mon, 30 Oct 2000, Steve Spicklemire wrote:
>> Hi Joachim, >> >> rackList just refers to the racks in the 'racks' tab of the >> Specialist. Do you have any racks defined for this Specialist? >> The rackList is managed magically with the plug-in-group stuff. >> Joachim> Yes that's what I found too, but it doesn't work, with Joachim> SQL-database and SkinScripts, the setup is described Joachim> below:
>> >>>>> "Joachim" == Joachim Schmitz <js@aixtraware.de> writes: >> Joachim> for debugging I inserted in Specialists.py in getItem: >> Joachim> return str(self.rackList) <-- inserted for rack in Joachim> self.rackList: item = rack.__of__(self).getItem(key) if Joachim> item is not None: return item >> Joachim> this alway returns an empty list, when calling it from Joachim> the dtml: >> Joachim> <dtml-var "getItem(_.int(609))"> returns "[]" >> Joachim> I tried to follow the magic how this rackList is setup, Joachim> but it is to much python-Zen for me. >> Joachim> On Sun, 29 Oct 2000, Joachim Schmitz wrote: >> >> On Sat, 28 Oct 2000, Phillip J. Eby wrote: >> >> >> >> > At 05:17 PM 10/28/00 +0200, Joachim Schmitz wrote: >> >> > > >> >> > >select e.event_id as event_id > >,e.zeiten as zeiten > >> >> >,v.firma as firma > >,v.tel as tel > >,e.movie_id as movie_id >> >> > >,m.movie_title as movie_title > >,m.movie_link as >> movie_link >> > >,m.movie_text as movie_text > >,e.datum_von as >> datum_von > >> >,e.datum_bis as datum_bis > >from event as e, >> veranstalter as >> v, movies as m > >where > >e.event_id = >> <dtml-sqlvar e_id >> type=int> > >and e.movie_id = m.movie_id >> and e.veran_id = >> v.veran_id > >order by m.movie_title >> >> > >> >> > Just out of curiosity, why do you have an "order by" >> clause, >> if this is > supposed to only return one row? If >> more than one >> item is returned by this > query, only the >> first will be used >> to supply data to your DataSkin. >> >> > >> >> that was just left over from an reused query-template, I >> forgot >> to take it out. >> >> >> >> > >> >> > >I also added a SkinScript method as a Data Plug-in in the >> >> defaultRack like > this >> >> > > >> >> > >WITH QUERY readEvents(e_id=self.event_id) COMPUTE >> >> zeiten,firma,tel > >,movie_id,movie_text,movie_link,movie_title >> >> > >,datum_von,datum_bis,zeiten >> >> > >> >> > Do you have some way of providing self with an "event_id" >> >> value? Keep in > mind that when DataSkins are created, they >> >> have only an "id" attribute, > nothing else. So unless you >> >> have an attribute provider that provides an > "event_id" >> value, >> this statement will fail. Perhaps what you actually >> mean > is: >> >> > >> >> > WITH QUERY readEvents(e_id=self.id) COMPUTE > event_id, > >> >> zeiten,firma,tel, > >> movie_id,movie_text,movie_link,movie_title, >> > >> datum_von,datum_bis,zeiten >> >> > >> >> > Notice that I'm passing self.id to readEvents, and that >> I've >> added event_id > to the list of attributes retrieved >> from the >> query. >> >> > >> >> how do I set "self.id" I tried in dtml-method in the >> >> event-specialist: There is a event_id 609 in the table: >> >> >> >> <dtml-var "getItem(_.int(609))"> returns none or <dtml-var >> >> "getItem(key=_.int(609))"> returns none >> >> >> >> >> >> > >> >> > >under the storage tab I selected for: >> >> > > >> >> > >Class to use for stored items: ZPatterns:DataSkin and >> >> > > >> >> > >Objects are: o stored persistently. > > x loaded by >> >> accessing attribute: event_id >> >> > >> >> > This will work fine, if you use the revised SkinScript >> above. >> You will > probably want to create a ZClass subclass >> of >> DataSkin at some point to use > instead, so that you can >> define >> permissions, methods, and so on for your > Event >> objects. >> >> > >> >> > >> >>
Mit freundlichen Grüßen Joachim Schmitz AixtraWare, Ing. Büro für Internetanwendungen Hüsgenstr. 33a, D-52457 Aldenhoven Telefon: +49-2464-8851, FAX: +49-2464-905163
My Experience with 'raw' DataSkins is that you'll quickly run afoul of the Zope Security system. Using a ZClass that has ZPatterns:DataSkin as a base class avoids this, and gives you an easy way to put a 'user interface' on your objects. -steve
"Joachim" == Joachim Schmitz <js@aixtraware.de> writes:
Joachim> Hi Steve, Joachim> thanks for the tips, I try to do it without the ZClass, Joachim> according to my understanding, and Phil Eby's reply that Joachim> should work too, but apparently I the first one to try Joachim> it. I try it out. Joachim> On Mon, 30 Oct 2000, Steve Spicklemire wrote: >> Hi Joachim, >> >> Hmm.. I would start start really simple here, and then 'work >> up' to the sql query.... Create a default rack with the >> following SkinScript. >> >> WITH ['a','b','c'] COMPUTE >> movie_link=RESULT[0],movie_title=RESULT[1], zeiten=RESULT[2] >> >> Set the storage for this rack to be a DataSkin derived ZClass >> loaded by accessing attribute 'movie_link'. Then try the >> following method in the Specialist: >> >> <dtml-var standard_html_header> <dtml-let >> theItem="getItem('anyOldThing')"> <dtml-with theItem> <dtml-var >> movie_link> <dtml-var movie_title> <dtml-var zeiten> >> >> </dtml-with> </dtml-let> <dtml-var standard_html_footer> >> >> If this does what you expect.. then you're getting close. Now >> change the ['a','b','c'] to be a call to your query: >> >> WITH yourQuery(... parameters for your query... ) COMPUTE >> movie_link, movie_title... etc. >> >> If you get the same errors in the first case.. then your >> problem has nothing to do with SQL. >> >> -steve >> >> >>>>> "Joachim" == Joachim Schmitz <js@aixtraware.de> writes: >> Joachim> On Mon, 30 Oct 2000, Steve Spicklemire wrote: >> >> Hi Joachim, >> >> >> >> rackList just refers to the racks in the 'racks' tab of the >> >> Specialist. Do you have any racks defined for this >> Specialist? >> The rackList is managed magically with the >> plug-in-group stuff. >> >> Joachim> Yes that's what I found too, but it doesn't work, with Joachim> SQL-database and SkinScripts, the setup is described Joachim> below: >> >> >>>>> "Joachim" == Joachim Schmitz <js@aixtraware.de> >> writes: >> >> Joachim> for debugging I inserted in Specialists.py in getItem: >> >> Joachim> return str(self.rackList) <-- inserted for rack in Joachim> self.rackList: item = rack.__of__(self).getItem(key) if Joachim> item is not None: return item >> >> Joachim> this alway returns an empty list, when calling it from Joachim> the dtml: >> >> Joachim> <dtml-var "getItem(_.int(609))"> returns "[]" >> >> Joachim> I tried to follow the magic how this rackList is setup, Joachim> but it is to much python-Zen for me. >> >> Joachim> On Sun, 29 Oct 2000, Joachim Schmitz wrote: >> >> >> On Sat, 28 Oct 2000, Phillip J. Eby wrote: >> >> >> >> >> >> > At 05:17 PM 10/28/00 +0200, Joachim Schmitz wrote: >> >> >> > > >> >> >> > >select e.event_id as event_id > >,e.zeiten as zeiten > >> >> >> >,v.firma as firma > >,v.tel as tel > >,e.movie_id as >> movie_id >> >> > >,m.movie_title as movie_title > >> >,m.movie_link as >> movie_link >> > >,m.movie_text as >> movie_text > >,e.datum_von as >> datum_von > >> >,e.datum_bis >> as datum_bis > >from event as e, >> veranstalter as >> v, >> movies as m > >where > >e.event_id = >> <dtml-sqlvar e_id >> >> type=int> > >and e.movie_id = m.movie_id >> and e.veran_id = >> >> v.veran_id > >order by m.movie_title >> >> >> > >> >> >> > Just out of curiosity, why do you have an "order by" >> >> clause, >> if this is > supposed to only return one row? If >> >> more than one >> item is returned by this > query, only the >> >> first will be used >> to supply data to your DataSkin. >> >> >> > >> >> >> that was just left over from an reused query-template, I >> >> forgot >> to take it out. >> >> >> >> >> >> > >> >> >> > >I also added a SkinScript method as a Data Plug-in in >> the >> >> defaultRack like > this >> >> >> > > >> >> >> > >WITH QUERY readEvents(e_id=self.event_id) COMPUTE >> >> >> zeiten,firma,tel > >> >,movie_id,movie_text,movie_link,movie_title >> >> > >> >,datum_von,datum_bis,zeiten >> >> >> > >> >> >> > Do you have some way of providing self with an >> "event_id" >> >> value? Keep in > mind that when DataSkins are >> created, they >> >> have only an "id" attribute, > nothing >> else. So unless you >> >> have an attribute provider that >> provides an > "event_id" >> value, >> this statement will fail. >> Perhaps what you actually >> mean > is: >> >> >> > >> >> >> > WITH QUERY readEvents(e_id=self.id) COMPUTE > event_id, >> > >> >> zeiten,firma,tel, > >> >> movie_id,movie_text,movie_link,movie_title, >> > >> >> datum_von,datum_bis,zeiten >> >> >> > >> >> >> > Notice that I'm passing self.id to readEvents, and that >> >> I've >> added event_id > to the list of attributes retrieved >> >> from the >> query. >> >> >> > >> >> >> how do I set "self.id" I tried in dtml-method in the >> >> >> event-specialist: There is a event_id 609 in the table: >> >> >> >> >> >> <dtml-var "getItem(_.int(609))"> returns none or >> <dtml-var >> >> "getItem(key=_.int(609))"> returns none >> >> >> >> >> >> >> >> >> > >> >> >> > >under the storage tab I selected for: >> >> >> > > >> >> >> > >Class to use for stored items: ZPatterns:DataSkin and >> >> >> > > >> >> >> > >Objects are: o stored persistently. > > x loaded by >> >> >> accessing attribute: event_id >> >> >> > >> >> >> > This will work fine, if you use the revised SkinScript >> >> above. >> You will > probably want to create a ZClass >> subclass >> of >> DataSkin at some point to use > instead, so >> that you can >> define >> permissions, methods, and so on for >> your > Event >> objects. >> >> >> > >> >> >> > >> >> >> Joachim> Mit freundlichen Grüßen Joachim> Joachim Schmitz Joachim> AixtraWare, Ing. Büro für Internetanwendungen Joachim> Hüsgenstr. 33a, D-52457 Aldenhoven Telefon: Joachim> +49-2464-8851, FAX: +49-2464-905163
participants (2)
-
Joachim Schmitz -
Steve Spicklemire