Django

Code

Ticket #122: modeldiscuss.txt

File modeldiscuss.txt, 31.9 kB (added by hugo <gb@bofh.ms>, 3 years ago)

IRC discussion about the model syntax

Line 
1         *       Now talking on #django
2         *       Topic for #django is: http://www.djangoproject.com/ || Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.|| Logs: http://loglibrary.com/show_page/latest/179
3         *       Topic for #django set by JZ_ at Sat Jul 16 12:30:01 2005
4         hugo-   hi
5         mmarshall       hi hugo-
6         *       adrian_h is back.
7         adrian_h        back
8         mmarshall       Ok everyone, we can start talking again ;)
9         rmunn   adrian_h: You said you're split on #122. What are your main objections?
10         *       ljoramo has quit ()
11         *       adrian_h gathers thoughts
12         rmunn   Take your time. :-)
13         adrian_h        I don't like the fact that ForeignKeys are name-less attributes of the class (yes, I was the one who suggested that behavior in the first place)
14         rmunn   That would be a little surprising for newbies, yeah.
15         adrian_h        Before we open-sourced Django, the field name was required. Foreign keys used to look like this:
16         adrian_h        meta.IntegerField('field_name', 'verbose name', rel=meta.ManyToOne(Poll))
17         adrian_h        So I shortened that to "ForeignKey(Poll)" in preparation for open-sourcing
18         *       Netminder likes the current state of fields FWIW.
19         adrian_h        But the one thing that was lost in that was that now you have to "guess" what the field names are, for use in meta.admin.fields
20         adrian_h        I talked about this with MikeLambert last night
21         rmunn   I personally would have little objection to making ForeignKeys require a name again...
22         hugo-   me too
23         rmunn   It's orthogonal to the question of the SQLObject-like syntax, IMHO.
24         rmunn   Actually, requiring ForeignKeys (and ManyToManyFields) to have a name would get rid of one of the more "magic" parts of the #122 patch.
25         adrian_h        As I see it, the issues are related, because one solution can solve both problems
26         adrian_h        Yeah, exactly
27         rmunn   They're related, but independent: it would be quite feasible to implement one, or the other, or both, or neither.
28         rmunn   One of those four is probably optimum, we just need to figure out which.
29         rmunn   Another possibility: in mmarshall's email to the dev list, he mentioned writing a wrapper class for the new behavior.
30         rmunn   I would suggest making the new behavior the default, but keeping a wrapper class ("meta.OldModel" perhaps) around to give the old "fields tuple" behavior.
31         adrian_h        Yeah, that's possible...But there should be One Real Way of doing it
32         adrian_h        Yes, we've discussed meta.OldModel (with exactly that name)
33         rmunn   The documentation would mention the "fieldname = CharField()" syntax only, and the BackwardsIncompatibilities page would say "As a transition measure, use meta.OldModel until you've converted all your models".
34         mmarshall       rmunn: That was what I tried to do at first, but there were some problems.
35         rmunn   mmarshall: What problems did you run into?
36         adrian_h        IIRC, the problem lies in the fact that django/models/__init__.py can't be duplicated
37         adrian_h        i.e., we can't have multiple copies of it
38         mmarshall       For one thing, the changes were not local meta.Model; they also required switching the first two arguments to the Field classes.
39         rmunn   Ah yes, so that verbose_name could become the first positional arg.
40         mmarshall       So I tried duplicating meta itself, resulting in a new can of worms.
41         mmarshall       rmunn: Yes.
42         mmarshall       At first, I had a hack to get around this, but it was messy, and prone to confuse people.
43         rmunn   So if this is going to happen, it sounds like the simplest way is to just bite the bullet and say, "OK folks, revision ### is going to break all your models. Here's how to convert to the new syntax."
44         adrian_h        Yeah...And, realistically, having to change models to use the "fieldname = class" syntax is only slightly more work than changing models to use "meta.OldModel"
45         rmunn   How would you feel about the "fieldname = class" syntax if the decision was made that ForeignKeys must always be given a name?
46         mmarshall       Yeah, it's really not that big of a deal.  Although, after converting all of the models in the tests and the django internals, as well as my own, I got a little sick of it.
47         *       threeve has quit ()
48         rmunn   Any other major objections?
49         rmunn   That was to adrian_h, of course, not mmarshall. :-)
50         rmunn   mmarshall: But it's a one-time price.
51         adrian_h        My only other major objection is having to ask everybody to change model syntax
52         adrian_h        Which isn't a huge problem, being that we haven't guaranteed backwards-compatibility
53         rmunn   Well, there's no getting around that one.
54         rmunn   It'll mostly depend on whether people want the new syntax or not.
55         adrian_h        And yesterday's session update was backwards-incompatible, and people didn't complain too loudly...
56         Netminder       adrian_h: very few people had gotten to sessions yet
57         rmunn   If there are loud boos and very few cheers, you could always revert the patch...
58         mmarshall       Yeah, but that wasn't as big of deal to change.
59         rmunn   I, for one, would be cheering loudly. :-)
60         Netminder       changing the model syntax is pretty big.
61         adrian_h        Netminder: Yes, but the session change broke admin installations, because the admin now depends on sessions
62         rmunn   Yeah, it is, which is why I'm trying to start discussion on the dev list.
63         adrian_h        People haven't really spoken up about the model syntax, other than rmunn and mmarshall
64         mmarshall       I have had a number of people mention it to me.
65         rmunn   manuzhai was saying earlier in here that he planned to write a post to the dev list.
66         *       Tybstar (n=tgerla@cpe-069-134-162-085.nc.res.rr.com) has joined #django
67         Netminder       adrian_h: I'd probably be mildly against it, as I don't feel a "big gain" in the new syntax vs. the current and it'd be a good bit of work and relearnin'
68         adrian_h        How does manuzhai feel about it?
69         rmunn   loglibrary's not working, so I'll just copy and paste:
70         rmunn   manuzhai: "will send a me too to the #122 thread once I get an email from it"
71         adrian_h        Netminder: all right
72         *       Tybstar returns
73         adrian_h        Tybstar: How do you feel about the proposed model syntax change to use "fieldname = FieldClass"?
74         mmarshall       When I came in earlier, he mentioned that #122 was 'shot down', and frowned.
75         rmunn   manuzhai: "I for one like 'your' syntax better" (to mmarshall)
76         Netminder       adrian_h: I heard some rumbles on the ticket about issues with the db layer.  Is that a show stopper or just something to get around?
77         *       liquidx (n=liquidx@87.240.134.143) has joined #django
78         hugo-   I don't think that it really is much change in the syntax. Actually that's the reason why I am a bit split on #122, too - I don't see much gain for the work
79         Tybstar adrian_h: i haven't really followed the discussion, unfortunately. i liked it on first glance, but i've really gotten attached to the current syntax.
80         Netminder       yes, that's my thought too hugo-
81         hugo-   ok, sure, the new syntax would be nicer, but is it really that big a problem to use a list of fields instead of a list of attribute assignments?
82         Tybstar it's not a huge difference either way...
83         rmunn   It's not a huge gain once you've gotten used to the fields = (...) syntax. I see it more as a big gain for newbies.
84         hugo-   is  it really?
85         Netminder       It's just... different.
86         adrian_h        Netminder: There shouldn't be any issues with the DB layer with regard to the possible syntax change -- the syntax is abstracted
87         Netminder       adrian_h: roger that.
88         hugo-   if I think about what questions arise here in the channel, I don't think that _that_ part of Django really produces that much questions
89         rmunn   Ah good, some real discussion at last. :-)
90         adrian_h        Great point, hugo-
91         hugo-   there are other things like the settings file an dstuff like that :-)
92         Tybstar the model fields syntax isn't bad. the admin = syntax can be pretty hairy.
93         Tybstar i've seen lots of people have trouble wtih the (foo) != (foo,) thing in the admin = code
94         rmunn   I've seen that too.
95         hugo-   Tybstar: yeah, that's one thing I allways want to hit Guido over the head because of ;-)
96         Netminder       the (foo,) syntax becomes second nature after a messup or two
97         rmunn   I'd suggest a general rule-of-thumb: if something is supposed to be a list or tuple, and you get a string, automatically convert it.
98         adrian_h        The one real problem I have with the model syntax is that it's not immediately apparent what the field name is for a ForeignKey and ManyToManyField, so people don't know what to use in admin.fields
99         Tybstar adrian_h: indeed
100         Tybstar takes some guesswork
101         hugo-   Tybstar: especially since python will happily iterate over chars in a string if it expects a list :-)
102         Tybstar yes
103         adrian_h        We can fix that with the model validator, with a message that says "That's an invalid field name. Here are the valid field names for this model", but that's still one step too much
104         Tybstar the pitfalls of a dynamically typed langage. :)
105         hugo-   adrian_h: I would applaud a move that ForeignKey and friends need a obligatory first parameter that is the field name like other field types
106         rmunn   That's what ticket #244 was about.
107         hugo-   adrian_h: especially since that would make writing models for existing databases much more obvious
108         hugo-   adrian_h: especially since the "name=" option for ForeignKey isn't (or at least wasn't) documented in the model reference :-)
109         rmunn   Wow, discussion moved on while I was searching for that ticket.
110         rmunn   I meant that http://code.djangoproject.com/ticket/244 was about being nicer to newbies.
111         hugo-   rmunn: you need to configure --with-threads ;-)
112         rmunn   Heh. I wish IRC had that sometimes... :-)
113         adrian_h        :)
114         adrian_h        hugo-: Would you applaud the move if it were in "fieldname = FieldClass" syntax?
115         Netminder       irc --with-productivity would be nice
116         mmarshall       Netminder: LOL
117         rmunn   Netminder: :-D
118         rmunn   Okay, let me see who seems to like or dislike the "fieldname = FieldClass" syntax.
119         rmunn   I like it.
120         rmunn   mmarhsall likes it.
121         rmunn   adrian_h is split but leaning against (?)
122         rmunn   Netminder isn't too enthusiastic.
123         hugo-   adrian_h: I wouldn't mind if it was, as I don't have much models to change - but I still wouldn't see the reason to switch that part of the syntax. But I wouldn't actively object.
124         rmunn   Tybstar liked it at first but is pretty indifferent.
125         rmunn   hugo- doesn't much care.
126         mmarshall       garthk likes it, manuzhai likes it
127         hugo-   rmunn: doesn't much care with added a bit of puzzlement, please ;-)
128         rmunn   Anyone object to how I've described them?
129         adrian_h        I'm positively *for* requiring a name for ForeignKey and ManyToManyField, to make that explicit -- which is a related issue
130         hugo-   adrian_h: that one I am quite positive about, too
131         rmunn   adrian_h: I'm +1 on requiring a name as well.
132         Netminder       rmunn: that's about right.  +1 on the requirement
133         mmarshall       +1 on requiring a name here
134         Tybstar +1
135         adrian_h        Wow, no opposition to the name requirement -- very cool
136         rfc1149 count me in :) +1 on requiring a name
137         Tybstar sounds unaniniminninnious
138         mmarshall       I normally specify a name anyway :P
139         adrian_h        rfc1149: What do you think of the "fieldname=FieldClass" syntax?
140         adrian_h        As an aside, can anybody on Windows confirm this bug? http://code.djangoproject.com/ticket/349
141         rfc1149 i quite like the fieldname=FieldClass idea, but am a bit concerned that it will bite later.  using fields= leaves a lot of namespace for later use.
142         adrian_h        rfc1149: The idea is that other (non-field) data would go in an inner class called "Meta"
143         rfc1149 btw, i also would like to interpret "foo" as ("foo",) in settings where it makes sense
144         rfc1149 oh, that would be very nice!
145         rfc1149 (the inner Meta class, that is)
146         rmunn   What I see is support for fieldname=FieldClass ranging from mild to enthusiastic, but I don't see any opposition stronger than mild.
147         rmunn   Is there anyone who would positively scream if that was implemented?
148         rmunn   Remember, it would be a backwards-incompatible change to the model syntax, so it would involve work (albeit a one-time effort) on your part to change your models.
149         rfc1149 i do not yet have significant amounts of existing code, but i would not like it if an unthinking svn update would break all my code
150         *       Netminder remains mildly against it.
151         rfc1149 but i guess that is unavoidable :)
152         adrian_h        Here's an example of the new syntax, so people have something to look at: http://django.pastebin.com/339441
153         Netminder       I'd kinda grumble a bit while rewriting my todo app :)
154         rfc1149 and it's still not yet released :)
155         *       Boffbowsh (i=Boffbows@host-85-236-105-19.multiplaydsl.co.uk) has joined #django
156         rfc1149 the field=FieldClass syntax really looks clean and natural
157         rmunn   Boffbowsh: Have you looked at http://code.djangoproject.com/ticket/122 at all?
158         rfc1149 and friendly to newbies.. i'm liking it more and more.
159         hugo-   I'd prefer it if the inner class wasn't tacked on by magic but instead just be added via a __meta__ = something attribute
160         Netminder       yeah, it's kinda nice.  My only objection would be the one time fee that we'd have to pay, but I think it would be worth it in the long run.
161         Boffbowsh       yeah, i've taken a look, if thats'the fieldname = fielddef thing
162         Boffbowsh       i agree it would be nice
163         rmunn   I'm trying to get a feel for whether people would really like that syntax, really hate it, or be indifferent.
164         Netminder       yeah, I'm not keen on the magic
165         hugo-   field names with __ in front and back could be defined as "internal use" - that would match with python thinking
166         Boffbowsh       but not at the expense of ease of maintenance of django, imo
167         Netminder       +1 on hugo's line of thought
168         Boffbowsh       yar
169         rfc1149 Boffbowsh:  that's a good point
170         rmunn   hugo-: Interesting idea.
171         rfc1149 but i have not really heard adrian_h complain about it
172         adrian_h        If we use fieldname=fielddef, the maintenance will be about the same as it is now
173         rmunn   Perhaps __meta__ = dict(admin=Admin(), foo=Bar(), ...)
174         rfc1149 see :)
175         Boffbowsh       i don't mind having a slightly odd syntax (which isn't really that odd at all, there's just a slightly nicer way) if it means that the rest of the project is stable and easy to add new stuff to
176         adrian_h        But the last patch to #122 (which allows model attributes without names) would be a headache to maintain
177         Boffbowsh       not read it through thoruoghly as i was at work when it first cropped up
178         rfc1149 i personally prefer Meta: ... above __meta__ = dict( ... )
179         adrian_h        Using a class for Meta would be better, because you wouldn't have to use commas between attributes
180         Netminder       hmm yeah
181         adrian_h        Models themselves used to be dictionaries, a long time ago
182         Boffbowsh       are there any benefits other than it looking nicer?
183         hugo-   adrian_h: yeah, but the problem is with the way how you find out in your Poll class that there is an inner class Meta
184         mmarshall       adrian_h: how would it be hard to maintain?
185         rmunn   There seems to be pretty much unanimous consensus to require a name for ForeignKey and ManyToManyFields, so the headache-to-maintain patch can probably go away.
186         Netminder       if it looks prettier but is painful to maintain, that's no good
187         hugo-   there is no obvious connection between those two besides the scope - the internally needed assignments are done by magic
188         adrian_h        mmarshall: I was referring to the magic no-name-for-ForeignKeys thing, but we've agreed to scrap that.
189         *       rfc1149 goes to bed but looks forward to reading the rest of the discussion later
190         *       Dagur (n=dagur@dsl-196-5.hive.is) has joined #django
191         rmunn   rfc1149: Don't log out -- loglibrary is down.
192         hugo-   and more specificially: there is no prior art in Python libraries for such magic that connects stuff implicitely just because of the scope they are in
193         adrian_h        hugo-: You're talking about the internal "class Meta", right?
194         hugo-   adrian_h: yep
195         hugo-   I agree that it's cleaner syntax, though. <sigh> not an easy choice
196         hugo-   the hacker in me would go the inner-class-way, the maintainer might shy away from it :-)
197         Netminder       I'm still on the fence, but think maintainability is a key thing to think about
198         Netminder       the syntax is quite nice though :)
199         adrian_h        The maintenance for the inner class is simple -- internally (inside the metaclass call), it's just interpreted as another attribute on the object
200         rmunn   I'm looking at things more from a usability perspective than a maintainability perspective, so that colors my perception.
201         rmunn   Most of the tickets I file tend to be useability issues, if you've noticed.
202         adrian_h        It's even probably a bit cleaner than the current internals
203         adrian_h        rmunn: Yes, and they're much appreciated :)
204         Dagur   Could someone tell me what this error means:
205         Dagur   ContentTypeDoesNotExist: ContentType does not exist for {'package__label__exact': 'jenga', 'python_module_name__exact': 'jengacats'}
206         Dagur   I get it when I try to submit stuff in the admin panel
207         rmunn   Dagur: Have you changed your model recently?
208         Dagur   yeah
209         hugo-   adrian_h: the nice thing about the current stuff is: it's all python data. The new stuff is more python code objects. It's easy to programmatically generate python data if there is much repetitive stuff in it - but it's much harder (although not impossible thanks to pythons structure) to dynamically construct code objets
210         adrian_h        Dagur: run "django-admin.py sqlall jenga" and execute the "INSERT INTO content_types ... jenga" line in your database.
211         rmunn   Did you update the database after changing the model?
212         Dagur   it's a model I created for an existing database
213         Dagur   I didn't try that
214         Dagur   will do
215         rmunn   Dagur: Then you'll need to run sqlall, like adrian_h said.
216         rmunn   But you'll also need to add all the auth_* and core_* tables.
217         hugo-   adrian_h: and since I am in a line of business where there are often very large repetitive strikes of code and field definitions, I am much in favor of easy generating things programmatically
218         rmunn   So that the INSERT INTO statements have somewhere to put the data. :-)
219         adrian_h        Dagur: After doing "django-admin.py init", just do "django-admin.py sqlinitialdata jenga"
220         hugo-   adrian_h: so in that aspect the maintainer in me shys away from solutions that leave the data-path and go the code path, even though the hacker in me prefers to hack on the latter stuff
221         hugo-   usually the maintainer in me kicks the butt of the hacker in me ...
222         Dagur   ok i'm confused now
223         rmunn   hugo-: I *think*, though I'm not sure, that mmarshall's patch contructs a "fields" tuple internally.
224         rmunn   Dagur: Listen to adran_h, not me. He knows what he's talking about.
225         Dagur   hehe ok
226         *       rheinbot has quit (Remote closed the connection)
227         *       Tybstar needs a viewsvn for his project
228         adrian_h        Dagur: Run the command "django-admin.py init" if you haven't already done that. That creates Django's internal database tables.
229         Netminder       Tybstar: see the one that slashzero put django_ajax on, it's free to all
230         *       Tybstar ponders writing a django-based viewsvn
231         adrian_h        Dagur: After you've done that, run "django-admin.py sqlinitialdata jenga" and execute that SQL in your database.
232         adrian_h        Dagur: That's it.
233         hugo-   Tybstar: use trac
234         *       rheinbot (n=supybot@maxwell.servers.ljworld.com) has joined #django
235         rmunn   hugo-: Trac's internal Subversion viewer annoys me a little.
236         Tybstar hugo-: looks kinda heavyweight
237         rmunn   It doesn't let me see what the root of the repository is.
238         rmunn   I have to guess what to put after "svn checkout".
239         hugo-   Tybstar: it isn't - I use it for most of my repositories nowadays, it's easy to set up and run
240         hugo-   rmunn: hey, there is a wiki in it, just add a description of the checkout path to the wiki :-)
241         *       Notify: jacobkm is offline (kornbluth.freenode.net).
242         Dagur   woo! it worked
243         Dagur   thanks
244         adrian_h        Dagur: No problem! Thanks for using Django
245         Netminder       Dagur: drive through :)
246         Dagur   ^_^
247         *       Tybstar can't make viewsvn work
248         Dagur   I have another error for you guys :P
249         adrian_h        Dagur: Go ahead
250         Dagur   TypeError: got unexpected keyword argument 'id__iexactjengausers'
251         rmunn   hugo-: Not every project that uses Trac seems to do that, though. That's my main gripe. It's a pretty small one, as gripes go.
252         Dagur   the problem is that the id fields are called ID (capitalized)
253         adrian_h        Dagur: Where did that error happen?
254         Dagur   i was submitting in the admin panel
255         *       GvaderTH (i=grzegorz@mokotow.com) has left #django
256         adrian_h        Dagur: Can you paste the full traceback to django.pastebin.com?
257         Dagur   http://django.pastebin.com/339455 
258         adrian_h        Thanks...I'm looking now
259         Dagur   it's the id of a foreignkey table
260         Dagur   not the table I'm updating
261         *       wilsonian has quit ()
262         Dagur   oops
263         Dagur   id__iexactjengausers   <-- the jengausers part is something I added
264         Dagur   it's supposed to say id__iexact
265         adrian_h        OK, I was wondering about that :)
266         Dagur   sorry, I was trying to figure out the table name
267         adrian_h        No problem
268         mmarshall       hugo-: My patch simply itenerates over all of the attributes.  If the attribute holds an instance of Field, it assigns the name (or rel_name, for relationship fields) from the attribute name, and adds it to a 'fields' list.  This list is then used just the same as the fields tuple is currently.
269         adrian_h        mmarshall: Ideally it would just loop over all the attributes except the one (if given) named "Meta"
270         rmunn   Dagur: Is that "iexact" a typo that's supposed to be "exact", or did you really mean "iexact"?
271         mmarshall       adrian_h: Actually, that's what it does.
272         *       GvaderTH (n=gregtech@mokotow.com) has joined #django
273         adrian_h        mmarshall: Ah, cool
274         adrian_h        rmunn: That iexact is within Django...I'm fixing now.
275         hugo-   adrian_h: and so I can't name a field Meta? yuck.
276         mmarshall       Also, if it comes accross an attribute that is neither a Field nor a function, it raises a helpful error.
277         Dagur   rmunn: it's the django code that does that
278         Dagur   I was just submitting a form
279         mmarshall       hugo-: Originally I supported doing that, by optionally placing all fields in a subclass named 'Fields', but Adrian didn't like that.
280         adrian_h        Dagur: "svn update" your code, and let me know whether the problem is fixed.
281         Dagur   ok
282         hugo-   hmm. the more I think it through, the more I would tend to -1 on the new field syntax
283         mmarshall       hugo-: actually, you can still do that, just by giving the 'name' argument.
284         Dagur   worked!
285         adrian_h        Dagur: Thanks for pointing out that bug!
286         adrian_h        Dagur: Sorry, I should've credited you in the commit message
287         Dagur   np, my pleasure!
288         adrian_h        hugo-: One solution to that might be to require that "class Meta" is a subclass of "meta.Meta" or something like that
289         adrian_h        "class Meta(meta.Meta)" -- hehe
290         rmunn   Ew, that's a little overboard.
291         rmunn   What about "class __meta__: ..."
292         adrian_h        Is that possible?
293         hugo-   sure
294         rmunn   I don't see why not, it's just another name in the namespace.
295         adrian_h        Very cool -- I just tried it
296         rmunn   Let me check and make sure.
297         *       hugo- has a class named __proxy__ in one of his source files :-)
298         rmunn   Oh, nevermind then.
299         adrian_h        Now that's much better, namespace-wise
300         rmunn   Anyone who's using double-underscores at the start and end of their field names is being unpythonic, IMHO.
301         adrian_h        But it introduces more double underscores :-/
302         Tybstar i'd suggest against __meta__
303         rmunn   Yeah, that's the downside.
304         Tybstar it implies python builtin magic
305         hugo-   rmunn: ugh - python uses loads of __xxxx__ stuff - is it unpythonic? :-)
306         Tybstar _Meta would be better
307         Netminder       eew
308         rmunn   hugo-: Fields are public things, __xxxx__ is for private stuff.
309         Netminder       I'd take __meta__ before _Meta
310         hugo-   and there are special provisions in python with regard to __xxxxx fields - they are hidden in some aspects
311         adrian_h        hugo-: That's actually an advantage in this case
312         hugo-   rmunn: the meta stuff _is_ private to the model, not public :-)
313         adrian_h        What about "class DjangoMeta"?
314         hugo-   but the reason why I dislike the new stuff is that it doesn't allow me to do things like fields = tuple([IntegerField(name, default=0) for name in list_of_fieldnames]) or something similar as easily
315         adrian_h        That's much less likely to be used as a field name
316         Tybstar Netminder: i don't necessarily like _Meta better than __meta__, but i'm afraid of collidiing with python internals someday
317         rmunn   What I meant was that "class __meta__" won't interfere with anyone's DB field name, since you should be using double-underscores for DB fields (which are more "public" attributes).
318         adrian_h        hugo-: Interesting point, but, realistically, why would you want to do that, other than laziness? Models don't change often enough for there to be a need for them to be dynamic like that.
319         hugo-   sure, if I know about the inner workings I can hack around it - but I can't just take the public visible interface of the model and apply python code there
320         hugo-   adrian_h: laziness is my second name ;-)
321         adrian_h        hehe
322         hugo-   adrian_h: and for a more serious reason: I am working in legacy apps areas where you get _large_ structures of many very similar fields
323         hugo-   if you have to write models with 100 or more fields and most of them are booleans or moneytypes or some choice of a handfull of possibilities, you crave for automatted solutions
324         Tybstar my cat just caught a blue jay.
325         adrian_h        hugo-: "print ','.join(["IntegerField(%s, default=0)" % name for name in list_of_fieldnames])"
326         hugo-   adrian_h: nooo - I hate generated code, programmatic solutions should just manipulate data
327         hugo-   so to do the same with the new stuff I would write a loop that does a load of setattr(...)
328         hugo-   it's not impossible, it's just not as easy and simple as with data structures
329         adrian_h        hugo-: setattr wouldn't even work, because the metaclass runs when the class is *defined*
330         hugo-   ah, yes, forgotten that one
331         adrian_h        I must say, the new syntax is sexy
332         rmunn   I suppose you could construct a dict and feed it to meta.Model.__new__(cls, bases, attrs). Ew.
333         rmunn   I don't even know if that would work.
334         hugo-   rmunn: yep, with metaclasses that would be a - rather ugly, I must say - option
335         adrian_h        Or dynamically construct a class and dynamically set its parent class after it's been constructed?
336         hugo-   sure, you can allways call the metaclass manually and construct the class instance by using the metaclass. It's a bit hacky and doesn't sound like really maintainable code, though ;-)
337         rmunn   adrian_h: The metaclass magic happens before the class object is created, so I don't think that would work.
338         *       manuzhai (n=manuzhai@i249181.upc-i.chello.nl) has joined #django
339         rmunn   hugo-: You'd have to really deeply grok metaclasses to do that.
340         manuzhai        soooo, is this were the #122 discussion is taking place?
341         adrian_h        hugo-: What about a helper function for cases like yours? meta.create_model_from_dynamic_field_list(), except with a better name
342         rmunn   hugo-: In other words, don't try it unless you're Dutch. :-)
343         adrian_h        manuzhai: Yes, indeed
344         rmunn   manuzhai: Yes.
345         hugo-   rmunn: the main problem is that stuff like that would be code that only I would maintain because my coworkers _never_ will grok it ;-)
346         manuzhai        rmunn: hey, don't fuck with the Dutch!!!
347         rmunn   manuzhai: No no, it's a compliment.
348         manuzhai        ok
349         hugo-   rmunn: hey, I am living near the dutch border, so I am at least halfway competent ;-)
350         manuzhai        so what are we actually talking about? :P
351         rmunn   Only Guido van Rossum (and his brother) are smart enough to understand some of this stuff. :-)
352         adrian_h        hugo-: What do you think of the helper function idea above?
353         hugo-   adrian_h: if you find a better name ;-)
354         adrian_h        create_model_from_dynamic_field_list_for_hugo()
355         adrian_h        :)
356         hugo-   lol
357         rmunn   That's what, 30 characters long?
358         rmunn   40.
359         adrian_h        At least this isn't PHP, where there's actually a performance penalty for using long variable names
360         Boffbowsh       so glad to be moving over to python from php
361         Boffbowsh       had to do a bit of php today, felt so... spaghetti like
362         adrian_h        manuzhai: We're debating this syntax: http://django.pastebin.com/339441
363         Tybstar why the hell does viewcvs want TK??
364         *       rmunn boggles. TK?
365         adrian_h        The current question on the table is whether "class Meta" is a good name. It would conflict with a field named "Meta"
366         hugo-   hmm. maybe if the mechanisms are made more transparent - define a set of functions to construct a model and then define the transformations that are used for transforming the class definition using _those_ functions into a model
367         manuzhai        adrian_h: how is your current position?
368         adrian_h        manuzhai: I'm getting more and more interested in the new syntax
369         hugo-   that way the new syntax works nicely and somehugo with the need for programmatically creating models can use the documented "lower level"
370         adrian_h        hugo-: That's a good solution
371         adrian_h        A lower-level API for creating models
372         manuzhai        adrian_h: that's good
373         hugo-   actually that's the way Lispers often do this: build a set of base functions and define new syntax on top of it. They have macros, we have metaclasses for the syntax stuff
374         rmunn   mmarshall's patch would need some serious rewriting, then.
375         Tybstar this is the suck.
376         rmunn   Tybstar: Ouch. What distro?
377         Tybstar rmunn: it's a fedora machine
378         Tybstar i wish viewsvn worked
379         Netminder       there's your problem :)
380         Tybstar heh
381         hugo-   yikes. that's even worse than debians often-weird-dependencies :-)
382         *       Tybstar wishes slashzero were here
383         Tybstar i just can't quite get viewsvn working
384         BleSS   why i get this error? AttributeError: 'NoneType' object has no attribute 'status_code'
385         *       rmunn *heart*s Synaptic
386         adrian_h        BleSS: Your view has to return an HttpResponse object
387         *       Notify: jacobkm is online (kornbluth.freenode.net).
388         *       jacobkm (n=jacob@74.57.cm.sunflower.com) has joined #django
389         Boffbowsh       BleSS: your get_object or whatever returned no object
390         Boffbowsh       hence the Nojne
391         Boffbowsh       *None
392         adrian_h        That's a good case for a better error message.
393         Boffbowsh       ahh, ok
394         rmunn   adrian_h: Special-case check to see if None was returned from the view?
395         adrian_h        rmunn: Yes
396         mmarshall       rmunn: My patch is very simple; even stupidly simple now that the no-name-for-ForeignKeys thing is no longer needed.
397         hugo-   since None is the implicit value for functions that are missing the return alltogether, I think that special case check would be usefull
398         Boffbowsh       nn all
399         *       proteusguy (n=proteusg@dsl027-163-201.atl1.dsl.speakeasy.net) has joined #django
400         *       Boffbowsh has quit ()
401         *       Dagur (n=dagur@dsl-196-5.hive.is) has left #django
402         *       cmlenz has quit ()
403         BleSS   adrian_h, whatever view has th reuturn an HttpResponse object? (my view simply add data to data base)
404         manuzhai        BleSS: you should redirect then
405         adrian_h        BleSS: Yes, every view has to return an HttpResponse object, so your users actually get a page. If you want to redirect, use HttpResponseRedirect('/path/to/new/page')
406         hugo-   ok, so if the new syntax will be a combination of a documented model-creation API plus a compact class-based syntax on top of it, it get's a +1 from me
407         BleSS   thanks
408         adrian_h        hugo-: Yay
409         hugo-   that should satisfy both the hacker and the maintainer in me ;-)
410         *       jvoorhis (n=user@cpe-24-93-226-82.neo.res.rr.com) has joined #django
411         jvoorhis        adrian_h: hi
412         adrian_h        Hi jvoorhis
413         jvoorhis        good work on the tutorial
414         *       ljoramo (n=ljoramo@69-25-223-154.acsol.net) has joined #django
415         adrian_h        jvoorhis: Thanks -- is everything going smoothly for you?
416         jvoorhis        yes, except for python gotchas
417         adrian_h        ah
418         jvoorhis        a tuple is like a constant array, i guess
419         Netminder       the sooner we make the change the better IMHO
420         adrian_h        Netminder: Yes
421         adrian_h        jacobkm: Hello
422         manuzhai        adrian_h: could you or jacobkm look at my patch for #289?
423         jacobkm Howdy, adrian
424         jacobkm Looks like the logging bot has been broken for a few days :(
425         adrian_h        Yeah :-(
426         rmunn   Who set up the loglibrary logging in the first place?
427         jacobkm I did
428         rmunn   So you're the one who can fix it (if it can be fixed).
429         jacobkm Yup
430         jacobkm I'm trying to figure out what's wrong right now.
431         rmunn   I've got to go soon, but I'll save a copy of this IRC discussion in case anyone wants to look at what was said about #122.
432         Netminder       I think loglibrary is having issues
433         Netminder       I don't think there's anything we can do
434         jacobkm Hunh
435         rmunn   Actually, most of it has already scrolled off the top of my scrollback buffer.
436         jvoorhis        adrian_h: one thing i did not like was that the form on the details template has to be aware that it lives at polls/
437         jacobkm I was afraid of that.
438         rmunn   Did anyone else manage to save the discussion from earlier?
439         manuzhai        does anyone else think the CherryPy page on the wiki is pointless?
440         adrian_h        manuzhai: Yeah, I just saw that and am tempted to delete it
441         hugo-   rmunn: I can put the log from the discussion as a comment on #122 if you want
442         manuzhai        I am, too
443         adrian_h        rmunn: I've got the discussion
444         manuzhai        please do so
445         manuzhai        it seems like FUD
446         hugo-   my scrollback buffer is big enough
447         rmunn   Yes, please do.
448         jacobkm CherryPy page: gone
449         manuzhai        hugo-: an attachment to #122 might be better
450         mrproper        What is a closure & how does one use a closure in Python?  (I have an idea of closure from Javascript and event listeners)