IRC log of #schooltool for Saturday, 2007-02-03

*** didymo has joined #schooltool00:20
*** nitromaster has joined #schooltool00:32
*** nitromaster has quit IRC01:16
*** alga has quit IRC01:53
*** jamesh has quit IRC02:22
*** didymo has quit IRC02:37
*** didymo has joined #schooltool02:39
*** alga has joined #SchoolTool05:08
DeathOmenLumiere: Are you available?05:28
*** th1a has quit IRC06:38
*** Ninno has quit IRC06:47
*** alga has quit IRC07:30
*** didymo has quit IRC13:34
*** ignas has joined #schooltool13:57
*** cpcarey11 has joined #schooltool16:37
cpcarey11just making sure IRC works16:38
*** cpcarey11 has quit IRC16:39
*** alga has joined #SchoolTool16:51
*** nitromaster has joined #schooltool17:26
*** kjcole has joined #schooltool17:31
*** cpcarey11 has joined #schooltool17:35
*** bnguyen has joined #schooltool17:37
*** bnguyen has left #schooltool17:41
DeathOmenkjcole: Are you there?17:52
kjcoleI am17:52
DeathOmenok17:52
DeathOmenI am an intern17:53
kjcoleAh.17:53
DeathOmenand I just wanted to ask you a question or two17:53
DeathOmenI assume you have been following along in the lessons, am I right?17:54
kjcoleYou may find out I'm more ignorant than you think.  Especially regarding Zope. But give it a go.17:54
kjcoleBeen trying to.17:54
DeathOmenok17:54
DeathOmenwell then for starters, is your Zope instance running the way you want it to?17:54
kjcoleWell, it "runs" but not quite as intended.17:55
DeathOmenMy main question is, when you are at the "index.html"17:55
kjcoleI mean, last week there were several moments where a few people expressed that things weren't running as Paul described, but then he said that those differences weren't important.17:56
DeathOmenyeah17:56
DeathOmenI have one difference17:56
DeathOmenand I cannot find a place where it was addressed17:56
kjcolejelkner: Joining us or just visiting?17:56
*** jelkner has joined #schooltool17:56
DeathOmenso I was wondering if you had the same issue17:56
DeathOmenjelkner: Hello Mr. Elkner, it's Willi17:57
kjcoleYour question is when I'm at "index.html"... what?17:57
jelknerDeathOmen: good morning17:57
DeathOmenWhen you click on your "Contact"17:57
DeathOmenAnd proceed to click on the "Edit" link17:58
DeathOmenDoes it point you in the right direction17:58
jelknerignas: i never heard the final word, are you coming to PyCon?17:58
ignasjelkner: as i have got a visa - i think i am17:58
kjcoleNope. But I'm hoping... in the next hour... to start from scratch and see if I can do it with the newer write-up of the lesson, rather than last week's IRC log.17:59
DeathOmenIn my case, I am directed to something that looks like this: http://maddog.yhspatriot.net:[port]/edit.html18:00
DeathOmenWhere I should be directed to: http://maddog.yhspatriot.net:[port]/Contact/edit.html18:01
DeathOmenOk, thanks for trying18:01
DeathOmenIt appears to be a simple fix, but I wouldn't know18:01
DeathOmenjelkner: Did you see my Wiki edit!?18:02
jelknerignas: great! i'm looking forward to meeting you there!18:04
*** jelkner has quit IRC18:04
*** DeathOmen has quit IRC18:04
*** Fujitsu has quit IRC18:04
*** Aim2 has quit IRC18:04
kjcoleNo can help.18:04
kjcoleI'm gonna disappear til showtime...18:07
*** kjcole has quit IRC18:07
*** DeathOmen has joined #schooltool18:08
*** DeathOmen has left #schooltool18:08
*** wjohnsto has joined #schooltool18:09
*** wjohnsto has quit IRC18:11
*** wjohnsto has joined #schooltool18:11
*** jelkner has joined #schooltool18:15
*** Fujitsu has joined #schooltool18:15
*** DeathOmen has joined #schooltool18:17
*** Aim2 has joined #schooltool18:17
*** tehminkeh has joined #schooltool18:19
*** DeathOmen has quit IRC18:24
*** AVN` has joined #schooltool18:35
AVN`woo! remembered this time18:36
jelknerwjohnsto: I've made all the changes to the calendar and wiki18:39
*** mattva01 has joined #schooltool18:46
wjohnstook thanks18:48
*** bnguyen has joined #schooltool18:50
*** alga has quit IRC18:50
*** pcardune has joined #schooltool18:50
*** mlinnell has joined #schooltool18:51
jelknerpcardune: morning, teach!18:52
wjohnstoLet's see if I can keep up this time18:52
pcardunejelkner, hello18:53
*** t3h_sood has joined #schooltool18:54
*** t3h_sood is now known as masood18:54
*** aelkner has joined #schooltool18:54
jelknerpcardune: I've put up the summer schedule (see https://svn.schooltool.org/trac/cando)18:55
jelkneri can put you down for all 3 sprints, yes?18:55
*** Mounika has joined #schooltool18:55
*** Mounika is now known as mgarlapa18:55
pcardunejelkner, yes18:56
*** kjcole has joined #schooltool18:59
pcarduneok, my clock says 9am PST so let's start19:00
pcarduneis anyone not here?19:00
pcarduneok good19:00
masoodmebbe jama?19:00
wjohnstoyeah19:00
* kjcole is Kevin Cole19:00
* jelkner is Jeff Elkner19:00
nitromasteris everyone supposed to chime in?19:01
* wjohnsto is William Johnston19:01
* AVN` is Chris Beacha,19:01
pcardunewelcome to the third week of our Zope3 class. First we will briefly go over what we covered last time, and then get into some work.19:01
AVN`Beacham19:01
jelkneryes19:01
pcardune\me is the teacher19:02
* pcardune is the teacher19:02
* nitromaster is Andrew Rodriguez19:02
pcardune(woops)19:02
* cpcarey11 is Chris Carey19:02
pcarduneLast week we made our first page templates and a browser view class. This allowed us to display information about a contact and have the user input information about a contact with html forms. We also made our object persistent and learned how to register pages in ZCML.19:02
wjohnsto(we'll let that go, this time)19:02
pcarduneToday we will continue working on how information is displayed to and inputted by the user. Our major goal for this application is to have a well functioning and slender address book. But at the moment, all we can enter in about a person is their last name (a bit to slender of an address book to be useful). We want to continue by adding more peices of information to store about a contact - specifically their first name, phone number, email address, a19:02
pcardunend street address.19:02
pcarduneCan anyone tell me what the first step is going to be? (hopefully only one person will answer)19:03
masoodmodify the zcontact class?19:03
wjohnstoa new pt file?19:03
pcarduneclose... but that isn't first19:04
pcarduneYou might look back to where we first started. What was the first thing we wrote (besides the __init__.py file)?19:04
*** Preetam has joined #schooltool19:04
cpcarey11the interface?19:04
nitromasterthe interface19:04
wjohnstointerfaces19:04
pcarduneexactly19:04
pcarduneWhen you modify the description of an object (not necessarily the implementation) then you have to first change the interface - which describes an object. So the first thing you should do is open up the interfaces.py file for editing.19:04
wjohnstoI see!19:04
pcarduneNow your first instinct is probably going to be to create more Attributes. But in fact we will actually be creating what is called a schema. Schemas are a lot like interfaces except that instead of creating a contract for a class implementation, schemas form a contract for each individual attribute in a class.19:05
*** ignas has quit IRC19:06
pcarduneLet's just write the schema, and I will explain how it works once we have something to look at. The first thing to do is to add a line at the top of the file that says "import zope.schema"19:06
pcarduneNext, modify the lastName attribute to look like this:19:06
pcardunelastName = zope.schema.TextLine(19:06
pcardune        title=u"Last Name",19:06
pcardune        description=u"A person's last name.",19:06
pcardune        required=True)19:06
*** ignas has joined #schooltool19:07
pcardunelet me know if I'm going to fast btw19:07
wjohnstoI'm good so far19:08
pcarduneWith that code in place, the IContact interface is now also a schema. Schemas are built right into interface definitions because they essentially extend an interface.19:08
pcarduneIt is reasonable to think the difference between interfaces and schemas is pretty arbitrary and only a matter of nomenclature.19:08
pcarduneFor now, it's fine to think of schemas and interfaces as the same thing because they are so intertwined. Just note that they are in fact somewhat different.19:09
wjohnstodo we still need "import zope.interface" at the top of our program?19:09
pcarduneStephan Richter writes in his Zope 3 book, The methods of an interface describe the functionality of a component, while the schema's fields represent the state."19:09
pcardunewjohnsto, yes, keep the zope.interface part at the top19:09
pcarduneremember, our IContact interface is still inheriting from the zope.interface.Interface class19:09
pcarduneschemas don't exist outside of interfaces.  that is, you cant have a schema that isn't also an interface19:10
pcarduneLooking at the code, we see that instead of creating an Attribute object as we had before, we have a TextLine field.19:10
pcarduneWhen we refer to attributes that are set with schemas, we call them schema fields.19:11
pcarduneSchemas allow us to specify what kind of data should be stored in a particular variable, whether it is string data, numerical data, a date, a url, a list of things, etc. For a longer list of schema fields, look at Chapter 8.3 of the Zope 3 Book (  http://wiki.zope.org/zope3/schema.html).19:11
masoodare we having Schema be inherited like Interface?19:11
pcarduneno19:11
masoodso it's a kind of object type stored in the interface?19:12
pcardunethe only thing that makes something a schema, is to have attributes in the interface definition that are set with schema fields (i.e. zope.schema.WhatEver())19:12
pcardunemasood, right19:12
AVN`so a schema is kind of like a variable that stores other variables?19:13
pcarduneeven though python is a non-typed language, we still want our application to function correctly19:13
pcardunesort of, except that the storage is totally transparent to python19:13
pcarduneit really just defines a type of data19:13
pcardunethen then implementation is free to validate the data it is storing with what the schema requires19:14
pcardunekind of like type checking19:14
masoodsounds like having a format for a typeless buffer though...19:14
pcardunefor example, if we had a field like zope.schema.Float, and the user entered "hi how are you", then zope would spit back an error at the user19:15
pcarduneSchemas also allow us to specify documentation in the form of a title and a description. What you put in title and description can end up in the user interface as we will see later in the lesson.19:16
pcarduneBasically, schema fields and better than interface Attributes when it comes to data the user will interact with, because we can provide more specific documentation (in the form of a title and description) and more information about the attribute19:16
pcarduneFinally, there is the required parameter which specifies whether or not the attribute must be filled in with data - the alternative being to leave it empty (None)19:17
pcardunedepending on what kind of schema field you use, there are different key word arguments for their constructors, but we won't be encountering that right now.19:18
pcarduneSo now that we understand how that works, lets go ahead and add more schema fields for each of our new attributes: firstName, phone, email and address. These will all be using the TextLine schema field. The only required attribute should be lastName.19:18
wjohnstoI'm psyched19:19
pcarduneYou might think that the address should be another type in itself, with specific definitions for "Street", "zip code", etc.  but we'll get to that later19:19
pcardunefor now we will just assume that the user will format the address sanely19:20
pcarduneYour interfaces.py file should look like this: (get ready for a lot of stuff)19:20
pcarduneimport zope.interface19:20
pcarduneimport zope.schema19:20
pcarduneclass IContact(zope.interface.Interface):19:20
pcardune    """The interface for a contact."""19:20
pcardune    lastName = zope.schema.TextLine(19:20
pcardune        title=u"Last Name",19:20
ignaspcardune: lisppaste!19:20
pcardune        description=u"A contact's last name.",19:20
pcardune        required=True)19:20
pcardune    firstName = zope.schema.TextLine(19:20
pcardune        title=u"First Name",19:20
pcardune        description=u"A contact's first name.",19:20
pcardune        required=False)19:20
pcardune    phone = zope.schema.TextLine(19:20
pcardune        title=u"Phone",19:20
pcardune        description=u"A contact's phone number.",19:20
pcardune        required=False)19:21
pcardune    email = zope.schema.TextLine(19:21
pcardune        title=u"Email",19:21
pcardune        description=u"A contact's email address.",19:21
pcardune        required=False)19:21
pcardune    address = zope.schema.TextLine(19:21
pcardune        title=u"Address",19:21
pcardune        description=u"A contact's address.",19:21
pcardune        required=False)19:21
pcarduneignas, sorry19:21
pcardune\msg lisppaste5 help19:21
ignaslisppaste5: url19:21
lisppaste5To use the lisppaste bot, visit http://paste.lisp.org/new/schooltool and enter your paste.19:21
ignasgives you python syntax highlighting by default for #schooltool19:21
nitromastercouldn't we make a something that could check email, telephone etc, instead of just TextLine ?19:21
ignasnitromaster: you can add cusotm validator functions i think19:22
ignasif not for fields, then for the whole schema for sure19:22
lisppaste5pcardune pasted "interfaces.py" at http://paste.lisp.org/display/3632119:23
pcardunenitromaster, if you really wanted to, you could validate phone numbers against some government database or something (to make sure the area code actually exists, etc.)19:24
pcardunebut we wont be doing that...19:24
nitromasterno, I mean that emails must have a '@', and a '.' etc19:24
pcardunenitromaster, yeah, you could do that too of course19:24
pcarduneNow that we have modified our interface and extended it into a schema, we need to change the implementation to match the schema. So open up the contact.py file and add the new attributes.19:25
lisppaste5pcardune pasted "contact.py" at http://paste.lisp.org/display/3632219:25
tehminkehsomebody wanna turn of lisppaste5?19:26
tehminkehhes pissing me off19:26
tehminkehoh wait19:26
tehminkehi read what hes typing19:26
tehminkehnever mind19:26
tehminkehi thought he was a bot telling pcardune to paste his stuff on a site19:27
tehminkehnot a bot saying that he did19:27
tehminkehignore this wall of text19:27
masood<_<19:27
pcardunethe Contact class is the place where we would set up validation for the schema fields.19:27
pcarduneBut since we are only using textlines, we are pretty open to what goes in the variables19:27
pcarduneso we won't be setting up validation at this time19:27
pcarduneI don't believe there is any validation of user input with textline schema fields by default19:28
ignasnitromaster: you can pass a constraint keyword parameter to the constructor of a field, constraint being a python function that returns True if the value is valid19:28
nitromasteroh ok, thanks ignas19:28
ignaspcardune: there is - TextLines can't contain newlines19:28
pcarduneoh...19:29
pcardunemoving on now, can anyone tell me what we should be doing next?19:29
AVN`modifying the pt?19:30
pcarduneAVN`, which one?19:30
AVN`uh, the one that allows you to change the variables?19:30
masoodeditcontact19:30
masood?19:30
wjohnstowe could try and edit stuff in the ZMI19:31
wjohnstoand see if it works19:31
pcardunewell, let's start with viewcontact.pt19:31
pcardunewe are going to do something special with editcontact.pt19:31
lisppaste5pcardune pasted "viewcontact.pt" at http://paste.lisp.org/display/3632319:32
nitromasterwhat's the difference between tal:content and tal:replace?19:34
lisppaste5pcardune annotated #36323 with "viewcontact.pt" at http://paste.lisp.org/display/36323#119:34
pcarduneI made a mistake, the file should look like this (the only different is the body tag)19:34
pcardune(you don't need to change the body tag from what we had before)19:34
pcardunetal:replace will replace the entire tag, rather than just what between the <tags></tags>19:35
pcardunePay particularly close attention to the tal:content attribute for displaying the first and last name.19:36
pcarduneWhen we start with string:, that tells the page template parser that what follows is not a path expression. Rather it is a string expression.19:36
pcarduneString expressions return plain strings. If we want to include dynamic variables in the string that the expression returns, then we have to wrap them up in ${}.19:36
pcarduneIn python, this expression might look like "%s, %s" % (context.lastName, context.firstName). Instead of using %s, we just put the variable right inside the string expression.19:37
pcardunealternatively, we could have done two separate tags with regular path expressions, but it makes more sense to put the first and last name in just one tag (as you would do if you were writing straight html instead of page templates)19:38
pcarduneSo that should be it for the viewcontact.pt file19:38
wjohnstoeditcontact.pt now?19:39
pcarduneyep19:39
pcarduneexcept we aren't actually going to change it at all19:39
wjohnstothat's what I like to hear19:39
pcarduneyou may remember that to get the from in editcontact.pt, we had to create a browser view class that handled the data input19:39
pcarduneand that can get really cumbersome when you start having a lot of data19:39
pcardune(it was fine for just one variable)19:39
pcarduneTo combat this problem, Zope 3 is capable of auto generating forms, and even browser views that handle the form input!19:40
*** joikle has joined #schooltool19:40
pcarduneIn fact, we don't even need to write a page template at all. The only thing we need to do is change some zcml registration. That said, open up the configure.zcml file.19:41
pcarduneScroll down to place where we registered the edit.html page for editing a contact. I want you to replace that entire tag with a new one that looks like this:19:42
pcardune  <browser:editform19:42
pcardune      label="Edit Contact"19:42
pcardune      for="zcontact.interfaces.IContact"19:42
pcardune      name="edit.html"19:42
pcardune      permission="zope.ManageContent"19:42
pcardune      schema="zcontact.interfaces.IContact"19:42
pcardune      />19:42
pcarduneYou will notice in the code that we kept the the attributes name, for and permission the same. We got rid of the template file becase we are no longer going to need it, and we added a label and a schema. The label attribute just tells Zope what to display at the top of the form (so that the user knows what they are looking at). The schema attribute obviously tells zope which schema to generate the form from.19:43
pcarduneZope will look at the attributes in the scema, look at what we put for title and description, and look at the type of schema field it is (text input, date input, etc) and display the appropriate widget in html (input box, radio buttons, drop down list, etc.)19:44
Preetamnice19:44
pcarduneAs I said before, the auto generated forms also automatically handle form input. That means that all the data the user enters will be automatically stored into the right object.19:44
pcarduneOn top of that, before storing any data, it will verify that the input is of the correct type (a valid date, a number vs. characters, a url, etc.). If the input is not correct, it automatically spits an error back to the user, asking them to fill in the correct information.19:45
pcarduneit also does casting of data types19:45
pcarduneall data passed to a zope server through http POSTs is in string form19:46
pcardunenumbers are passed like "3.14"19:46
pcardunethe form will automatically cast that into a float for storage into the object (assuming the schema field is a Float)19:46
pcarduneAt this point, you should restart your zope server and try out that edit form!19:47
tehminkehi got an error19:47
tehminkehfor runzope19:47
pcardunetehminkeh, what was the last part of it?19:47
tehminkehwell19:47
tehminkehi found what seems to be broken19:47
tehminkehNo module named schema19:48
tehminkehwhen i try to import interfaces19:48
tehminkehbut the error was "Error when calling the metaclass bases"19:48
wjohnsto!!!You can all go to #cando-help if you have general questions so we don't take up so much space here!!!19:49
pcarduneare you sure your file looks like this:  http://paste.lisp.org/display/3632119:49
pcarduneso it looks like most people were able to restart their zope servers just fine19:50
masoodone question... does zope support javascript output?19:50
pcardunedoes anyone see something different about the edit page?19:50
masoodjust a random question19:50
pcardunejavascript is client side... and zope is server side...19:51
pcarduneso they are two very separate things19:51
wjohnstomine works completely19:51
wjohnstohttp://maddog.yhspatriot.net:8120/Contact19:51
pcarduneI haven't seen any stuff in zope for generating javascript like you might have seen in google's java libraries19:52
pcardunebut there are some javascript based form elements in zope (like the date widget)19:52
*** mgarlapa has quit IRC19:53
*** Mounika has joined #schooltool19:54
masoodI can't seem to get it to edit my contact info19:54
aelknerpcarduner: when I add a z contact, I get "This object isn't yet registered."  Am I doing something wrong?19:55
pcarduneaelkner, see me in cando-help19:56
tehminkehhey20:00
tehminkehi deleted20:00
tehminkehData.fs20:00
tehminkehand im stillgetting20:00
tehminkehzope.configuration.xmlconfig.ZopeXMLConfigurationError: File "/home/sdrodge/zope3/etc/site.zcml", line 7.2-7.5520:01
tehminkeh    ZopeXMLConfigurationError: File "/home/sdrodge/zope3/etc/package-includes/zcontact-configure.zcml", line 1.0-1.3020:01
tehminkeh    ZopeXMLConfigurationError: File "/home/sdrodge/zope3/lib/python/zcontact/configure.zcml", line 4.420:01
tehminkeh    TypeError: Error when calling the metaclass bases20:01
tehminkeh    Cannot create a consistent method resolution20:01
tehminkehorder (MRO) for bases object, Persistent20:01
jelknerpcardune: it is 1 pm, can i get a word into everyone before they leave?20:01
pcardunejelkner, we usually do two hours no?20:01
jelkneroh, wow, i didn't know that20:02
pcardunejelkner, that is what we did last year...20:02
* wjohnsto slaps jelkner saying "Pay Attention!!!"20:02
jelknerwell let me not get in your way then...20:02
jelkner;-)20:02
pcarduneok, I think most people have any problems mostly under control now20:04
pcarduneif not, see me in cando-help20:04
pcardunewe are going to continue20:04
jelknerpcardune: i have parental duties that will take me away... can i have a word during the 1/2 time break then?20:04
pcardunejelkner, sure, just message me20:05
*** joikle has quit IRC20:05
*** joikle_ has joined #schooltool20:05
pcarduneor talk to the class if that is who you want to20:05
jelknerreal quick, i've sent email to the list20:06
jelknerall interns need an account on the cando wiki20:06
jelknerwe need folks to let us know as soon as possible which of the summer sprints they would like to attend20:06
jelknerso we can begin planning and budgeting for them20:07
wjohnstoI'm signed up, I just need to consult my parents20:07
jelkneranyone who wants to can go to the dc sprint20:07
jelknerwe will be taking a van to atlanta and new hampshire20:07
jelknerso space will be an issue20:07
wjohnstoI edited the Summer Interns wiki yesterday, along with bnguyen20:07
jelknerwe may need to do some balancing20:08
jelknerwjohnsto: yes, and you did a great job!  thanks!20:08
jelknerso the earlier you let us know, the better20:08
jelknerthanks, teach, sorry for the interruption20:09
pcarduneok, now we are going to continue20:09
pcarduneif you managed to get to the edit.html screen, you will have noticed that it is built right into the ZMI20:09
*** jelkner has quit IRC20:09
wjohnstoPYTHONPATH=/usr/local/src/Zope3/src20:09
wjohnstoexport PYTHONPATH20:09
pcarduneThe auto generated forms use whats called a page macro, which essentially sticks it into the ZMI. Or it might be better to say that the macro sticks the ZMI around the auto generated form.20:11
pcarduneIt would be really cool if our entire contact system were built right into the ZMI. This is one of the cool things about Zope. Since we are talking about a component architecture, we often want to build one component into another one. That is, we want out Z Contact application to work seemlessly with all the other components in Zope - especially when it comes to navigation.20:12
mattva01sadly, i have to go(i'll look at the logs later)20:12
masoodcya20:12
wjohnstoc ya20:13
pcarduneFortunately, adding the page macro to our application is almost trivial. We only have one page template now, the viewcontact.pt file. Open up that file for editing and change the top two lines, which include the html tag and the body tag, to:20:13
pcardune<html metal:use-macro="context/@@standard_macros/view">20:13
pcardune<body metal:fill-slot="body">20:13
wjohnstomattva01: if you need help, you can contact me20:13
*** mattva01 has left #schooltool20:13
lisppaste5pcardune annotated #36323 with "viewcontact.pt (with macros)" at http://paste.lisp.org/display/36323#220:14
pcarduneHere we are using the metal namespace. Macros are a lot like page templates in that they define a general layout for something. The difference is that instead of filling in tags with data from a database, a page macro fills in slots with html generated from a page template. This way we can have page templates generate html for multiple parts of a page, and they can be glued together using the macro. For example, in the ZMI, one of the slots is the bo20:15
pcardunedy, which is what you see in the main pane. The other slots include the tabs at the top, the navigation on the left, and the add menu on the left, among other things.20:15
pcarduneThe metal:fill-slot attribute on the body tag tells the page tempalte rendering engine that we are going to take everything inside this body tag, and stick it into the body slot in the macro. The fact that the name of the tag and the name of the slot are the same is totally arbitrary. We could just have easily used a div instead of a body tag for the metal:fill-slot attribute20:16
pcarduneNow that you have changed the page template, go ahead and reload the page which displays the contact object. Remember, you do not have to restart your zope server if you only changed a page template.20:18
wjohnstoWow, cool graphics!20:21
masoodsystem error... to cando-help again...20:21
cpcarey11should viewcontact.py have a link to edit.html?20:24
pcardunecpcarey11, if you want, but we are about to make that unnecessary20:25
masoodoo, classy looking20:25
cpcarey11ok20:25
pcarduneIf you have explored around the ZMI a bit, you will have noticed that a lot of navigation is accessed through the tabs you see at the top of every page. Since we want out contact application to be built right into the ZMI, it would be handy if the navigation worked in the same way.20:25
pcarduneTo add these tabs for the main display page and the edit page, we will have to edit the page configurations in the configure.zcml file.20:26
pcarduneadd this line to the page tag attributes: menu="zmi_views" title="View"20:27
pcarduneand this line to the editform tag: menu="zmi_views" title="Edit Contact"20:27
lisppaste5pcardune pasted "configure.zcml" at http://paste.lisp.org/display/3632520:28
masoodoo, that's the first thing i've seen today where the names actually make sense to their usage! (M)20:29
aelknerNow it brings up the index.html when I click on the object!20:29
pcarduneyep20:30
ignaspcardune: cando is still using zmi menus?20:30
tehminkehdo we have to restart server after that one?20:30
pcarduneignas, no, cando doesn't use zmi menus20:30
nitromasteromg, that's beautiful20:30
pcarduneignas, it uses schooltool_actions and viewlets20:30
pcardunetehminkeh, yes, you have to restart the server for changes to zcml20:31
*** mgedmin has joined #schooltool20:31
pcarduneso that is pretty cool.20:32
aelknerit sure it.20:32
aelkneris20:32
tehminkehwow20:33
pcarduneThat is all I have planned for today's lesson, next week we'll do stuff with Containers20:33
tehminkehthats pretty sexay20:33
masoodtis'20:33
masoodso20:33
masoodit's tabby20:33
masoodlike firefox20:33
masoodalmost20:33
pcarduneso if anyone has any questions, or would like me to discuss anything a bit more in depth, please feel free to ask now and we can make the last half hour an open discussion20:33
aelknerAre we going to wire the pages to have a button to bring you to the edit page so that you don't have to use the tabs?20:34
pcarduneaelkner, why would you not want to use the tabs?20:34
pcardunethe tabs are cool!20:34
AVN` huh, I got 2 values for Name20:35
aelknerAgreed.  Only it would be nice tho eliminate the step of hitting the change button, then hitting the view tab.20:35
masoodtabs = (y)20:35
aelknerBefore hitting the change button got us back to viewing.20:35
aelknerNot so now.20:35
tehminkehyeah20:35
tehminkehi noticed that20:36
pcarduneaelkner, that's true, and we can modify that behavior later20:36
pcarduneoh, another thing to do20:36
pcardunedelete the brower.py file (we don't need it anymore)20:36
pcarduneand delete the editcontact.pt file (we don't need that anymore either)20:36
pcardunethis process of deleting code is called "refactoring"20:37
wjohnstonot just "deleting?"20:37
pcarduneit's called that too, refactoring just sounds more constructive20:37
wjohnstook20:37
Preetamlol20:38
AVN`is it supposed to take 2 values for Name?20:38
aelknerrefactoring means changing, not just deleting.20:38
pcarduneAVN`, remember that we have a last name and a first name20:38
pcarduneand that they are separate fields20:39
*** Preetam has left #schooltool20:39
AVN`yeah, Name:Lewis, Ashley    Last Name: Lewis20:39
*** cpcarey11 has quit IRC20:40
AVN`oh,20:40
AVN`i see20:40
pcarduneany questions? aelkner? kjcole?20:41
kjcolepcardune, I decided to work through my problems of last week, and basically have been ignoring, but privately logging, this week's lesson.  So, I'm sure I have LOTS of questions.20:43
kjcolepcardune, I just don't know what they are yet. ;-)20:43
kjcoleI do have a small one from last week though.  Here or #cando-help?20:44
pcarduneeither20:45
aelknerpcarduner: we still on after class for a phone call?20:45
pcardunebtw, I encourage you all to play around with the code and see what other cool things you can make it do.  just be sure to keep a clean copy that works for next week20:45
pcarduneaelkner, yep20:45
kjcoleOK. I hope it hasn't been covered while I was ignoring.  I note that going to host:port/zcontact is different from going to host:port/zcontact/ with a trailing slash.20:46
kjcoleBoth show me the index.html view contact, but for the one without the slash, the edit button takes me to the wrong place.20:46
kjcoleAny idea how to fix that?20:46
pcarduneyes20:47
pcarduneyou need to modify the edit button to use @@absolute_url20:47
pcardunethe edit link would like like this:20:47
pcardune<a tal:attributes="href string:${context/@@absolute_url}/edit.html">Edit</a>20:48
pcardunethis is how links between different pages for an object should usually be done20:48
pcardunethe context/@@absolute_url part grabs the exact url of the object (which has a trailing '/')20:48
pcarduneor sorry, does *not* have a trailing slash20:49
masoodwhen someone is browsing the internet, the directories that follow the domain... are they simply made into a string and passed to the domain for the domain to process or are the directories accessed like you were going through an ftp server (the entire url is a path)?20:50
*** Mounika has quit IRC20:50
pcardunemasood, they are made into a string20:50
kjcoleThanks. Did others have the trouble, and did I miss a previous question/answer on that? (Some of last week's issues like not seeing the Introspector have been resolved20:50
pcardunethe server then parses that string20:50
kjcolesince starting completely from scratch on my own machine.)20:50
pcardunekjcole, we mentioned that really quickly last week, but not much in depth20:50
masoodso that explains why you don't need .html or something at the end...20:51
pcardunemasood, right20:51
kjcolepcardune, well, since now things seem to be going approximately the way they should have gone last week, I think I'll be better able to catch up to today.20:51
nitromasterkjcole: if you can't see the introspector, turn on developer mode in etc/zope.conf near the end of the file20:51
pcarduneif no one else has questions, you are all free to go20:52
masoodcya20:52
*** masood has left #schooltool20:53
kjcolenitromaster, Ah!  That may have been the problem on maddog.  On my local system, I'm using the Ubuntu zope3 package rather than building from scratch.  It may use a different default skeleton.20:53
kjcoleS'long.20:53
nitromasterpcardune: we can change how everything is made right, like schema's etc.. is that in a configuration file, or in the code?20:54
pcardunenitromaster, what do you mean by "how everything is made"?20:54
nitromasterlike the tabs being blue, the form size etc20:55
nitromasterlike the artist aspects20:55
pcarduneyes you can change that20:55
pcardunewe may get to that later20:55
nitromasterok, coo20:55
nitromasterl20:55
pcarduneit involves creating our own macros and skins20:55
nitromasterand can we change like the tabs?20:55
nitromasterbecause you need more than a skin for that20:56
pcardunewe can change everything about how it looks20:57
*** AVN` has left #schooltool20:57
pcardunenot just the colors, but the layout20:57
pcardunewhat tabs are displayed20:57
pcardunehow navigation works20:57
nitromastergood20:57
*** mgedmin has quit IRC20:57
pcarduneyou can look at my site, http://www.carduner.net which is a zope application to see some of how you can change the way it looks20:58
pcardunethat is all done with modified skins and macros20:58
wjohnstoif20:58
wjohnstowait20:58
wjohnstoif we deleted browser20:59
nitromastercool20:59
wjohnstowhat do we put instead of zcontact.browser.ContactView20:59
wjohnsto?20:59
wjohnstoin the page browser form20:59
pcarduneyou mean in the editform tag in configure.zcml?21:00
pcarduneoh right, you just take that whole bit out21:01
wjohnstook21:01
kjcoleOh, one last (probably covered question):21:03
pcarduneyeah?21:03
kjcole"You did not specify an i18n translation domain for the... configure.zcml"21:04
kjcoleWhat magic gets added to configure.zcml to make that go away?21:04
pcardunethe i18n translation domain isn't needed until we start doing internationalization21:05
aelkneryeah, i get warnings about that from runzope.21:05
kjcoleI just figured there was a simple way to quiet it down, by specifying some default or a "don't warn me" thing in there.21:06
aelknershouldn't we have it set up with a default for now?21:06
aelknerWhat would that look like?21:06
pcarduneyou might just i18n_domain="zcontact"21:07
pcarduneit won't really do anything at this point21:08
pcarduneok, well i'm going to go make some breakfast for myself, aelkner give me a call in 10 minutes21:09
aelknerpcardune: I already tried and there was no reply.  Do you have your phone on?21:10
*** bnguyen has quit IRC21:11
kjcoleOK.  Later then.  Thanks again.  (I'm going to get late lunch.)21:11
*** kjcole has quit IRC21:12
*** tehminkeh has quit IRC21:15
pcarduneaelkner, yes, i picked up but there was no one there...21:15
pcarduneaelkner, why don't I call you on skype21:15
*** mlinnell has quit IRC21:16
aelknerOk. in two minutes.21:16
aelknerpcardune: off the phone.  call me when ready.21:22
*** pcardune has quit IRC21:35
*** aelkner has quit IRC21:44
*** pcardune has joined #schooltool22:02
*** aelkner has joined #schooltool22:03
*** Aiste has joined #schooltool22:24
*** mgedmin has joined #schooltool22:43
*** Aiste has quit IRC22:46
*** wjohnsto has quit IRC22:47
*** mgedmin has quit IRC22:55
FujitsuIs there a write-up of the Zope classes anywhere, or just the logs?23:23

Generated by irclog2html.py 2.15.1 by Marius Gedminas - find it at mg.pov.lt!