*** th1a has joined #schooltool | 03:18 | |
*** replaceafill has joined #schooltool | 03:41 | |
*** th1a has quit IRC | 07:32 | |
*** yvl has joined #schooltool | 07:48 | |
replaceafill | yvl, you around? | 08:05 |
---|---|---|
yvl | good evening, replaceafill | 08:05 |
replaceafill | hey yvl, you're better? | 08:05 |
yvl | yeah, thanks :) | 08:05 |
replaceafill | glad to hear, i've been wanting to ask you a couple of things, i know you probably have lots of work to do | 08:06 |
replaceafill | can you give me a time for us to meet? like 30 mins or so | 08:06 |
yvl | of course! | 08:07 |
yvl | we can do that now :) | 08:07 |
replaceafill | great! let me take my notes | 08:07 |
replaceafill | my questions are related to the scoresystem preference work in the gradebook | 08:08 |
replaceafill | and i have a few about enrollment statuses | 08:08 |
replaceafill | i dont want to continue until i have your ok :) | 08:08 |
replaceafill | ok, for the scoresystem preference work | 08:08 |
replaceafill | bug: https://bugs.launchpad.net/schooltool.gradebook/+bug/671863 | 08:08 |
replaceafill | scoresystem preferences (and others like hiding average and total columns) are currently stored in the person as annotations, right? | 08:09 |
yvl | AFAIR yes, but lemme check | 08:10 |
replaceafill | :) | 08:10 |
replaceafill | schooltool.gradebook/gradebook.py | 08:10 |
yvl | ah, yes | 08:10 |
replaceafill | ok, you suggested we use adapters for that | 08:11 |
replaceafill | and store the annotations in the adapter contexts (i guess) | 08:11 |
replaceafill | like worksheets | 08:11 |
yvl | you can keep storing in 0th instructor of the section.. | 08:12 |
yvl | current functionality is a bit weird, actually | 08:12 |
replaceafill | what if he dies? :D | 08:12 |
replaceafill | and he's changed? | 08:12 |
yvl | everybody will see same preferences as 0th teacher | 08:12 |
yvl | other teachers see their own preferences | 08:13 |
yvl | you can keep the system working as it is now | 08:14 |
yvl | and fix it in another go :) | 08:14 |
replaceafill | what do you mean? not sure i got that right :( | 08:14 |
yvl | this: | 08:14 |
yvl | section = ISection(gradebook) | 08:14 |
yvl | instructors = list(section.instructors) | 08:14 |
yvl | if len(instructors) == 0: | 08:14 |
yvl | person = None | 08:14 |
yvl | else: | 08:14 |
yvl | person = instructors[0] | 08:14 |
yvl | columnPreferences = gradebook.getColumnPreferences(person) | 08:14 |
yvl | however you refactor, make adapters get annotations if the 0th instructor of the relevant section | 08:15 |
replaceafill | i'd still have to store the worksheet|section data, correct? | 08:17 |
replaceafill | to know that i want preferences of 0th instructor for THIS worksheet/section | 08:18 |
yvl | ok, I didn't read Alans last comment right | 08:20 |
yvl | if you're doing the "three-level selection paradigm" thing | 08:21 |
replaceafill | I guess Alan's suggest a 'cascade' system to pick the scoresystem | 08:21 |
yvl | you should store on annotations of respective objeccts | 08:21 |
replaceafill | yes! | 08:21 |
yvl | sorry, didn't finish my morning coffe yet | 08:22 |
yvl | sleepy ;) | 08:22 |
replaceafill | np | 08:23 |
replaceafill | so, i'm in a worksheet and i want its preferences, i have to adapt (worksheet, instructor[0]), right? | 08:24 |
yvl | scrap what I said before | 08:24 |
yvl | just the worksheet | 08:24 |
replaceafill | ah ok | 08:25 |
replaceafill | worksheet stores its preferences | 08:25 |
replaceafill | what if i want to set preferences by section, same right? store preferences in the section | 08:26 |
yvl | I'm afraid you know the details better | 08:27 |
yvl | how are the worksheets done now? | 08:27 |
replaceafill | i was trying an approach like: look up worksheet prefs, if you find one use it, if not, look at the section, if you find one use it, adn so on | 08:27 |
*** aelkner_ has quit IRC | 08:28 | |
replaceafill | "<yvl> how are the worksheets done now?" <-- not sure i got that right? | 08:29 |
* yvl is looking at the code... | 08:29 | |
yvl | umm | 08:33 |
yvl | clearly still haven't woken up | 08:33 |
replaceafill | :)) | 08:33 |
yvl | where are the worksheets stored? | 08:33 |
replaceafill | in the IActivities | 08:35 |
replaceafill | you adapt a section to IActivities | 08:35 |
replaceafill | the IActivities are stored in the section annotations | 08:35 |
replaceafill | schooltool/gradebook/activity.py/getSectionActivities | 08:36 |
yvl | ok, found/remembered :) | 08:37 |
yvl | so yes | 08:37 |
yvl | store on section annotations | 08:37 |
yvl | by the way | 08:38 |
yvl | how are you going to implement the "hierarchy"? | 08:38 |
yvl | say, we are selecting worksheet score system | 08:38 |
yvl | the default value should be something like 'use __parent__ defaults' | 08:39 |
yvl | replace __parent__ with section here | 08:39 |
replaceafill | yes | 08:39 |
replaceafill | at this point i have it working for worksheet/section only | 08:40 |
yvl | how are you going to select the parent? | 08:40 |
replaceafill | but another of my questions is: how do i handle existing data? | 08:40 |
yvl | another adapter? IParentPreferences? :) | 08:41 |
yvl | or IInheritedPreferences or something :) | 08:41 |
replaceafill | i've used a function with sucky 'providedBy' checks by now | 08:41 |
yvl | existing data -> evolution | 08:41 |
replaceafill | but as i learned from you, wherever you see if's with providedBy... you can use adapters ;) | 08:42 |
yvl | evolution, because you will be changing the behaviour, so no sense to keep the data were it is | 08:42 |
replaceafill | but existing data stores no information about sections :( | 08:42 |
replaceafill | existing data only says, justas wants total columns hidden | 08:43 |
replaceafill | not where | 08:43 |
yvl | yeah | 08:43 |
yvl | but all sections have instructors | 08:43 |
replaceafill | i take the instructor[0] preference? | 08:43 |
yvl | I meant may have | 08:43 |
yvl | yes | 08:43 |
replaceafill | do i erase the preference from the person in the evolution script? | 08:44 |
yvl | probably yes | 08:45 |
yvl | but it would be good to bring this up in today's meeting | 08:45 |
yvl | that the behaviour is changing | 08:45 |
replaceafill | yes, evolution is where i got stuck :( | 08:45 |
replaceafill | i wasn't sure what to do | 08:45 |
yvl | ignore it for now | 08:45 |
yvl | :) | 08:46 |
replaceafill | great! will make those if's adapters then | 08:46 |
replaceafill | for the hierarchy | 08:46 |
yvl | I may be to cautious or something | 08:46 |
yvl | but I like things like that to be matter of configuration | 08:46 |
replaceafill | the adapters for the hierarchy? | 08:47 |
yvl | as in: I want the defaults of worksheets to be specified for sections | 08:47 |
yvl | yes | 08:47 |
replaceafill | understood | 08:47 |
replaceafill | well, i guess that's all i had to ask in this matter :) | 08:48 |
replaceafill | will leave the enrollment status qeustions for next time | 08:48 |
yvl | easy to change, if, for some reason some school decides that defaults for section should come from the courses, not from terms | 08:48 |
replaceafill | yes | 08:49 |
yvl | oh, it's a bit late... :) | 08:49 |
yvl | well, good night ;) | 08:49 |
replaceafill | np, i'll plan to stay up late ;) (slept a lot in the afternoon) :D | 08:50 |
replaceafill | btw, these dont need to be 'named' adapters, right? | 08:51 |
replaceafill | i still get confused when the name is required | 08:51 |
replaceafill | when you're planning to make possible to override the adapter | 08:51 |
yvl | I can't think of a reason for them to be named | 08:53 |
replaceafill | cool | 08:54 |
replaceafill | thanks yvl! | 08:54 |
yvl | you're welcome :) | 08:54 |
replaceafill | glad to have you back :) | 08:54 |
yvl | Thanks :) | 08:59 |
yvl | it's good to be back... | 08:59 |
*** aelkner has joined #schooltool | 09:06 | |
aelkner | yvl: hey | 09:32 |
yvl | evening, aelkner | 09:32 |
aelkner | do you have a moment to look at my schooltool branch? | 09:32 |
aelkner | i haven't pushed yet, but i cold | 09:33 |
aelkner | could | 09:33 |
yvl | sure | 09:34 |
aelkner | yvl: ok, i pushed up my changes to the resource forms | 09:46 |
aelkner | they use z3c formlib | 09:46 |
yvl | thanks, looking at it... | 09:46 |
aelkner | and i was able to get the forms rendered until i dealt with the subtype widget | 09:47 |
aelkner | see the getBaseFields(self): method where I set the widget for the field | 09:47 |
aelkner | location and equiptment resources have the type attribute which has a special widget | 09:48 |
aelkner | so i've been working on the widget class which uses the z3c version of the widget subclass | 09:52 |
aelkner | i made a lot of progress, but the datamanager adapter is not working | 09:52 |
aelkner | do i need to register something? | 09:52 |
yvl | probably :) | 09:54 |
yvl | I'm still looking at the changes | 09:54 |
*** menesis has joined #schooltool | 09:56 | |
yvl | by the way | 09:57 |
yvl | why is src/schooltool/resource/browser/templates/resource_form.pt full of metal:define ? | 09:57 |
yvl | sorry define-slot | 09:58 |
yvl | it looks like a copy of skin/templates/z3c-schooltool-form.pt | 09:58 |
replaceafill | ...which btw is not updated for subgroups ;) | 09:59 |
yvl | FIY, I'd prefer instead of: from zope.formlib import form as oldform | 10:00 |
yvl | just do: from zope import formlib | 10:00 |
yvl | and then use formlib.form.Fields, formlib.form.Actions | 10:00 |
yvl | would make it easier to read the code | 10:01 |
aelkner | good idea | 10:02 |
yvl | you may do the same for z3c.form | 10:02 |
yvl | but that is up to your aesthetics | 10:02 |
aelkner | yeah, more verbose, but disambiguated | 10:02 |
yvl | yes | 10:02 |
yvl | it's up to you to choose if it makes sense in this particular case | 10:03 |
yvl | explicit use of z3c.form.* and formlib.* makes code clearer | 10:03 |
yvl | but also gives macaroni :) | 10:03 |
yvl | z3c.form.button.buttonAndHandler(_('Cancel')) | 10:04 |
aelkner | it's always a trade-off | 10:04 |
aelkner | btw | 10:04 |
aelkner | the problem is the file has mixed formlib/z3c.formlib | 10:05 |
yvl | yes | 10:05 |
aelkner | that isn't usually the case | 10:05 |
yvl | that is why in this file it may make sense | 10:05 |
yvl | I mean - sometimes it's good to warn a developer that this is formlib, and the next class is z3c.form | 10:06 |
yvl | if it's the same file, in my opinion - the long resulting macaroni may not be worth it | 10:06 |
yvl | hmm, you might want to change menuItem directives to navigation viewlets | 10:07 |
yvl | also, you don't need to write your __call__ in BaseResourceView | 10:08 |
yvl | it is already done in z3c.form | 10:08 |
yvl | (just so you know, it also checks if response status is a redirect, in which case the view is not rendered) | 10:09 |
yvl | (just an interesting factoid ;) ) | 10:09 |
yvl | as for BaseResourceAddView.update | 10:11 |
yvl | I usually consider it somewhat dangerous to override a single method of the base library class | 10:11 |
yvl | and not call with super or similar | 10:12 |
yvl | in your implementation, it differs from z3c.form, because it does not refresh actions | 10:12 |
yvl | might give future developers an unexpected 'present' | 10:12 |
yvl | please change to something like: | 10:13 |
yvl | 437 | 10:13 |
yvl | def update(self): | 10:13 |
yvl | 10:13 | |
yvl | 438 | 10:13 |
yvl | self.fields = self.getBaseFields() | 10:13 |
yvl | 10:13 | |
yvl | 439 | 10:13 |
yvl | self.fields += self.getDemoFields() | 10:13 |
yvl | super(BaseResourceAddView, self).update() | 10:13 |
aelkner | yvl: i need to go to sleep now, but could you keep looking at the branch and try to | 10:23 |
aelkner | figure out how to get it to not fail on the adapter lookup? | 10:23 |
yvl | sure | 10:23 |
yvl | in short | 10:24 |
yvl | you wrote a new widget | 10:24 |
aelkner | i hacked one, you should say | 10:24 |
yvl | and it does not know how to get the data from the request, validate it, and convert ir to python variables | 10:24 |
yvl | (well, at least from z3c.form point of view ;) ) | 10:25 |
aelkner | it's in a transition state from formlib to z3c... | 10:25 |
yvl | I understand | 10:25 |
yvl | if you want an example | 10:25 |
yvl | we do have on in basicperson/browser/demographics.pyt | 10:26 |
yvl | .py | 10:26 |
yvl | CustomEnumDataConverter | 10:26 |
yvl | but that will be not enough | 10:26 |
yvl | or maybe... | 10:27 |
aelkner | do you think you could make any progress on it while i sleep? | 10:27 |
yvl | yes | 10:29 |
yvl | goodnight aelkner | 10:29 |
yvl | see you at the meeting :) | 10:29 |
aelkner | thanks, see you in six hours | 10:29 |
replaceafill | yvl, question | 10:30 |
replaceafill | if we implement the lookup hierarchy for preferences using adapters | 10:30 |
replaceafill | wouldnt be nice to be able to set the worksheet preferences for the whole school and let the teachers to customize what they want? | 10:31 |
* replaceafill thinks he's trying to fly too high | 10:31 | |
replaceafill | but i see a problem with the look up :( | 10:32 |
replaceafill | i set the preferences for the section, then i go to a worksheet and customize "SOME" not all | 10:32 |
replaceafill | i only can handle that duplicating data from the 'parent' | 10:33 |
replaceafill | yvl, http://pastebin.com/16X419Qs | 10:33 |
yvl | a moment... I'm making coffee :9~~~ | 10:34 |
* replaceafill feels envy and goes to make coffee too... | 10:34 | |
yvl | well, the old implementation of preferences is a simple dict | 10:41 |
yvl | so it does not have a schema, IIRC | 10:41 |
replaceafill | no | 10:42 |
replaceafill | and that's a problem if you want to know what preferences we have :( | 10:42 |
yvl | right | 10:42 |
yvl | so you'll need to add a few things | 10:42 |
yvl | scoresystem_average should be a choice field, shouldn't it? | 10:42 |
replaceafill | ah ok | 10:43 |
yvl | with a custom vocabulary | 10:43 |
yvl | that lists scoresystems that make sense | 10:43 |
yvl | and an option "inherit from XXX" | 10:43 |
replaceafill | :| | 10:43 |
yvl | overall, I'd go as far as use the pattern calendars and timetabling is using | 10:44 |
yvl | IHaveWorksheetPreferences | 10:44 |
yvl | IWorksheetPreferences | 10:44 |
yvl | IInheritedWorksheetPreferences | 10:44 |
yvl | in the vocabulary, get IInheritedWorksheetPreferences | 10:44 |
replaceafill | ihaveworksheetpreferences -> objects that store preferences | 10:45 |
yvl | if it's None, it has nowere to inherit from (e.g. it's app preferences) | 10:45 |
yvl | yes | 10:45 |
replaceafill | iworksheetpreferences -> the preferences stored in ihaveworksheetpreferences | 10:45 |
yvl | if it's not None, use inherited.context.title or somehting | 10:45 |
yvl | stored in annotations of object that implements ihaveworksheetpreferences | 10:45 |
replaceafill | nice :) | 10:46 |
yvl | if you do this, the rest should be defined in ZCML | 10:46 |
yvl | and modified up to user's requirements :) | 10:47 |
replaceafill | i was wondering if the instructor could be a ihaveworksheetpreferences | 10:48 |
replaceafill | like jumping from: worksheet -> section -> teacher -> app | 10:48 |
yvl | probably yes | 10:50 |
yvl | but there's always a question of multiple instructors :) | 10:50 |
replaceafill | ah crap! true | 10:50 |
yvl | the relationships are not exactly ordered | 10:51 |
*** replaceafill has quit IRC | 11:08 | |
*** th1a has joined #schooltool | 15:34 | |
*** replaceafill has joined #schooltool | 16:25 | |
th1a | Hi replaceafill, yvl, menesis, aelkner. | 16:30 |
aelkner | morning | 16:30 |
replaceafill | good morning/afternoon | 16:30 |
menesis | hello | 16:31 |
yvl | good morning1 | 16:32 |
yvl | ! | 16:32 |
th1a | OK, just hit "send" on the 2010 report & 2011 proposal. | 16:33 |
th1a | Just got the "out of office" reply from Mark. ;-) | 16:34 |
th1a | Now, where were we? | 16:34 |
th1a | yvl, how are you? | 16:34 |
yvl | I'm back, in "full battle condition" :) | 16:34 |
yvl | (and it's freezing here, -13C / 9K) | 16:35 |
th1a | 9 Kelvin? | 16:35 |
yvl | yes | 16:35 |
yvl | should get as low as 0K | 16:35 |
th1a | Doesn't all matter stop moving at 0K? | 16:36 |
th1a | Absolute zero? | 16:36 |
yvl | good point ;) | 16:36 |
th1a | Do you mean F? | 16:36 |
yvl | of course | 16:36 |
aelkner | K is for Fahrenheit | 16:36 |
th1a | Good coding weather. | 16:36 |
yvl | :) | 16:37 |
yvl | by the way, what's the status with guys from Critical Links? | 16:37 |
yvl | (aelkner, please check your email :) ) | 16:38 |
th1a | We will probably be having our annual meeting in Portugal in late January. | 16:38 |
th1a | Alex, the product manager for the education appliance is going to be there too (from New Jersey). | 16:39 |
th1a | So that will be the big summit. | 16:39 |
th1a | In the meantime, we want to clear out some of the basic technical issues, particularly around packaging, version control, etc. | 16:39 |
th1a | So we're going to send some questions -- tomorrow -- and then have a conference call. | 16:40 |
th1a | Call to be scheduled. | 16:40 |
yvl | ok | 16:40 |
yvl | I emailed a batch of questions last week | 16:40 |
yvl | to the dev list | 16:41 |
th1a | The thing right now is that my conversations with their marketing guys are somewhat tortured. | 16:42 |
th1a | Which is typical I think -- we just usually don't have to talk to marketing people. | 16:42 |
th1a | I'm spoiled. | 16:42 |
yvl | :) | 16:42 |
th1a | So I think getting the geeks together will go very well. | 16:43 |
yvl | but we definitely need some answers first | 16:43 |
th1a | In the meantime I just have to tell the marketing guys what they want to hear and do what they do. | 16:43 |
yvl | at least - versions, and how often they are upgrading | 16:43 |
th1a | yvl: They're several versions behind right now. | 16:43 |
yvl | we suspected that much... :| | 16:44 |
th1a | I think they're working on getting caught up. | 16:44 |
th1a | I know they mentioned the student index loading bug. | 16:44 |
th1a | I'd like to get their CVS mirrored on Launchpad. | 16:45 |
yvl | only ST part? | 16:46 |
th1a | I'll pass on your questions. | 16:46 |
yvl | thanks | 16:46 |
th1a | Well, yeah, the ST part. | 16:46 |
th1a | I also have to ask if we can get a build of the complete system. | 16:46 |
yvl | that would be nice | 16:47 |
yvl | though I'm primarily interested in their modifications (for some reason) | 16:47 |
th1a | Sure. | 16:48 |
yvl | and how they integrated ST with everything else, of course | 16:48 |
th1a | That's what I mean -- having access to using a complete system so we can see that. | 16:48 |
th1a | I don't really care about the code for the other parts. | 16:48 |
yvl | well, we'll see how it goes | 16:50 |
yvl | it will be really interesting to see how ST acts as part of a solution | 16:50 |
th1a | Yes. | 16:50 |
th1a | OK, so, what's your plan for this week, yvl? | 16:51 |
yvl | thinking... | 16:51 |
yvl | ah! | 16:51 |
yvl | there's a lot of little things, and of course it would be nice to spend some time on timetables finally | 16:52 |
th1a | Let's finish timetables. | 16:53 |
th1a | Really. | 16:53 |
yvl | ok | 16:54 |
yvl | by the way | 16:54 |
yvl | I was talking with Albertas another day | 16:54 |
yvl | he suggested I compose the big huge general TODO list | 16:55 |
yvl | there are some umbrella tasks, that are keeping me awake at nights | 16:55 |
th1a | Yes, but perhaps not RIGHT NOW. | 16:55 |
yvl | sure | 16:56 |
th1a | Let's wrap up timetables then we can take a deep breath at the beginning of the year. | 16:56 |
yvl | ok | 16:56 |
yvl | there's a lot of communication stuck at my end | 16:57 |
yvl | and it's out of scope of IRC meeting | 16:57 |
th1a | And also, next year we should be able to have more than one of you guys working together during the course of the year instead of on completely separate threads the whole time. | 16:57 |
yvl | just so you know | 16:57 |
th1a | yvl: I understand. | 16:57 |
yvl | ok then | 16:58 |
yvl | to finish the report - | 16:58 |
th1a | We'll manage things differently next year to avoid these big pileups. | 16:58 |
yvl | Albertas mentioned that | 16:59 |
yvl | I'm sure we can work out how to make more things happen :) | 16:59 |
yvl | just so you know - I got really attached to ST :) | 17:00 |
yvl | my baby, and so on ;) | 17:00 |
replaceafill | :) | 17:00 |
th1a | Well, that's much better than getting sick of it altogether. | 17:00 |
yvl | yes :) | 17:01 |
yvl | so, last week I helped Alan and Douglas a bit | 17:01 |
aelkner | yes, thanks yvl | 17:01 |
yvl | I also read a *lot* of documentation on other python web frameworks - that's not billable work, I assume | 17:01 |
yvl | Pyramid is a very interesting thing to track | 17:02 |
replaceafill | go Pyramid :) | 17:02 |
yvl | It may become "the new sexy" | 17:02 |
yvl | and we wouldn't need to abandon Zope to support that new sexy | 17:02 |
th1a | repoze? | 17:02 |
yvl | yes | 17:02 |
yvl | but under Pylons project | 17:02 |
yvl | Pylons 2.0 got scrapped, to put bluntly | 17:03 |
yvl | instead, they got the code from repoze.bfg | 17:03 |
yvl | and joined efforts | 17:03 |
th1a | I'll check it out. | 17:03 |
yvl | and under the hood, Pyramid uses ZCA | 17:03 |
yvl | Alan and I also had a little chat about creating schooltool.ui package | 17:04 |
yvl | that's a possible topic for sprint | 17:04 |
yvl | currently writing forms is very cumbersome in ST | 17:04 |
th1a | Making forms easier would help. | 17:05 |
yvl | yes | 17:05 |
th1a | In the meantime... finishing timetables? | 17:05 |
th1a | This year? | 17:05 |
yvl | yes! | 17:05 |
th1a | OK, do that. | 17:06 |
th1a | We should move on... | 17:06 |
th1a | Thanks yvl! | 17:06 |
th1a | menesis: Where are we now with packaging. | 17:06 |
th1a | ? | 17:06 |
th1a | We got a response to your questions last week, correct? | 17:06 |
menesis | th1a: I am uploading packages to schooltool PPA | 17:06 |
menesis | Daniel agreed that REVU is too much hassle so I upload to the PPA | 17:07 |
menesis | I have uploaded a few packages last week, and a few today | 17:07 |
menesis | so there is something for sponsors to upload | 17:08 |
menesis | I should reply telling that, I guess | 17:08 |
th1a | Yes -- communicate! | 17:08 |
th1a | That's the key to this process. | 17:08 |
menesis | pointing to https://wiki.ubuntu.com/Zope/Natty and add more information there | 17:09 |
menesis | I have added a nightly builder of versionator, the tool I use for tracking package versions and todos | 17:10 |
menesis | to publish a status on the web at http://ftp.schooltool.org/schooltool/trunk/overview.txt | 17:10 |
th1a | Looks good -- make sure the right people know it is there! | 17:11 |
menesis | yes, that was the point of publishing that | 17:12 |
th1a | OK. Send that email ASAP. | 17:12 |
menesis | today | 17:12 |
th1a | cc: me. | 17:12 |
th1a | Great. | 17:12 |
menesis | as always | 17:12 |
menesis | ok | 17:13 |
menesis | another thing I finally made last week was finish and release schooltool 1.4.3 | 17:13 |
menesis | the backport for Lucid | 17:14 |
menesis | also made schooltool 1.5.3 with one fix and translation updates | 17:14 |
menesis | but haven't updated release notes or sent an announcement | 17:15 |
th1a | We need to do a better job with that. | 17:15 |
th1a | Someday we're going to surprise a lot of deployed instances with an unannounced buggy release. | 17:15 |
menesis | there is a problem with that release | 17:16 |
th1a | Better to warn people before we give them the buggy release. | 17:16 |
th1a | What is the problem? | 17:16 |
menesis | that I only noticed after release | 17:16 |
menesis | so I should have sent announcement asap and reply that there is a known problem? | 17:17 |
menesis | guess so | 17:17 |
menesis | two CanDo tests break | 17:17 |
menesis | one test I fixed, it was only a test | 17:17 |
menesis | but another exposes a security problem that I was not able to understand | 17:18 |
menesis | students cannot access their SCR | 17:18 |
menesis | Student Competency Record | 17:18 |
menesis | for a strange reason, section instructor.first_name throws Unauthorized exception | 17:19 |
th1a | These are only CanDo bugs? | 17:20 |
menesis | I have merged some security fixes between 1.4.2 and 1.4.3, but nothing obvious that could cause that | 17:20 |
menesis | would like someone to look into this | 17:20 |
menesis | yes, this is only CanDo | 17:20 |
menesis | I have tested SchoolTool before release and all looked good | 17:21 |
replaceafill | can i help? | 17:21 |
menesis | maybe, if you understand security declarations | 17:22 |
th1a | replaceafill: Yes, perhaps you could take a look at this. | 17:22 |
menesis | maybe it is only in cando, because students can see sections and instructors elsewhere | 17:22 |
replaceafill | menesis, if i check out cando's trunk and run the tests i'll see the failure? | 17:23 |
menesis | replaceafill: yes | 17:23 |
replaceafill | ok | 17:23 |
menesis | or http://source.schooltool.org/buildbot/builders/pov-cando-buildout/builds/143/steps/functional%20tests/logs/stdio | 17:23 |
replaceafill | and the goal is not to remove any proxy the person could have, but to understand what's going on | 17:24 |
menesis | of course. but I couldn't. | 17:25 |
replaceafill | got it | 17:25 |
replaceafill | i mean, understood :) | 17:25 |
menesis | th1a: I think that's all I have to report | 17:25 |
menesis | I have to send two emails today | 17:26 |
menesis | and will continue uploading packages | 17:26 |
th1a | OK, thanks menesis. | 17:26 |
th1a | It would be very helpful if you'd just be chattier during the week about these things. | 17:27 |
th1a | A few more emails to the developer list would go a long way. | 17:27 |
th1a | replaceafill? | 17:27 |
replaceafill | ok | 17:28 |
replaceafill | 1. no news about cambodia yet | 17:28 |
replaceafill | 2. i tested the fedora 9 packages, and they work | 17:28 |
replaceafill | 3. i worked in the worksheet preferences part and got confused about evolution | 17:29 |
replaceafill | since i'm moving annotations to the section and the current preferences data has no info about this | 17:29 |
replaceafill | the current data only says: th1a wants total columns hidden | 17:30 |
replaceafill | but it doesnt say in what section | 17:30 |
replaceafill | i asked about this to yvl earlier | 17:30 |
replaceafill | and he recommended that we look at the first instructor preferences (if possible) and store those in the evolution for sections | 17:31 |
yvl | (to mimic SectionFinder.processColumnPreferences) | 17:33 |
replaceafill | yes, the current implementation takes the first instructor | 17:34 |
replaceafill | i also liked yvl's suggestion about using an approach similar to the calendar/timetable | 17:34 |
replaceafill | with IHaveWorksheetPreferences interface for instance | 17:35 |
th1a | aelkner: Any thoughts about this? | 17:35 |
replaceafill | and adapters for the hierarchy, for looking up where to inherit from | 17:35 |
replaceafill | worksheet inherits from section by default | 17:35 |
replaceafill | section "could" inherit from app, etc | 17:36 |
replaceafill | will finish writing the tests and will push my branch | 17:36 |
aelkner | why do we need to make such a huge change to the gradebook code just for a simple preferences change? | 17:36 |
replaceafill | aelkner, is not huge (i think) | 17:37 |
replaceafill | it's only more complex :/ | 17:37 |
aelkner | so we're keeping person preferences and adding section preferences? | 17:37 |
yvl | replaceafill, can you give the link to the bug? | 17:37 |
replaceafill | yvl, https://bugs.launchpad.net/schooltool.gradebook/+bug/671863 | 17:37 |
replaceafill | aelkner, we're moving the data to the section | 17:38 |
replaceafill | as yvl said the relationship between section preferences and instructors is trickier, because you can have many instructors in a section | 17:39 |
replaceafill | right now, my implementation cannot allow two instructors with different preferences in the same section for instance | 17:39 |
replaceafill | but th1a said we keep it simple in that part anyway | 17:40 |
replaceafill | keeping the preferences data in the section would also allow admins to change it | 17:40 |
yvl | aelkner, replaceafill is implementing the chain you mentioned here: https://bugs.launchpad.net/schooltool.gradebook/+bug/671863/comments/2 | 17:40 |
aelkner | th1a, i'm not going to be able to get my head into this feature and still get my resource demos work done | 17:40 |
aelkner | yvl, ok, that would be nice | 17:41 |
th1a | That's fine -- just wanted to know if you had any specific ideas or concerns. | 17:41 |
th1a | Trying to keep everyone awake. | 17:41 |
aelkner | hehe | 17:41 |
aelkner | i'm trusting my colleges on this one :) | 17:42 |
replaceafill | well th1a that's where i'm at right now | 17:42 |
replaceafill | thanks aelkner :P | 17:42 |
th1a | OK. Cool, and have a look at those CanDo bugs. It would be good to fix those before anyone notices. | 17:42 |
replaceafill | th1a, understood | 17:42 |
replaceafill | will give that priority one | 17:42 |
th1a | Thanks replaceafill! | 17:43 |
th1a | aelkner? | 17:43 |
aelkner | i took a day off last week for thanksgiving, but i made progress with the resource demos | 17:44 |
aelkner | i brought my person forms from schooltool.niepa (which have schooltool.camboda as their model) | 17:44 |
aelkner | into the resource package which meant changing the resource views to z3c formlib | 17:45 |
yvl | (a small nitpick - it's z3c form, not formlib) | 17:45 |
aelkner | fair enough | 17:45 |
aelkner | anyway, i got the forms to work, but the tests failed on the subtype widget | 17:46 |
aelkner | so yvl helped me with that late last night and made some changes today that i merged | 17:46 |
aelkner | yvl: the tests still fail, but that's probably because the new widget has a different field id, right? | 17:47 |
yvl | probably | 17:47 |
yvl | sorry, I didn't check the test | 17:47 |
yvl | s | 17:47 |
yvl | just made it work :) | 17:47 |
aelkner | what is the point of the subtype widget anyway? | 17:48 |
aelkner | i mean, there's an edit field AND a dropdown | 17:48 |
yvl | you can add a new subtype in the edit field | 17:48 |
yvl | OR select an existing subtype from the drop-down | 17:48 |
aelkner | add to where? | 17:49 |
yvl | to the dropdown :) | 17:49 |
aelkner | that's weird | 17:49 |
yvl | as in | 17:49 |
yvl | known Equipment types | 17:49 |
yvl | you add a HPLazerSomething with type printer | 17:49 |
replaceafill | yvl, do you suggest to take that approach in other places, for instance cambodia's villages | 17:49 |
yvl | and next time you can pick type 'printer' from the dropdown | 17:50 |
replaceafill | right now in cambodia you add/edit villages in one place and you see the result in the form | 17:50 |
aelkner | yeah, what's up with changing choice sources in the view itself? | 17:50 |
aelkner | usually, you would go to another view to maintain things like that | 17:50 |
aelkner | for instance, scoresystems are a choice when adding an activity | 17:51 |
yvl | it's an old feature relly | 17:51 |
yvl | really | 17:51 |
yvl | but I like it | 17:51 |
yvl | makes input easy | 17:51 |
aelkner | but you don't add a scoresystem in the activity add view | 17:51 |
yvl | ideally these days | 17:51 |
aelkner | you add new scoresystems in the scoresystems view | 17:51 |
replaceafill | my concern would be what if the add/edit permission is different from the form using the dropdown | 17:51 |
yvl | look | 17:51 |
yvl | these are just cached values | 17:51 |
yvl | every time, it goes through the list of available equipment | 17:52 |
yvl | or location | 17:52 |
yvl | and checks what types have been entered manually | 17:52 |
yvl | and gives you a dropdown | 17:52 |
yvl | that's it | 17:52 |
yvl | and in another place, you can filter by types, of course | 17:52 |
yvl | permissions can't be different there | 17:53 |
yvl | because if you can edit the type, you can edit the type | 17:53 |
yvl | it's a free-text field | 17:53 |
yvl | the dropdown only collects 'already used' types | 17:53 |
yvl | (and it assumes that if you can edit a resource, you have permissions to know what types of equipment are there) | 17:54 |
aelkner | ah, so the user chooses the types | 17:54 |
aelkner | there is no vocabulary somewhere | 17:54 |
yvl | exactly | 17:54 |
aelkner | ok, i'm not changing that anyway | 17:55 |
aelkner | i just wanted to understand it better, and now i do | 17:55 |
yvl | ideally, the dropdown would consist of existing types | 17:55 |
yvl | and an option Other: | 17:55 |
yvl | selecting that option would javascriptily make the input box visible | 17:55 |
yvl | [printer] | 17:55 |
yvl | [computer] | 17:55 |
yvl | [other:] | 17:55 |
aelkner | ok, anyway, i need to get the tests to pass now | 17:56 |
aelkner | yvl: will you be reachable late tonight at the usual time if i need your help? | 17:56 |
yvl | yes | 17:57 |
aelkner | cool, thanks | 17:57 |
aelkner | th1a, anyway, i will work on the census pdf this week after that | 17:57 |
th1a | We need to get David onto a source (eggs) install this week so we can push last minute changes, right? | 17:57 |
aelkner | this time next week we should have something to package for david | 17:57 |
th1a | David's big meeting in Nigeria is Dec. 9. | 17:57 |
aelkner | you mean sandbox, right? | 17:58 |
th1a | Should we just do it with him then? | 17:58 |
th1a | Plan a meeting? | 17:58 |
aelkner | for later this week? | 17:59 |
th1a | Well, after you're ready for him to check it out. | 18:00 |
th1a | We wouldn't need the report at that point. | 18:00 |
aelkner | are we agreeing on using the sandbox? | 18:00 |
th1a | Considering I foresee last minute requests, yes. | 18:00 |
aelkner | cool, and it can use my branch of schooltool so that we don't need merges to happen quickly | 18:01 |
th1a | OK, let's just try to set up a longish meeting time late this week or early next. | 18:01 |
aelkner | let's try for late this week, thurs or fri? | 18:02 |
th1a | OK. | 18:02 |
aelkner | could you please schedle that with david, and i'll make sure to be available? | 18:02 |
th1a | That's what I'm saying. | 18:02 |
aelkner | well, ok then :) | 18:03 |
th1a | OK. I think we're done here. | 18:03 |
th1a | Have a great week gentlemen! | 18:03 |
* th1a drops the bag of gravel. | 18:03 | |
yvl | good week to you all! | 18:03 |
aelkner | great week everyone | 18:03 |
replaceafill | thanks everybody | 18:03 |
replaceafill | menesis, i don't know if you knew this but the error arose in the schooltool/1.4 rev 2710 commit | 20:03 |
replaceafill | and it seems related to the <PersonInfoViewersCrowd> removal | 20:04 |
replaceafill | i had a related problem in cambodia | 20:04 |
replaceafill | but i'll keep looking | 20:04 |
th1a | replaceafill: Why was that removed? | 20:04 |
replaceafill | th1a, not sure, it seemed like a big refactoring by yvl | 20:09 |
replaceafill | i tracked it down to here: http://bazaar.launchpad.net/~schooltool-owners/schooltool/trunk/revision/2724#src/schooltool/basicperson/security.py | 20:09 |
replaceafill | then i asked yvl about that crowd and he told me we shouldn't use it anymore | 20:10 |
menesis | replaceafill: yes the removal of that crowd most likely causes this problem | 20:10 |
th1a | Oh, so CanDo has to catch up to that change. | 20:10 |
replaceafill | menesis, any idea how to fix it? in cambodia i just had to delete a directive in overrides | 20:11 |
menesis | the access setting is not needed but the crowd did something more | 20:12 |
th1a | CanDo is doing something more with it? | 20:25 |
replaceafill | th1a, checking... | 20:26 |
replaceafill | menesis, the context to a crowd is the object your checking the permissions on? | 20:31 |
replaceafill | in this case the instructor | 20:31 |
replaceafill | to me, it seems like cando was working becuase of this same bug :D https://bugs.launchpad.net/schooltool/+bug/561590 | 20:34 |
replaceafill | in this case, paul (a student) is trying to access jeff (a teacher) | 20:34 |
replaceafill | the crowd takes jeff (a teacher) as context | 20:35 |
replaceafill | and the last line is the killer: | 20:35 |
replaceafill | return (ConfigurableCrowd.contains(self, principal) or | 20:35 |
replaceafill | teachers in groups) | 20:35 |
replaceafill | paul IS NOT in the crow, but jeff is in the teachers group! | 20:35 |
* replaceafill goes to check the section index view | 20:37 | |
replaceafill | ah, the section view uses a tal path adapter to access the instructor title | 20:41 |
replaceafill | it doesnt access the first_name, last_name attributes directly | 20:41 |
menesis | cando has additional crowds, maybe they interfere | 20:44 |
menesis | and some very hairy code | 20:44 |
menesis | example, studentGradebook: | 20:45 |
replaceafill | i guess the PersonInfoViewersCrowd was the one that made possible for the student to access the teachers attributes | 20:45 |
menesis | interfaces.IGradebookInstructors(gb).instructors = interfaces.IGradebookInstructors(gradebook).instructors | 20:45 |
menesis | then how to know what instructors the view is trying to access... | 20:46 |
menesis | replaceafill: but student can see teacher's name in other views | 20:47 |
replaceafill | like the section index | 20:47 |
replaceafill | what others...? | 20:47 |
replaceafill | gradebooks! | 20:48 |
* replaceafill checks | 20:48 | |
replaceafill | menesis, all the accesses i find to the instructor full name are calls to person.title | 21:00 |
replaceafill | def getLastEvaluator(self,comp): | 21:00 |
replaceafill | evaluation = self.context.getEvaluation(comp) | 21:00 |
replaceafill | if not self.isGraded(evaluation): | 21:00 |
replaceafill | return '' | 21:00 |
replaceafill | return evaluation.evaluator.title | 21:00 |
replaceafill | i mean, from the student point of view | 21:00 |
menesis | replaceafill: I noticed that... but title is not even in IBasicPerson interface | 21:06 |
menesis | maybe there needs to be a crowd that allows students to see their instructors | 21:07 |
menesis | because as I see it is only the other way around | 21:07 |
menesis | replaceafill: I tried with title and it is Unauthorized as well | 21:07 |
replaceafill | menesis, the cando.gradebook.browser.StudentGradebookView has this access: | 21:14 |
replaceafill | self.instructors = ", ".join(["%s %s" % (instructor.first_name, | 21:14 |
replaceafill | instructor.last_name,) | 21:14 |
replaceafill | for instructor in section.instructors]) | 21:14 |
replaceafill | however, the crowds check don't include <PersonInfoViewersCrowd> | 21:15 |
replaceafill | the student is allowed by the LearnerCrowd | 21:15 |
replaceafill | (Pdb) crowd | 21:15 |
replaceafill | <LearnersCrowd> | 21:15 |
replaceafill | (Pdb) crowd.contains(principal) | 21:15 |
replaceafill | True | 21:15 |
menesis | maybe the StudentSCRView accesses some different instructors. it's hard for me to see through context.__parent__.__parent__ and similar if somewhere is a problem | 21:24 |
menesis | but sorry it is late here, I'm getting too tired to debug further | 21:25 |
replaceafill | np menesis | 21:25 |
replaceafill | will try to catch you tomorrow and report back | 21:25 |
*** replaceafill has quit IRC | 21:44 |
Generated by irclog2html.py 2.15.1 by Marius Gedminas - find it at mg.pov.lt!