*** ignas has quit IRC | 02:52 | |
*** ignas has joined #schooltool | 03:24 | |
*** ignas has quit IRC | 03:47 | |
*** replaceafill has joined #schooltool | 03:48 | |
replaceafill | aelkner you there? | 03:49 |
---|---|---|
aelkner | replaceafill, hey | 03:55 |
replaceafill | hey aelkner | 03:56 |
replaceafill | just something i found today: | 03:56 |
replaceafill | go to the add schoolyear/term forms | 03:57 |
replaceafill | and hit submit with no values | 03:57 |
replaceafill | you'll get an error | 03:57 |
replaceafill | it's the simplefieldvalidators | 03:57 |
aelkner | ok | 03:57 |
replaceafill | confirm if you get the error | 03:57 |
aelkner | yes | 03:58 |
replaceafill | :) | 03:58 |
aelkner | so.... | 03:58 |
replaceafill | i thought you wrote those... | 03:58 |
aelkner | oh | 03:58 |
aelkner | don't give me credit for something i didn't do :) | 03:59 |
replaceafill | really? | 03:59 |
replaceafill | oh sorry | 03:59 |
replaceafill | i thought you did /schoolyears and /terms | 03:59 |
replaceafill | and the add forms | 03:59 |
replaceafill | for those | 03:59 |
aelkner | yeah, but i didn't have to do anything to get those errors to come out | 03:59 |
replaceafill | i wonder who converted them to simplefieldvalidators | 04:00 |
aelkner | that's just the field validators that already existed | 04:00 |
replaceafill | they wer invariants | 04:00 |
aelkner | i added special form validators for flourish for handling errors that had to do with | 04:00 |
aelkner | multiple fields at the same time, like first last dates | 04:01 |
replaceafill | 2850.1.168 aelkner | class FlourishInvalidDateRangeError(ValidationError): | 04:01 |
aelkner | exactly | 04:01 |
aelkner | so i didn't have to add anything for Required field missing | 04:01 |
aelkner | of even invalid date | 04:02 |
replaceafill | yes, but your validator is getting called | 04:02 |
replaceafill | class FlourishOverlapValidator(SimpleFieldValidator): | 04:02 |
aelkner | it's a form validator, so it needs to get called | 04:02 |
replaceafill | last_value = last_widget._toFieldValue(last_value) | 04:02 |
replaceafill | that's the line with the error | 04:02 |
replaceafill | see the except: below | 04:03 |
replaceafill | it's returning | 04:03 |
replaceafill | it means, success | 04:03 |
aelkner | yes, that's a hack | 04:03 |
aelkner | if the error is caught by the field validarot | 04:03 |
aelkner | i hate typing that word | 04:03 |
aelkner | validator | 04:03 |
aelkner | then it will already be shown to the user | 04:03 |
replaceafill | value is NOne | 04:04 |
aelkner | i'm just returning safely at that point because the rest of the form tests are not necessary at that point | 04:04 |
replaceafill | you're not returning safely | 04:04 |
replaceafill | you're saying there's no error | 04:04 |
replaceafill | and there is | 04:04 |
replaceafill | except: | 04:05 |
replaceafill | return | 04:05 |
aelkner | yeah, but it was already caught | 04:05 |
replaceafill | by who? | 04:05 |
aelkner | the field validators | 04:05 |
aelkner | this is a form validator | 04:05 |
replaceafill | it's a bare except! | 04:05 |
replaceafill | with no type for the exception | 04:05 |
replaceafill | if you get any kind of error in the method | 04:05 |
replaceafill | you just say "it's ok" | 04:05 |
replaceafill | and return | 04:06 |
aelkner | whatever error i would get, the field validator would get, so it's redundant for me to habdle it | 04:06 |
aelkner | i don't want to raise a form error! | 04:06 |
aelkner | it's a field error, and it will be handled | 04:07 |
replaceafill | ok, try this: | 04:07 |
replaceafill | disable your validator | 04:07 |
replaceafill | and submit the form with no value | 04:07 |
replaceafill | you'll get the appropriate behaviour | 04:07 |
replaceafill | required input | 04:07 |
aelkner | wait, stp rght there | 04:07 |
aelkner | what behavior does the user see that is not appropriate | 04:07 |
aelkner | ? | 04:07 |
replaceafill | the exception? | 04:07 |
aelkner | the user sees the exception? | 04:08 |
replaceafill | i see it | 04:08 |
replaceafill | dont you? | 04:08 |
aelkner | ok, what was the input to new school year again? | 04:08 |
replaceafill | nothing | 04:09 |
aelkner | ok, so i entered nothing and hit Submit, and i get a form error at the top: | 04:09 |
aelkner | Please correct the marked fields below | 04:09 |
aelkner | next to the three fields, i see Required input is missing | 04:09 |
aelkner | this is not an exception | 04:09 |
aelkner | this is clean output to the user | 04:09 |
* replaceafill goes to check | 04:10 | |
replaceafill | File "/home/replaceafill/.buildout/eggs/zope.formlib-4.0.5-py2.6.egg/zope/formlib/widget.py", line 483, in _getCurrentValueHelper | 04:11 |
replaceafill | input_value = self.getInputValue() | 04:11 |
replaceafill | File "/home/replaceafill/.buildout/eggs/zope.formlib-4.0.5-py2.6.egg/zope/formlib/widget.py", line 407, in getInputValue | 04:11 |
replaceafill | value = self._toFieldValue(self._getFormInput()) | 04:11 |
replaceafill | File "/home/replaceafill/.buildout/eggs/zc.datetimewidget-0.7.0-py2.6.egg/zc/datetimewidget/datetimewidget.py", line 330, in _toFieldValue | 04:11 |
replaceafill | return self.context.missing_value | 04:11 |
replaceafill | ForbiddenAttribute: ('missing_value', <schooltool.schoolyear.schoolyear.SchoolYear object at 0x9396c80>) | 04:11 |
replaceafill | let me see if it happens in my online sandbox | 04:12 |
aelkner | try my demo instance: http://69.164.203.135:36660/schoolyears | 04:13 |
aelkner | it doesn't happen there either | 04:13 |
aelkner | maybe you haven't merged your own branch with trunk recently enough? | 04:13 |
replaceafill | i just did | 04:14 |
replaceafill | got your changes from like 30 mins ago | 04:14 |
aelkner | ok, never mind that then | 04:14 |
aelkner | can you give me a url where this crash happens? | 04:14 |
replaceafill | http://69.164.203.135:6660/schoolyears/2011/add.html | 04:15 |
replaceafill | i just updated to trunk | 04:15 |
replaceafill | i wanted to add two terms to 2011 | 04:16 |
replaceafill | but i made a mistake and added the first for the whole year | 04:16 |
aelkner | man, something funky on your instance | 04:16 |
replaceafill | when i tried to add the second i got the error | 04:16 |
aelkner | replaceafill, sorry, i was lying | 04:19 |
aelkner | it is a field validator | 04:19 |
replaceafill | lier! :P | 04:19 |
replaceafill | let me try something | 04:19 |
aelkner | so it should raise an error if it gets one | 04:19 |
replaceafill | i'll stop my instance | 04:19 |
replaceafill | yeah | 04:19 |
replaceafill | i'm not friend with bare excepts | 04:19 |
aelkner | try reraise | 04:19 |
aelkner | as a replacement for return | 04:20 |
aelkner | and exception e: | 04:20 |
aelkner | i guess it's reraise(e)? | 04:20 |
aelkner | i don't remember | 04:20 |
replaceafill | http://69.164.203.135:6660/schoolyears/add.html | 04:21 |
replaceafill | there | 04:21 |
replaceafill | no Data.fs | 04:21 |
replaceafill | i mean, fresh Data.fs | 04:21 |
replaceafill | i thought i was the Data.fs | 04:21 |
replaceafill | but it's not | 04:21 |
replaceafill | could you try with a fresh Data.fs? | 04:22 |
aelkner | i just tried it and it doesn't crash | 04:25 |
aelkner | i hit submit with no data in add school year | 04:25 |
aelkner | it gave me good errors | 04:25 |
aelkner | then i added a valid school year | 04:25 |
aelkner | then i went to add a term to that year, bitting Submit with no data, good errors | 04:26 |
aelkner | i added a good term, no problem | 04:27 |
replaceafill | weird | 04:27 |
replaceafill | if we both have trunk :( | 04:27 |
replaceafill | i'll create a new sandbox just to test | 04:27 |
aelkner | i'm working off of my branch, but i could try with trunk now | 04:27 |
aelkner | i never ran my tunk sandbox, just used it for merging | 04:28 |
aelkner | it's downloading eggs now | 04:28 |
replaceafill | mine too | 04:29 |
replaceafill | aelkner got it! | 04:34 |
replaceafill | well, it's my last change | 04:34 |
replaceafill | to customize the error classes | 04:35 |
aelkner | in trunk? | 04:36 |
replaceafill | yes | 04:36 |
replaceafill | skin.flourish.form.FlourishErrorViewSnippet | 04:36 |
aelkner | i don't have that class in that file | 04:38 |
aelkner | what revision in trunk is it? | 04:38 |
aelkner | oh, the last one | 04:38 |
replaceafill | 3019 | 04:39 |
replaceafill | yes | 04:39 |
aelkner | you pushed that right after me :) | 04:39 |
aelkner | i didn't think to pull immediately after pushing | 04:39 |
replaceafill | ah! | 04:39 |
aelkner | so what happened? did you try changing the validator to reraise? | 04:40 |
replaceafill | i inserted a pdb before the except | 04:40 |
replaceafill | and you get a ForbiddenAttribute | 04:40 |
aelkner | what if you say exception e: | 04:41 |
aelkner | reraise e | 04:41 |
aelkner | or whatever sytanx is correct | 04:41 |
aelkner | i mean the empty except is already there | 04:41 |
aelkner | that's what i'm suggesting you try changing | 04:42 |
replaceafill | i know that's the problem | 04:42 |
replaceafill | but i don't understand why the new viewsnippet shows it | 04:42 |
replaceafill | and the old one doesnt | 04:42 |
aelkner | let me take a closer look | 04:42 |
aelkner | yvl would not like: | 04:44 |
aelkner | class python:view.error is not None and 'error' or None | 04:44 |
aelkner | anything that needs python needs a view method in his opinion | 04:44 |
aelkner | and the thing is, he doesn't mind: | 04:44 |
aelkner | class python view.someMethod(error) | 04:45 |
aelkner | it's just having the python logic in there that is the no-no | 04:45 |
replaceafill | ok, i'll ask him | 04:45 |
aelkner | i'm guessing the idea is that view classes can be tested easily with unit tests | 04:45 |
aelkner | using a fake Request object, and an actual context, the test that your talking about cold be made | 04:45 |
aelkner | as a unit test | 04:46 |
aelkner | this is only a guess as to why he doesn't wat the python logic | 04:46 |
aelkner | but, yeah, bring it up at the meeting if you could | 04:46 |
aelkner | anyway, still looking... | 04:46 |
aelkner | ok, so the only relavent lines to the problem are the registration and definition of the snippet class | 04:48 |
replaceafill | yes | 04:48 |
aelkner | so you're capturing an error too soon perhaps | 04:49 |
aelkner | i think you should try the reraise | 04:49 |
replaceafill | will do | 04:49 |
aelkner | i think you exposed my bug | 04:49 |
replaceafill | after i understand how i exposed it :D | 04:49 |
aelkner | i figured i could return because it worked! | 04:49 |
aelkner | any tests against it would pass | 04:49 |
aelkner | however | 04:49 |
replaceafill | return means "success" in validators | 04:49 |
aelkner | i was relying on a side-effect | 04:50 |
aelkner | and you removed it, darn you :) | 04:50 |
replaceafill | i wonder why it's not catched in the z3c.form version | 04:50 |
replaceafill | anyway, i'll look into it | 04:50 |
replaceafill | thanks for the help aelkner | 04:50 |
aelkner | i give you permission to speculate on that one :) | 04:50 |
replaceafill | sorry for the noise :) | 04:50 |
aelkner | yeah, np | 04:50 |
aelkner | but what's the status? | 04:51 |
aelkner | is the reraise fix correct? | 04:51 |
replaceafill | i havent tried it yet, i'm debuggind the viewsnippet | 04:51 |
replaceafill | turning it on and off | 04:51 |
replaceafill | and checking the flow | 04:51 |
replaceafill | it's a nice way to set the error class, but i don't want it to be a problem for us | 04:52 |
replaceafill | so if i notice it's doing something wrong i'll remove it | 04:52 |
aelkner | sure, but if you are exposing a false reliance n side-effect, that's worth removing, too | 04:52 |
replaceafill | definitely | 04:53 |
aelkner | let me know when you've reraised | 04:53 |
aelkner | replaceafill, btw, the curios thing was that if i didn't do the try: except:, it wouldn't work | 04:55 |
replaceafill | what were you getting? | 04:55 |
aelkner | but whule pdb'ing, i realized i could pass the buck along | 04:55 |
aelkner | i don't remember | 04:55 |
replaceafill | ah ok | 04:55 |
aelkner | but if you have your hands in there, you'll be the one to tell me what you get | 04:56 |
aelkner | you could try commenting out the registration of your validator and see what happens with no try: except: | 04:56 |
aelkner | oh, that's what you were turning on and off | 04:57 |
replaceafill | aelkner found it! | 05:33 |
replaceafill | permission issue on the adapter registration | 05:33 |
replaceafill | :) | 05:33 |
replaceafill | i'll leave the simple field validators alone :D | 05:34 |
replaceafill | fix pushed to trunk | 05:35 |
aelkner | replaceafill, oh, man, that's not friendly, making you go through all that just for permission issue | 05:40 |
aelkner | but that's zope sometimes | 05:40 |
replaceafill | :D | 05:41 |
aelkner | +1 for not changing what i did until we have test coverage | 05:41 |
replaceafill | agree | 05:41 |
replaceafill | if it aint broken D: | 05:42 |
replaceafill | :D | 05:42 |
*** aks has joined #schooltool | 06:15 | |
*** aks has joined #schooltool | 06:15 | |
*** aks has quit IRC | 06:48 | |
*** replaceafill has quit IRC | 06:49 | |
*** aks has joined #schooltool | 06:54 | |
*** yvl has joined #schooltool | 09:43 | |
*** ignas has joined #schooltool | 10:12 | |
*** aks_ has joined #schooltool | 11:55 | |
*** aks has quit IRC | 11:56 | |
*** aks_ is now known as aks | 11:56 | |
*** aks_ has joined #schooltool | 11:56 | |
*** aks_ has quit IRC | 12:00 | |
*** aks has quit IRC | 14:17 | |
*** fsufitch has quit IRC | 14:38 | |
*** replaceafill has joined #schooltool | 16:08 | |
*** th1a has joined #schooltool | 16:24 | |
th1a | hi aelkner, replaceafill, yvl. | 16:30 |
replaceafill | good morning/afternoon | 16:30 |
aelkner | morning | 16:30 |
th1a | While we wait for yvl... | 16:32 |
th1a | aelkner: What's your status? | 16:32 |
yvl | good morning! | 16:33 |
* yvl was getting some coffee :) | 16:33 | |
* th1a knew it. | 16:33 | |
th1a | Enjoy your vacation, yvl? | 16:33 |
yvl | yes, thanks :) | 16:33 |
th1a | yvl: Have you tried to catch up on what we've done? | 16:35 |
th1a | Nothing too earth-shattering, I don't think. | 16:35 |
yvl | I'm almost done rummaging with code reviews | 16:35 |
yvl | nice work, guys :) | 16:36 |
yvl | a big personal thank you for XXX'es in places that deserved them | 16:36 |
th1a | I think we're in pretty good shape time wise. | 16:36 |
th1a | We can't slow down, but I think we'll make our goal. | 16:37 |
th1a | Calendar and interventions might get shortchanged. | 16:37 |
th1a | But at least superficially flourished. | 16:37 |
th1a | So... questions for yvl or from yvl? | 16:38 |
yvl | umm, please give me a few more minutes | 16:38 |
yvl | 4 revisions left :) | 16:38 |
th1a | I know aelkner and replaceafill had some issues they wanted to raise. | 16:38 |
th1a | OK. Anything to report from Friday afternoon or the weekend, aelkner & replaceafill? | 16:38 |
aelkner | i can start | 16:39 |
aelkner | i added Done buttons to index.html views that take you back to container views | 16:39 |
aelkner | and i added (finally) links to the School tab (/manage) for the container views that i worked on | 16:39 |
aelkner | i'd like to go over the whole navigation after the meeting to make any adjustments you see fit | 16:40 |
aelkner | additionally, i looked at the jquery plug-in we found on friday | 16:40 |
th1a | More important is going over all the navigation once we settle on the root views. | 16:40 |
aelkner | for instance, the School tab does not work the same as the School breadcrumb | 16:41 |
aelkner | which it probably should at some point | 16:41 |
aelkner | but getting bac to the plug-in | 16:41 |
aelkner | i figured out how it worked using firebug | 16:41 |
aelkner | here's the demo of the example with both row and column locking | 16:42 |
aelkner | http://jcbulanadi.oni.cc/sfht_freezecolumn_sortable_blue.html | 16:42 |
aelkner | it works by copying the rows and columns that need to be locked to another div | 16:43 |
yvl | (you guys did notice that the plug-in is a bit glitchy, right?) | 16:43 |
aelkner | that has identical info bu at a higher z-index | 16:43 |
aelkner | we could do the same without using the pluh-in if we didn't want to waste time | 16:44 |
th1a | yvl: In what way? | 16:44 |
aelkner | learning and depending upon a pluc-in which may or may not be buggy | 16:44 |
th1a | Not using the whole plug-in is an option, to be sure. | 16:44 |
yvl | FFox 3.6: if you scroll so that say row 19 is at the bottom and scroll horizontally | 16:45 |
yvl | part of the row is erased with other column information | 16:45 |
yvl | and you basically get garbage there | 16:46 |
aelkner | are you referring to the very link i posted? | 16:46 |
yvl | yes | 16:46 |
th1a | Seems to work for me. | 16:46 |
aelkner | me, too | 16:47 |
replaceafill | same here, ff 3.5 | 16:47 |
yvl | same bug on chromium | 16:47 |
th1a | Works for me on Mac Chrome. | 16:47 |
* aelkner has version 3.6.18 | 16:47 | |
aelkner | of firefox os course | 16:47 |
th1a | You're just scrolling down and scrolling back and forth? | 16:48 |
yvl | let me get a screenshot | 16:48 |
replaceafill | :| got "Warning: Suspected phishing site!" in chrome | 16:48 |
yvl | replaceafill, what's the address of pic dump you use? | 16:48 |
replaceafill | http://imageshack.us/ | 16:48 |
yvl | oh, right :D | 16:48 |
aelkner | replaceafill, why did you post that link? | 16:49 |
aelkner | i need to sign up for something?! | 16:49 |
replaceafill | aelkner no, yvl asked for it | 16:49 |
aelkner | oh | 16:49 |
yvl | http://imageshack.us/photo/my-images/88/freezecolumn.png/ | 16:50 |
aelkner | yvl, so where's the problem? | 16:50 |
yvl | tell me what's written in column 19 | 16:50 |
replaceafill | ah! | 16:51 |
th1a | The little split row at the bottom? | 16:51 |
replaceafill | it happens if you leave the last row to the middle | 16:51 |
replaceafill | confirmed | 16:51 |
yvl | yep | 16:51 |
yvl | a bit glitchy | 16:51 |
replaceafill | scroll down, leave the bottom row at the middle | 16:51 |
replaceafill | and scroll horizontally | 16:51 |
th1a | Ah. | 16:51 |
th1a | I see it. | 16:51 |
aelkner | you mean row 19? | 16:51 |
replaceafill | any row aelkner | 16:51 |
th1a | Leave a half-row at the bottom and scroll. | 16:52 |
aelkner | there are not 19 columns, so what? | 16:52 |
th1a | No... | 16:52 |
th1a | See the glitch at the bottom of the last row? | 16:52 |
th1a | It is still usable, but definitely a little glitch. | 16:53 |
aelkner | ok, o see it noq | 16:53 |
aelkner | i see it now | 16:53 |
yvl | but we can sure use this idea | 16:53 |
th1a | I say we steal the technique. | 16:53 |
aelkner | +1 | 16:54 |
yvl | +1 :) | 16:54 |
aelkner | a question | 16:54 |
aelkner | instead of copying the divs using js like the plug-ing does | 16:54 |
aelkner | couldn't we just deliver the divs ourselves in the template | 16:54 |
aelkner | this way we may be able to avoid the bleeding that we see here | 16:55 |
aelkner | because we will have more control over how it gets rendered | 16:55 |
yvl | I don't see how, sorry | 16:55 |
aelkner | i mean copying into the DOM dynamically is nice, but not as easy to control the outcome | 16:55 |
yvl | I mean - I don't see the benefit | 16:56 |
aelkner | well, perhaps the css for the overlaying divs needs to have a slightly higher width/height | 16:57 |
aelkner | to avoid the bleeding that we see | 16:57 |
yvl | well, if you try that with Chromium and FFox | 16:57 |
yvl | you should notice that the bleed area height is a bit different | 16:58 |
yvl | and we can also control widht/height with JS | 16:58 |
yvl | so I'd say stay with JS here | 16:58 |
aelkner | ok | 16:59 |
aelkner | what i'd like to do first is get the gradebook grid to render today without locked rows/columns | 17:00 |
aelkner | but inside the scrool area that our demo has | 17:00 |
aelkner | just to get me started, that is | 17:01 |
aelkner | does anyone know off hand what makes that table have scrool bars? | 17:01 |
th1a | That's fine. | 17:01 |
replaceafill | overflow property | 17:01 |
aelkner | on the table or a parent div? | 17:01 |
aelkner | replaceafill, and what is the exact css rule? | 17:02 |
replaceafill | let me look | 17:02 |
aelkner | overflow-x: visible? | 17:02 |
replaceafill | look for: | 17:02 |
replaceafill | div.sfhtData | 17:03 |
replaceafill | also div.sfhtHeader | 17:04 |
replaceafill | oveflow: auto and overflow: hidden | 17:04 |
aelkner | where? | 17:05 |
aelkner | in the css course file? | 17:05 |
replaceafill | http://jcbulanadi.oni.cc/css/scrollableFixedHeaderTable.css | 17:05 |
aelkner | wait, there's an iframe in the DOM | 17:06 |
replaceafill | yeah, but it's not used for the table | 17:06 |
replaceafill | (i think) | 17:06 |
aelkner | yeah, never mind | 17:06 |
aelkner | i noticed it came after all the table divs | 17:07 |
aelkner | anyway, i'll start by getting gradebook views to render in flourish | 17:08 |
th1a | OK. | 17:08 |
th1a | So do we have other questions for or from yvl? | 17:08 |
replaceafill | yvl have you seen rev 3019 yet? | 17:09 |
yvl | yes :) | 17:09 |
replaceafill | Removed JS used to assign css error class to widgets. The class is now assigned in the error view snippet. | 17:09 |
replaceafill | i like your comment on that one | 17:09 |
replaceafill | is it the right place? | 17:09 |
replaceafill | to set the error class | 17:09 |
replaceafill | i know i like it more than js :) | 17:09 |
yvl | I think so | 17:10 |
yvl | a great commit replaceafill ;) | 17:10 |
replaceafill | :D | 17:10 |
replaceafill | also: | 17:10 |
* yvl was going to suggest this until I saw that you'd already done that | 17:10 | |
replaceafill | Moved div.error above div.widget in z3c.form templates. We're floating div.error to the right, so this change top-aligns both divs. | 17:10 |
replaceafill | yeah, it was a nagging issue i wanted to get out of the way | 17:10 |
replaceafill | anyway, i changed the order of the divs because of radio buttons | 17:11 |
replaceafill | http://69.164.203.135:6660/resource_demographics/addText.html | 17:11 |
replaceafill | for example when you submit with no data | 17:11 |
replaceafill | you used to get the error rendering at the bottom right of the radio buttons | 17:11 |
replaceafill | it also happened with the zc.datetimewidget | 17:11 |
replaceafill | changing the order top-aligns both divs | 17:12 |
replaceafill | small change, but better i think | 17:12 |
yvl | probably yes | 17:12 |
replaceafill | i also was checking the security settings and how they affect the app | 17:12 |
replaceafill | and noticed: | 17:12 |
yvl | the error message looks a bit out of align to be honest | 17:12 |
replaceafill | Old version: The access control setting "Users cannot make their own calendars public." makes impossible for the user to Edit Preferences. | 17:13 |
yvl | (as in 4-6 px to high) | 17:13 |
th1a | replaceafill: For now we should probably just change the permission description. | 17:14 |
replaceafill | so, if the setting is on, the Preferences links shouldnt be rendered | 17:14 |
replaceafill | or you'll get a login form in the dialog | 17:14 |
replaceafill | th1a ah ok | 17:14 |
th1a | I guess so. | 17:14 |
th1a | The alternative is to hide the choice in the form? | 17:15 |
replaceafill | no, you cannot access the view | 17:15 |
replaceafill | at all | 17:15 |
th1a | But if you fixed it, it would hide the choice in the form? | 17:15 |
replaceafill | i didnt get to the bottom of the permission issue, i'll look | 17:16 |
replaceafill | i think the permission is not on the view, but on ${person}/preferences object | 17:16 |
th1a | Either way, this is a very low priority. | 17:16 |
replaceafill | yes | 17:16 |
replaceafill | agree | 17:16 |
replaceafill | ah, i had this question for yvl | 17:16 |
replaceafill | could we make the IPageRefineManager viewlet manager to filter based on content rendered by the viewlets? | 17:17 |
replaceafill | i'll try to explain | 17:17 |
yvl | yes we should | 17:17 |
replaceafill | ah ok :D | 17:17 |
yvl | you mean the renderableItems thing, right? | 17:18 |
replaceafill | i hacked something like that for the tertiary navigations | 17:18 |
replaceafill | correct | 17:18 |
replaceafill | it's useful for not getting the empty space in the sidebar | 17:18 |
yvl | true | 17:18 |
* yvl made a note on that today | 17:18 | |
replaceafill | :) | 17:18 |
replaceafill | last one (i think): | 17:18 |
replaceafill | and this is related to a long discussion we had about tests | 17:19 |
replaceafill | and not changing old classes, etc etc | 17:19 |
replaceafill | i'd like to add a css_class attribute to our table formatter | 17:19 |
* yvl too | 17:19 | |
yvl | sorry for interruption :) | 17:20 |
replaceafill | ah no prob | 17:20 |
replaceafill | it's just that it's hard to customize classes right now | 17:20 |
replaceafill | you have to hack the render method | 17:20 |
yvl | I noticed :| | 17:21 |
replaceafill | also i added a CSSFormatter that set css classes based on column names | 17:21 |
replaceafill | that's why i also added a name attribute to your ImageInputColumn | 17:21 |
yvl | right | 17:21 |
yvl | I kind of wanted some name sanitization there, btw | 17:22 |
replaceafill | +1 | 17:22 |
yvl | to make sure we dont get "john smith" css class :) | 17:22 |
yvl | or something like that | 17:22 |
replaceafill | :D | 17:22 |
replaceafill | ok, i have some other small things, but not important | 17:23 |
replaceafill | i'll bring them up later in the week or next meeting | 17:23 |
yvl | sure! | 17:23 |
replaceafill | good to have you back yvl :) | 17:23 |
yvl | good to be back! :) | 17:23 |
th1a | replaceafill: What's in your queue now? | 17:23 |
* yvl has a short comment on changing base classes | 17:23 | |
replaceafill | yvl go ahead | 17:24 |
yvl | (regarding tests) | 17:24 |
yvl | I think the UI remake - if implemented correctly - should not need to touch the "data model" interfaces | 17:24 |
*** menesis has joined #schooltool | 17:24 | |
yvl | if we absolutely need to - that means that something is wrong | 17:24 |
aelkner | +1 | 17:25 |
yvl | so it's a good test in itself on how clean our implementation is | 17:25 |
th1a | The only case it is really coming up is in interface descriptions. | 17:25 |
yvl | yes | 17:25 |
yvl | and they *should* be easily overridable | 17:25 |
aelkner | which we can override in the view calsses | 17:25 |
aelkner | yes, widget overrides | 17:25 |
th1a | Well... we're improving them though. | 17:26 |
yvl | if they're not - that means we don't have something implemented | 17:26 |
th1a | They are bugfixes. | 17:26 |
yvl | yes | 17:26 |
yvl | but still - if it's not easy to change them in some places | 17:26 |
yvl | i.e. the flourish layer | 17:27 |
yvl | it means we won't be able to change them in similar situations | 17:27 |
yvl | like on two different containers or whatever | 17:27 |
yvl | and I'd better have helpers to make that easy | 17:27 |
yvl | instead of having the excuse "Zope works this way" | 17:27 |
th1a | I think this is too hypothetical. | 17:27 |
* yvl does not | 17:28 | |
yvl | and it's easier to do I think than to discuss this :) | 17:28 |
* yvl just wanted to say | 17:28 | |
yvl | if we get to similar situation | 17:28 |
yvl | it's probably unclean implementation | 17:29 |
yvl | on some helpers missing as it is often with Zope | 17:29 |
yvl | and so far writing helpers seemed to improve dev speed | 17:29 |
yvl | ok, that's my 2 cents | 17:29 |
th1a | Thanks, yvl. | 17:30 |
th1a | member:replaceafill: What's in your queue now? | 17:30 |
replaceafill | th1a keep going through section views | 17:30 |
replaceafill | link/unlink | 17:30 |
th1a | Oh yes. | 17:30 |
replaceafill | and finally add/edit | 17:31 |
replaceafill | th1a are you going to be around today | 17:31 |
th1a | OK, yvl, I've been waiting on you to tackle Application | School | 17:31 |
th1a | replaceafill: yes, in and out. | 17:31 |
replaceafill | ah ok | 17:31 |
th1a | No official plans. | 17:32 |
* yvl is listening | 17:32 | |
* th1a is at his parents. | 17:32 | |
th1a | yvl: Well, I don't have any brilliant ideas. | 17:32 |
th1a | Things split between Application and School pretty easily. | 17:32 |
th1a | And links group rather easily too. | 17:33 |
* yvl was thinking that School should be a dashboard of the user - as in Home | 17:33 | |
th1a | Hm. | 17:33 |
th1a | I was thinking School was for the School Administrator and Application was for the Site Administrator. | 17:33 |
th1a | Site Manager, I guess we say. | 17:34 |
yvl | well yes | 17:34 |
aelkner | +1 | 17:34 |
yvl | but I tend to lean to merge Home and School | 17:34 |
yvl | for some reason | 17:34 |
aelkner | Home could be an additional tab | 17:34 |
yvl | not saying that I'm right on this one | 17:34 |
th1a | Essentially, there isn't going to be a new dashboard in this iteration. | 17:34 |
th1a | We really just have time to organize the existing links. | 17:35 |
yvl | there's actually not much to put in the School view | 17:36 |
yvl | apart form some overview/summary/something | 17:36 |
th1a | Oh... | 17:36 |
yvl | our manage view was pretty emtpy actually | 17:36 |
th1a | Yes! | 17:36 |
yvl | but we do need a place to put our "School" links, like persons, terms, etc | 17:37 |
yvl | and things like "please set up a year" | 17:37 |
th1a | Yes. | 17:37 |
th1a | I'm a little blocked on that. | 17:38 |
aelkner | and the School breadcrumb should match the School tab, yes? | 17:38 |
th1a | Presumably. | 17:38 |
th1a | So yvl, do you want to have a crack at that? | 17:39 |
yvl | I can try | 17:39 |
yvl | is some summary like thing ok? | 17:39 |
yvl | like this is your active schoolyear with these terms | 17:40 |
yvl | you have 30 teachers (add) | 17:40 |
yvl | and such | 17:40 |
th1a | Yes. | 17:40 |
yvl | ok | 17:40 |
th1a | I guess the main thing I was stuck on was forgetting that there should be more actual info on that page and not just links. | 17:40 |
th1a | But functionally, it obviously needs the links. | 17:40 |
yvl | yes | 17:41 |
th1a | OK, have a crack at that. | 17:41 |
yvl | sure, th1a | 17:41 |
th1a | Can we meet an hour earlier tomorrow? | 17:41 |
* yvl is good with that :) | 17:41 | |
replaceafill | +1 | 17:42 |
aelkner | +1 | 17:42 |
th1a | OK. See you then. | 17:43 |
* th1a drops the bag of gravel. | 17:43 | |
replaceafill | thanks everybody | 17:43 |
yvl | thanks guys | 17:43 |
yvl | th1a, can you stick around for few minutes? | 17:43 |
aelkner | yvl, good to have you back | 17:43 |
yvl | ok, I'll just put some things down | 17:44 |
th1a | I can, yvl . | 17:44 |
yvl | looking over the recent code changes, seems that we have a ~ day of plumbing | 17:44 |
yvl | some small "security"/stability holes are spreading over the code | 17:45 |
th1a | A tilde day? | 17:45 |
yvl | mostly output sanitization | 17:45 |
yvl | roughly a day :) | 17:45 |
yvl | some templates look overbloated and probably should be made (almost) generic | 17:46 |
yvl | I'll probably comment on some commits via email | 17:46 |
yvl | also - looked over selenium again | 17:46 |
th1a | Well... the question is whether this is the time to really "sprint" to get all the views flourished by feature freeze. | 17:46 |
aelkner | yvl, ~ a day is clearer than a ~ day :) | 17:46 |
th1a | And then fix them. | 17:46 |
yvl | yes | 17:46 |
th1a | I don't understand tilde at all. | 17:47 |
aelkner | approximately | 17:47 |
yvl | I just wanted to keep you informed | 17:47 |
aelkner | that's standard math english | 17:47 |
yvl | also there's the test issue | 17:47 |
aelkner | ah, yes, that | 17:47 |
yvl | I think we'll end up with manually run selenium tests just before the release | 17:47 |
aelkner | we need to get tests to pass some time soon | 17:47 |
yvl | at least some of the tests | 17:48 |
yvl | then again - we'll be pushing some new ground there | 17:48 |
th1a | I'd be more comfortable doing these things after we get all the views done for feature freeze. | 17:48 |
yvl | yes, of course! | 17:49 |
th1a | OK. ;-) | 17:49 |
yvl | just that it seemed like a good time to stop for a few hours | 17:49 |
yvl | and look a bit ahead :) | 17:49 |
yvl | you know - just after vacation and having 6 hours until meeting :) | 17:49 |
th1a | I'm trying to stay focused on the next three weeks. | 17:49 |
*** menesis has quit IRC | 17:49 | |
yvl | ok | 17:49 |
yvl | I won't bother you with that stuff then | 17:50 |
yvl | and guys... I think we won't have good tests for a while | 17:50 |
th1a | Bother me in three weeks. ;-) | 17:50 |
yvl | sure ;) | 17:50 |
yvl | overall it seems like we're going to make it | 17:51 |
yvl | so again - nice work guys :) | 17:51 |
yvl | well, thanks th1a :) | 17:52 |
yvl | replaceafill, do you have some small questions maybe? ;) | 17:52 |
yvl | /s/small/quick | 17:52 |
replaceafill | can we enable at least unit tests for evolution? | 17:53 |
replaceafill | we'll need small evolution for resources | 17:53 |
replaceafill | to make their type a demographics field | 17:53 |
yvl | looking... | 17:54 |
replaceafill | i tried to run the test but it complained about the journal, iirc | 17:54 |
replaceafill | i haven't pushed that one yet | 17:54 |
replaceafill | but in general, no evolution test works | 17:54 |
replaceafill | yvl what do you think of css classes like ".bold" or ".center"? | 17:55 |
* yvl is a bit neutral on that topic | 17:55 | |
replaceafill | ah ok | 17:55 |
yvl | I don't know if they make a lot of sense | 17:55 |
yvl | ok, ST core evolution tests mostly work | 17:56 |
replaceafill | really? | 17:56 |
* replaceafill goes to try them again | 17:56 | |
yvl | (when not including gradebook or intervention) | 17:56 |
replaceafill | ah! | 17:56 |
yvl | evolve28 is broken though | 17:56 |
replaceafill | ah good, i can test my evolution script then! | 17:57 |
* yvl will find some time to look at the test situation this week | 17:57 | |
replaceafill | just with core | 17:57 |
yvl | sure | 17:58 |
replaceafill | * could we remove getColumnsBefore from skin.flourish.container.TableContainerView? | 17:58 |
replaceafill | it's setting the checkbox | 17:58 |
replaceafill | which we dont use much now | 17:58 |
replaceafill | not remove | 17:58 |
replaceafill | make it return [] | 17:58 |
yvl | feel free to :) | 17:58 |
replaceafill | * can we make title column in default schooltool table formatter locale aware getter instead of just getter? | 17:59 |
replaceafill | i've been setting tableformatters just for the locale awareness | 17:59 |
yvl | yes, please | 17:59 |
replaceafill | * Selection List Fields in person/resource demographics should be rendered as optional | 18:00 |
replaceafill | when you set a demographics field, the form is rendered with the first option selected | 18:00 |
replaceafill | we could set prompt and prompmessage on them i think | 18:00 |
yvl | hmm, I think so | 18:00 |
* yvl goes to look at it | 18:01 | |
replaceafill | yvl that's it basically :) | 18:01 |
replaceafill | ah | 18:01 |
replaceafill | last one :D | 18:01 |
replaceafill | +<!-- XXX: any reason why canModify is called here? | 18:02 |
replaceafill | + it prevents public views on containers, right? --> | 18:02 |
replaceafill | that's from: | 18:02 |
yvl | true, we should add prompt to selection list fields | 18:02 |
replaceafill | schooltool/skin/flourish/templates/table_container.pt | 18:02 |
replaceafill | i know i can set canModify to return True | 18:02 |
replaceafill | to allow public access | 18:03 |
replaceafill | but was wondering why was required in the template if it's not used | 18:03 |
yvl | no, I think that's a leftover from skin/templates/table_container.pt | 18:03 |
replaceafill | ah, ok | 18:03 |
yvl | for the delete button | 18:04 |
yvl | sorry, missed that somehow :) | 18:04 |
replaceafill | :D | 18:04 |
replaceafill | and: | 18:04 |
replaceafill | TableContainerView | 18:04 |
replaceafill | could we delay the table look up to update | 18:04 |
replaceafill | instead of __init__? | 18:04 |
replaceafill | and make it use the self.container instead of context? | 18:04 |
replaceafill | for the look up | 18:05 |
yvl | +1 for delaying until update | 18:05 |
yvl | not sure about container vs context | 18:05 |
yvl | I mean - logically - yes | 18:05 |
yvl | you know what, +1 :) | 18:06 |
replaceafill | :D | 18:06 |
replaceafill | it's just that /courses and /groups use app as context | 18:07 |
replaceafill | and i wanted the table formatter on coursecontainer and groupcontainer | 18:07 |
replaceafill | :) | 18:07 |
yvl | right | 18:07 |
yvl | by the way | 18:08 |
yvl | replaceafill, aelkner | 18:08 |
yvl | about try/except | 18:08 |
aelkner | yes? | 18:08 |
yvl | please never ever use empty excepts | 18:08 |
replaceafill | +1 | 18:08 |
*** menesis has joined #schooltool | 18:08 | |
replaceafill | bare excepts i call them | 18:08 |
yvl | they're very... what's the word | 18:08 |
replaceafill | dangerous!?!!? | 18:08 |
replaceafill | :D | 18:08 |
yvl | treacherous | 18:08 |
aelkner | if you look above, you see XXX | 18:08 |
yvl | yes | 18:09 |
aelkner | the whole thing is a hack | 18:09 |
* yvl just wanted to say why | 18:09 | |
aelkner | go on | 18:09 |
yvl | imagine you call this function inside the try: block | 18:09 |
yvl | def foo(): | 18:09 |
yvl | print this_is_not_a_variable | 18:09 |
yvl | this raises an exception and silently gets eaten by except | 18:09 |
aelkner | i know that at the time of writing that block | 18:10 |
aelkner | again, the XXX | 18:10 |
yvl | sure | 18:10 |
yvl | just wanted to remind | 18:10 |
yvl | sorry for the obvious... | 18:11 |
replaceafill | aelkner but the XXX is for accessing the request | 18:11 |
replaceafill | not for the bare except | 18:11 |
aelkner | ideally, the exception would be handled by whoever called the discriminator | 18:11 |
aelkner | but it doesn't! | 18:11 |
yvl | no, not that | 18:11 |
replaceafill | it's not that the whole thing it's a hack | 18:11 |
yvl | you should simply specify what exceptions you expect | 18:11 |
aelkner | toFieldValue could generate any number of exceptions | 18:11 |
yvl | except SomeValidationError e: | 18:11 |
aelkner | it seems stupid to have to seek them out and list them | 18:12 |
yvl | well, some of them have base classes | 18:12 |
aelkner | again, why are they not handled by the alled of the discrimnator | 18:12 |
yvl | but it's really dangerous to have bare excepts | 18:12 |
aelkner | caller | 18:12 |
yvl | aelkner - I do agree that it should be implemented differently | 18:12 |
aelkner | yvl, ok, enough wth the obvious coding rule | 18:12 |
aelkner | let's deal with the problem | 18:13 |
yvl | sure | 18:13 |
aelkner | and sorry to sound abrupt, just can't keep up with you guys with typing speed :) | 18:13 |
replaceafill | :) | 18:14 |
yvl | sure aelkner | 18:14 |
yvl | blame our early days of IRC chatter ;) | 18:14 |
aelkner | replaceafill, the XXX is because the whole thing is a workaround, a hack for hiding form errors | 18:14 |
aelkner | remember? | 18:14 |
replaceafill | aelkner no | 18:14 |
replaceafill | ah | 18:15 |
replaceafill | you mean in the validator | 18:15 |
replaceafill | yes | 18:15 |
aelkner | yes | 18:15 |
replaceafill | but not the bare except is the hack, right? | 18:15 |
replaceafill | oops | 18:15 |
replaceafill | that went out wrong :D | 18:15 |
yvl | for me bare excepts are almost as evil as committing in "import pdb; pdb.set_trace()" | 18:15 |
aelkner | the bare except is the hack within the hack | 18:15 |
replaceafill | but the bare except is not THE hack :) | 18:15 |
replaceafill | aelkner :D | 18:15 |
aelkner | a workarond of a workaround | 18:15 |
aelkner | :) | 18:15 |
aelkner | anyway... | 18:16 |
yvl | right | 18:16 |
* yvl was not a fan of document.write('\074style\076 input.chk { display: none } \074/style\076'); | 18:16 | |
aelkner | if someone wants to solve the hiding form errors issue, they have m approval | 18:16 |
yvl | sure aelkner ;) | 18:16 |
replaceafill | yvl your opinion on this one: | 18:17 |
replaceafill | <input id="username" name="username" type="text" tabindex="1" | 18:17 |
replaceafill | tal:attributes="value request/username|nothing; | 18:17 |
replaceafill | class python:view.error is not None and 'error' or None" /> | 18:17 |
replaceafill | is the python: ... that evil too? | 18:17 |
replaceafill | to be moved to the class | 18:17 |
replaceafill | i mean, to the view class | 18:17 |
yvl | well it does look awkward | 18:18 |
replaceafill | kk, is our policy 100% no python: ... in templates? | 18:18 |
replaceafill | i'll move it to the view class | 18:18 |
*** menesis has quit IRC | 18:18 | |
aelkner | yvl, about empty except vrs pdb, in my opinion much different | 18:19 |
aelkner | if we have test coverage | 18:19 |
aelkner | then any code that works is ok at one level | 18:19 |
aelkner | if we have pdb, it couldn't possibly be working code | 18:19 |
yvl | well yes | 18:19 |
yvl | hence - "almost as evil" | 18:19 |
yvl | as in - one step from oblivion | 18:19 |
aelkner | :) | 18:19 |
yvl | replaceafill, it's not that 100% no python in templates | 18:20 |
yvl | but this check does look out of place, doesn't it? | 18:20 |
replaceafill | would python: view.method(fooargument) be ok? | 18:20 |
yvl | especially with is not None ... or None | 18:20 |
replaceafill | like in a tal:repeat | 18:20 |
replaceafill | i liked aelkner's point that having all in the view class makes it easy to test | 18:21 |
yvl | a very good point, aelkner | 18:21 |
aelkner | a good guess | 18:21 |
replaceafill | so, i'll stay away from python:... in templates :) | 18:21 |
yvl | an educated guess ;) | 18:21 |
yvl | view.method(fooargument) is ok | 18:22 |
aelkner | but was there anyting else you don't like about python in templates | 18:22 |
yvl | but then again - I'd rather use dicts of stuff where possible | 18:22 |
aelkner | other than the testing issue | 18:22 |
yvl | * yvl's opinion might change ;) | 18:22 |
replaceafill | :D | 18:22 |
*** menesis has joined #schooltool | 18:22 | |
replaceafill | yvl if you clean the templates, could you create a table-display macro? | 18:23 |
aelkner | ok, but anyway, we all have a rule that we can follow, so that's something | 18:23 |
replaceafill | aelkner +1 | 18:23 |
yvl | python strings are long, a bit inconvenient to read in that context, they have to avoid " and are mostly testable via funcional tests | 18:23 |
yvl | that's enough reasons I think | 18:23 |
aelkner | +1 | 18:23 |
yvl | replaceafill, a table-display? | 18:24 |
replaceafill | it's that th1a sometimes want index views to be tables with the field values, right? | 18:24 |
replaceafill | like label: value | 18:24 |
replaceafill | rows | 18:24 |
replaceafill | i know we could adjust the z3c-schooltool-display template to do it | 18:25 |
replaceafill | but it's easier with tables | 18:25 |
yvl | hmm, I'll keep that in mind | 18:25 |
replaceafill | so i copied the table template from z3c.formui | 18:25 |
yvl | feel free to write that if you work on something similar thoughy | 18:25 |
yvl | though | 18:25 |
replaceafill | but when i saw that i needed it again and again | 18:26 |
replaceafill | i said, this has to be a general template | 18:26 |
th1a | Generally speaking, yes, putting random values in tables is how we're formatting them. | 18:26 |
replaceafill | and then we needed to insert more sections at the bottom, etc | 18:26 |
replaceafill | so it started to smell like macro template | 18:26 |
replaceafill | :) | 18:26 |
* yvl thinks he has a list that includes those templates with repeating tables | 18:27 | |
*** menesis has quit IRC | 18:27 | |
yvl | allrgiht... I won't keep you any longer from coding | 18:27 |
replaceafill | in my head, so far we have these use cases for templates: one fieldset forms, multi fieldset forms and table ike displays | 18:27 |
yvl | good to see you guys again :) | 18:27 |
yvl | true replaceafill | 18:28 |
* yvl want's to do some stuff later on for multi-fieldset forms | 18:28 | |
yvl | but not in these three weeks | 18:28 |
yvl | (probably) | 18:29 |
* replaceafill goes back to sections | 18:29 | |
*** menesis has joined #schooltool | 18:31 | |
yvl | see you guys tomorrow :) | 18:31 |
replaceafill | thanks yvl, see you | 18:31 |
th1a | Thanks yvl . | 18:31 |
aelkner | cya yvl | 18:32 |
replaceafill | th1a Schwadesign is the company you hired, correct? | 18:33 |
* replaceafill just got an email from them | 18:33 | |
th1a | Yes. | 18:33 |
th1a | Did you get an email about their Basecamp? | 18:33 |
replaceafill | yes | 18:33 |
yvl | darn spammers | 18:33 |
replaceafill | :D | 18:33 |
replaceafill | i think i found a bug in the add term view | 18:41 |
replaceafill | http://69.164.203.135:6660/schoolyears/2012/add.html | 18:41 |
replaceafill | title: 2012 | 18:42 |
replaceafill | start date: 2011-01-01 | 18:42 |
replaceafill | end date: 2012-12-31 | 18:42 |
replaceafill | next | 18:42 |
replaceafill | add term | 18:42 |
replaceafill | you get an exception | 18:42 |
aelkner | what's the exception? | 18:43 |
aelkner | replaceafill, could this be a continuation of last night's issues | 18:43 |
replaceafill | let me check an older instance | 18:44 |
replaceafill | aelkner no, it's not related | 18:52 |
replaceafill | it happens in rev 3018 as well | 18:52 |
replaceafill | http://69.164.203.135:6661/schoolyears/2010/add.html | 18:52 |
replaceafill | rev 3018 is before my changes | 18:52 |
replaceafill | the exception is: ValueError: Term can't start before the school year starts! | 18:53 |
aelkner | i got that error before without getting an exception | 19:04 |
aelkner | please try and track this down and fix whatever you find | 19:04 |
replaceafill | on it :) | 19:04 |
aelkner | thanks | 19:04 |
replaceafill | it's weird that it works for the last date | 19:04 |
replaceafill | but not for the first | 19:04 |
replaceafill | oops! i'm fixing revision 3018 :D | 19:05 |
* replaceafill moves to trunk ;) | 19:05 | |
*** menesis has quit IRC | 19:08 | |
*** menesis has joined #schooltool | 19:10 | |
*** ignas has quit IRC | 20:36 | |
*** menesis has quit IRC | 20:53 | |
*** fsufitch has joined #schooltool | 21:36 | |
*** ignas has joined #schooltool | 23:16 |
Generated by irclog2html.py 2.15.1 by Marius Gedminas - find it at mg.pov.lt!