*** holy_cow has quit IRC *** Amorphous has joined #gnuenterprise *** Amorphous has quit IRC *** Amorphous has joined #gnuenterprise *** Amorphous has quit IRC *** johannesV has joined #gnuenterprise *** Amorphous has joined #gnuenterprise *** btami has joined #gnuenterprise good morning good morning btami *** kilo has joined #gnuenterprise good morning good morning all *** sjc has joined #gnuenterprise hi kilo, hi soda hello im soo lazy today god bless today its friday *** dcmwai has quit IRC soda: what do the <-- and --> buttons do on your form? kilo: just next/prev record i was wandering , it is possible to not render the buttons in main window ah, ok. and where do you use runForm? sorry form my english kilo: right now nowhere, because i wanted this colours section me in separated form yes, it is possible, place this in form code: but i done it in this way form.setFeature('GUI:MENUBAR:SUPPRESS', 1) form.setFeature('GUI:TOOLBAR:SUPPRESS', 1) form.setFeature('GUI:STATUSBAR:SUPPRESS', 1) oki thanks ah, i see but now i will have to make runForm for each colour coz i have many datas connected to this possition in database johannesV: do you have time/are you willing to take a look at hotline/stammdaten.gfd? what's the matter with that ? latest svn. first page works ok. i try to store a country, and uopn pushing commit button: Traceback (most recent call last): File "/home/gabor/SVN/gnue/.cvsdevelbase/gnue/appserver/geasSessionManager.py", line 139, in commit s.commit () File "/home/gabor/SVN/gnue/.cvsdevelbase/gnue/appserver/geasSession.py", line 288, in commit self.__connection.commit () File "/home/gabor/SVN/gnue/.cvsdevelbase/gnue/appserver/data.py", line 670, in commit resultSet.current.setField (field, value) AttributeError: 'NoneType' object has no attribute 'setField' Product page also * johannesV phone back wow, this sounds crazy .. well, and indeed it is ... ?! hmm hmm, i think i've an idea where to search ... reinhard should (tm) this 'hmm' 8-)) you know 'wickie' (from tv) ? *lol* my idea was not good ... :( kilo, this is not special to hotline as i can reproduce it in sample.gfd (second tab too) it looks like you have found a serious bug ... but i can't tell more about atm ... still searching ... ah oh. it is in fact a little bit bad feeling, playing Lucifer every time, reporting bugs always... 8-)) re wickie: dunno who is that kilo, wickie is a little boy always knowing a solution to nearly all possible problems ... *lol* it's a cartoon we've watched when we've been boys ... and when he started with a new *great* idea he always said: hmm hmmm, i remember watching 'magilla gorilla', always ending with: 'will try again next week' kilo, i've tracked it down into appserver: the new record on the second page has definitely a wrong 'state' is it good news? can't tell right now ok, i think it's a problem in forms then good morning kilo: i've found it but it is still very tricky ... :) hi dimas hi dimas johannesV: great kilo, the problem is in forms: GFObjects/GFBlock.py in processCommit () hello johannesV, kilo here one block after the other posts it's changes *and* calling a datasourcelink.commit () but since the first block (namly blkPerson) is doing a commit *before* the post of the second block has sent it's changes to appserver appserver has to *destroy* the initialy created instance of address_country for example the next 'post' of address_country (from the second block/page) leads to a wrong record-state (=changed) in appserver, so there's no "insert" but a "update" of a 'non-existent' record i see as i've changed form's behaviour of a 'rollback' i think we need this for commit too *** sjc has quit IRC dimas, i've got a question about GFObjects/GFBlock.py ok in revision 4146 you've changed the commit () function of GFBlock instead of self._form.commit () you changed it to call self.processCommit () kilo: thanks for answering yesterday's questions :) can you remember why ? since i think this is wrong (what about changes in other non-related blocks ? they're simply lost) exactly it could be tracked on via backlog on that date but forms had strange behaviour without that johannesV: can't look into right now, be back in two hours hmm, acutally calling "block.commit ()" is somehow "paradox" anyway since commit () ends a transaction and theirfore should be called on form-level (since a form can have multiple non-related blocks all having changes belonging to the *same* transaction) from memory i wanted block.commit to work properly, but it was coupled somehow with commiting the whole form and donig a blkFoo.commit () will loose all changes in the other blocks yes bbl so to me, blkFoo.commit () should give a depreciation warning shouldn't a block.commit commit changes on the datasource it is connected to, and not bother with other blocks? right, but the commit is called in processCommit of the block (if it is not detail in a M/D) this means if you have two blocks (unrelated) from the same "connection" !!! you call the commit on the connection twice and this means, the first commit does *not* enclose pending changes from the second block into the *same* transaction is stammdaten.gfd using one connection? of course: appserver all datasources are sharing the same connection (as they are supposed to do so) oh, sorry, i mixed up connection/datasource... np so the commit happens on a connection, not on a datasource? but the sense of a transaction is to have multiple changes in multiple datasources as "one" thing not yet, but it should be the case *** dcmwai has joined #gnuenterprise kilo, meanwhile i've fixed the first problem but encountered another one hmmm, should we call that a success? 8-))))) yes, i think so since the commit () problem needed a solution anyway the way commit () is working atm is wrong in any case (as i see things) in two- and three-tier mode hmm, we are thinking along here with btami, and come to the question: why does block.commit exist? great! lol this show's me that you are thinking the same way as reinhard and me :) * kilo looks at gnue-invoice and horrifies himself: there are tons of block commits there... january 7. ideal day for a seppuku... well, kilo, you have to look closer on all forms having multiple unrelated blocks all these won't work fine atm (but not because of appserver, but forms) what is 'seppuku' ? harakiri oh ... * btami envisiones kilo making harakiri with a block.commit() well, the key word here is 'unrelated'. M/D blocks are not unrelated yeah, otherwise he waits until nobody is looking and then runs a form.rollback () *lol* right M/D is 'related' :) well, i care for hygiene, so take a lot of alcohol with me before. it would be horroristic if my wounds ended up having zillions of viruses and bacteri... 'dear doctor, you know, i had this little harakiri the last week, and my wounds hurt' hmm, seems as if we need another change in appservers data.py ... kilo, seems like i've a working copy now ... but since i've changed appserver too, i do need a lot more testing now hacking data.py is... candy... well, before you kicked me with your bug i was on my way into data.py anyway (to implement dirty reads) in fact i would like to use this hotline for my own purposes... but now i think i've to create 'stable' data.py *before* adding dirty-read-stuff into it ... after some customization on forms and reports *** reinhard has joined #gnuenterprise ah there he is oh reinhard, i need to change data.py as we have already discussed * reinhard hides to only remove those tuples (table,row) which has been processed i mean keeping all that "initialized" ones change in forms doesn't help? not completely, example: sample.gfd add a new 'country', and press commit this works fine after changing forms but, now change the person and try to commit again .... you'll get a 'instance 123545.... is not valid' why ? well, it's quite easy the commit has stored the person-instance, and recognized it's empty gotcha so it has been thrown away and a new one was created (automatically by appserver db-driver) the next is the change of the country which does this insert but also destroys the newly created person-instance (which breaks reference for appserver db-driver) maybe the order might differ a bit but it's the big picture hallo johannesV hi SachaS du hast einen names verwandten bekommen :) reinhard, how shall we proceed with changing data.py (wrt dirty-read stuff) SachaS, yeah i've seen it. my congratulations ! johannesV: you've already started with dirty reads? well, SachaS, i count on you to make sure he can finish the work on gnue in about 20 years if i'm retired :) lol @channelstats stats johannesV SachaS, so we can simulate continuous work :) *** dcmwai has quit IRC maybe i should change my nick to be only 'johannes' then reinhard, yes i did so but it's not very much so i could revert that changes johannesV: then please just go on we will *always* find a new bug that stops us from starting with new function if we want as we agreed this problem has been there for several months now and nobody noticed reinhard, but this means appserver/forms with multiple unrelated blocks is not working at all atm that's right, hmm and it only appears if there *are* unrelated blocks in one form (w/o m/d) ok, so i'll continue with dirty reads and include the fixed mentioned before which seems to be a very rare case anyway shall i commit the fix to forms ? or do we discuss it first with jamest ? (maybe the latter one would be no bad thing) I think yes, and we would ask jamest/jcater to look at the commit today afternoon it's easier to discuss when the commit is already out it also appears in gnue-invoice, when a subform is committed, closed, and you get back to the riginal, calling form... johannesV: but as you like you can also hold back the commit kilo, a subform is *not* a new transaction ! child form but having multiple forms their own 'session' is something i'd like to have in the todo-list kilo, that's the same ok, wasnt sure 'subform' was good naming if you call a new form from another one and do a commit in that form, it's still a single transaction as seen by the backend (if you're using appserver) also if you use 2-tier a transaction is a transaction is a transaction but in this case the blocks are really 'unrelated' :) right ok, i'll look how much time i can spend to gnue this weekend, so maybe i'll do commits if i'm done with it Traceback (most recent call last): File "/home/tamas/svn/gnue/.cvsdevelbase/gnue/appserver/geasSessionManager.py", line 185, in load return s.load (classname, obj_id_list, propertylist) File "/home/tamas/svn/gnue/.cvsdevelbase/gnue/appserver/geasSession.py", line 463, in load instance = self.__findInstance (classdef, object_id, propertylist) File "/home/tamas/svn/gnue/.cvsdevelbase/gnue/appserver/geasSession.py", line 408, in __findInstance raise InstanceNotFoundError, (classdef.fullName, object_id) InstanceNotFoundError: A 'INV_Head' osztály '16047863865370549475526249647194' példánya nem található from gnue-invoice after adding new customer, close subform that looks much like the bug i've fixed right now selecting the new one oh may try svn up ? btami, no i haven't commited yet ok, have to go home bbl *** btami has quit IRC *** SachaS has quit IRC *** lekma has joined #gnuenterprise hi everyone *** kilo has quit IRC hi lekma back *** kilo has joined #gnuenterprise reinhard: did you change recently OnValidate semantic?? it still should be trigerred whenever i create or modify a class object ie ( a db record) ?? *** havoc has quit IRC *** havoc has joined #gnuenterprise cause we have a strange situation here where an onvalidate is fired normally in certain case and not in others :( lekma: we did not change OnValidate semantic in a while last change IIRC was to first fire OnValidate and later check for non-nullable fields however you can currently fool OnValidate with a trick: lekma: it did not change recently OnValidate is not guaranteed to be called for changes that are done in OnValidate that is if in OnValidate of class a you change objects of class b OnValidate of class b might or might not get called fixing this is also on our TODO list OnValidate of class b might or might not get called <-- why is that?? however it might be not too easy as we have to prevent circular OnValidate calling cause i think we're in this case when you call commit appserver builds a list of all objects that have been changed and calls OnValidate on all objects of that list so objects that haven't been changed before that but are changed by OnValidate are not in the list if you look at geasSession.py for instance in self.__dirtyInstances.values (): instance.validate () it should be possible to do something like while self.__dirtyInstances: key = self.__dirtyInstances.keys () [0] (self.__dirtyInstances [key]).validate () del self.__dirtyInstances [key] --- instead of the existing 2 lines as a quick fix reinhard: ok i'll try this however this might cause appserver to loop forever if a.OnValidate changes b and b.OnValidate changes a typical deadlock, yeaahhh so the really correct solution would be to add the keys that were processed to a list and check no key is processed twice and if it tries to process it again, raise an exception reinhard: one small hint (maybe) it seems we're in this situation when b.OnValidate is fired from a.OnValidate, when a existed already but was changed when a is new a.OnValidate creates b that fires b.OnValidate correctly but when a already exist and is changed a.OnValidate creates b, but b.OnValidate is not fired (which is strange cause b is correctly created) can you try with the change i listed above? like I said as a temporary fix i will in 5 mins ok thanks *** jamest has joined #gnuenterprise *** jamest has quit IRC *** jamest has joined #gnuenterprise *** kilo has quit IRC reinhard: ok the fix you gave me works for the case we had, thx (from frances also) thanks for testing I think you can leave that fix there for you until we do the proper fix *** johannesV_ has joined #gnuenterprise *** jcater has joined #gnuenterprise *** johannesV has quit IRC *** titopbs has joined #gnuenterprise reinhard: what about base_currency in luca? is it completed? i need to track history of dollars and euro rates to local currency dimas: i was thinking about that do i need more classes? 1 to define names and codes of currencies and 2 to keep history to particular date for many small business users it would be overkill, so i delayed it my approach would have been to have 1 class to define name and code and another class as a detail to currency class that defines the values with a starting date probably also change the calculation procedures in the currency class to access the values for the correct date (would need another parameter for the procedure with the date then also, if you look at the currency class, I'm not 100% confident if the rounding is particularly smart the way I do it base_currency seems suitable if i need today's value right hm, seems ok for the beginning history could be handled by another class reinhard: and i need gl even in its simple and early form, i could test it on daily basis but i need some thing to be explained strange as i tent to choose dollar as a base local currency hehe dimas: to use gl is a bit too early, it's not much more as a proof of concept as it stands now but i seriously hope to have the time to continue work on it in the next days bbl *** havoc has quit IRC *** havoc has joined #gnuenterprise *** havoc has quit IRC *** havoc has joined #gnuenterprise bbl *** lekma has quit IRC *** SachaS has joined #gnuenterprise great, dirty-reads seem to work at least the first test-run ended successfully ... :) lekla would be glad yes, i know :) but i think this change would need extensive testing first ... how it could be tested on sample or own forms? hmm, it looks really good ... which makes me nervouse since the actual change took be about 10 minutes ... this looks far too easy and there must be a drawback somewhere .. i'll better discuss some testcases with reinhard first ... :) using a language-interface-app doing: find ('foo'), new ('foo'), find ('foo') behaves properly, where the second find includes the newly created instance hmm, there is a side-effect we haven't thought of by now (i think) doing a 'post' of all pending changes just before a new query is performed (like a find) these data will be available to following finds () without beeing validated ! this is because OnValidate is fired by the session's commit () function but we cannot simply move the OnValidate, can we ? *** dcmwai has joined #gnuenterprise bbl *** dcmwai has quit IRC I think it is obvious that uncommitted data is also unvalidated but it's important that people are aware of that uhm i think it in the opossite way if validations fails it can't be commited but /me == noone rb brb* *** wendall911 has joined #gnuenterprise *** SachaS has quit IRC .,,,mmmmmmmmmmmmmmmmmmmöööl.,, * johannesV_ thinks his little daughter should work a bit on her spelling ... :) lol sounded like a burp *** SachaS has joined #gnuenterprise *** titopbs has quit IRC right :) mnemoc, this does not interfere with commit if an OnValidate fails, no commit will happen the point is the time when OnValidate get's executed a find in the same session can access dirty data (as determined by the name: dirty read) after thinking about i came to the same conclusion as reinhard it's ok, but programmers have to be aware of that btw. i've fixed that annoying bug in forms, where a intercepted commit (f.e. if an onValidate fails) leaved forms in a not-responding state :) but still a big question atm is finding a 'good' test-cycle for all this stuff regarding dirty reads and (somehow connected) multiple unrelated blocks i'll change to another (more comfortable) workstation now ... bbl *** johannesV_ has quit IRC i would suggest u guys look at unit testing there is just so much suff that can be broken *** neilt has joined #gnuenterprise off for today bye *** reinhard has left #gnuenterprise *** neilt has quit IRC *** neilt has joined #gnuenterprise /msg NickServ help identify *** Amorphous has quit IRC *** neilt has quit IRC *** sjc has joined #gnuenterprise *** titopbs has joined #gnuenterprise *** Amorphous has joined #gnuenterprise *** kilo has joined #gnuenterprise *** kilo has quit IRC *** jamest has left #gnuenterprise *** apropos has joined #gnuenterprise *** gnardo has joined #gnuenterprise *** jcater has quit IRC *** holycow has quit IRC *** dcmwai has joined #gnuenterprise *** sjc has quit IRC *** holycow has joined #gnuenterprise *** titopbs has quit IRC *** wt has joined #gnuenterprise *** wendall911 has quit IRC *** cilkay has left #gnuenterprise *** holycow has quit IRC