Issue 3445

Title
trytond model write is inefficient as it validates not modified fields
Priority
wish
Status
resolved
Nosy list
ced, giedrius, ohuisman, pokoli, roundup-bot
Assigned to
ced
Keywords

Created on 2013-10-27.15:02:47 by giedrius, last changed 91 months ago by ced.

Files

File name Uploaded Type Details
test_performance.py giedrius, 2013-10-27.23:19:37 text/plain view

Messages

New changeset ed7e2d9b0e40 by C?dric Krier in branch 'default':
Validate only modified and dependant fields on model write
http://hg.tryton.org/trytond/rev/ed7e2d9b0e40
Author: [hidden] (giedrius)
Date: 2013-10-27.23:19:37
It seems the patch was not attached within previous message. Reattaching.
Author: [hidden] (giedrius)
Date: 2013-10-27.15:02:45
Normally, trytond tries to validate every field it finds on written model. It
doesn't harm a lot if model is tiny, but when the model grows by adding more and
more fields (with domain, state attributes) slowness becomes noticeable.

This issue is fixed in review1371002.

I've attached a script used to test the performance. It installs many modules to
reflect real usage performance. I got more than 100% performance increase, but
like i said, it depends on model size and written fields.

Here's numbers I got. Firstly, a test without patch:

         33665 function calls (30058 primitive calls) in 0.235 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        2    0.000    0.000    0.000    0.000 :0(__getitem__)
        1    0.000    0.000    0.000    0.000 :0(__import__)
       26    0.000    0.000    0.000    0.000 :0(__new__)
        1    0.000    0.000    0.000    0.000 :0(abs)
        4    0.000    0.000    0.000    0.000 :0(add)
       60    0.000    0.000    0.002    0.000 :0(all)
       11    0.000    0.000    0.000    0.000 :0(any)
      540    0.000    0.000    0.000    0.000 :0(append)
        2    0.000    0.000    0.000    0.000 :0(clear)
      186    0.000    0.000    0.000    0.000 :0(copy)
       21    0.000    0.000    0.000    0.000 :0(decode)
       16    0.000    0.000    0.000    0.000 :0(end)
        1    0.000    0.000    0.000    0.000 :0(endswith)
       31    0.006    0.000    0.009    0.000 :0(execute)
     1049    0.005    0.000    0.005    0.000 :0(extend)
       18    0.000    0.000    0.000    0.000 :0(fetchall)
        9    0.000    0.000    0.000    0.000 :0(fetchmany)
        3    0.000    0.000    0.000    0.000 :0(fetchone)
       21    0.000    0.000    0.000    0.000 :0(format)
       17    0.000    0.000    0.000    0.000 :0(fromkeys)
      988    0.003    0.000    0.003    0.000 :0(get)
      239    0.000    0.000    0.000    0.000 :0(get_ident)
 1443/898    0.005    0.000    0.092    0.000 :0(getattr)
       14    0.000    0.000    0.000    0.000 :0(globals)
       19    0.000    0.000    0.000    0.000 :0(group)
     1101    0.008    0.000    0.010    0.000 :0(hasattr)
       23    0.000    0.000    0.000    0.000 :0(index)
     3205    0.009    0.000    0.012    0.000 :0(isinstance)
        1    0.000    0.000    0.000    0.000 :0(isoformat)
      191    0.001    0.000    0.001    0.000 :0(items)
      370    0.000    0.000    0.000    0.000 :0(iteritems)
        1    0.000    0.000    0.000    0.000 :0(itervalues)
  186/185    0.000    0.000    0.000    0.000 :0(join)
      105    0.003    0.000    0.003    0.000 :0(keys)
     1116    0.001    0.000    0.001    0.000 :0(len)
       30    0.000    0.000    0.000    0.000 :0(lower)
  243/190    0.001    0.000    0.029    0.000 :0(map)
       26    0.001    0.000    0.001    0.000 :0(match)
       27    0.001    0.000    0.001    0.000 :0(max)
        1    0.000    0.000    0.000    0.000 :0(min)
        6    0.000    0.000    0.000    0.000 :0(mktime)
        1    0.000    0.000    0.000    0.000 :0(now)
        1    0.001    0.001    0.001    0.001 :0(open)
      338    0.000    0.000    0.000    0.000 :0(pop)
       48    0.002    0.000    0.002    0.000 :0(range)
        1    0.000    0.000    0.000    0.000 :0(readlines)
       93    0.000    0.000    0.000    0.000 :0(remove)
       82    0.000    0.000    0.000    0.000 :0(repr)
        2    0.000    0.000    0.000    0.000 :0(round)
        4    0.000    0.000    0.000    0.000 :0(rstrip)
      155    0.000    0.000    0.000    0.000 :0(setattr)
      217    0.002    0.000    0.002    0.000 :0(setdefault)
        1    0.000    0.000    0.000    0.000 :0(setprofile)
       19    0.000    0.000    0.000    0.000 :0(sort)
      139    0.000    0.000    0.000    0.000 :0(split)
       10    0.000    0.000    0.000    0.000 :0(startswith)
        1    0.000    0.000    0.000    0.000 :0(stat)
        6    0.000    0.000    0.000    0.000 :0(strip)
        6    0.000    0.000    0.000    0.000 :0(timetuple)
        8    0.000    0.000    0.000    0.000 :0(today)
      153    0.001    0.000    0.028    0.000 :0(update)
       20    0.000    0.000    0.000    0.000 :0(upper)
       23    0.000    0.000    0.000    0.000 :0(values)
       26    0.000    0.000    0.001    0.000 :0(warn)
        2    0.000    0.000    0.000    0.000 :0(write)
        2    0.000    0.000    0.000    0.000 :0(zip)
        1    0.000    0.000    0.235    0.235 <string>:1(<module>)
       19    0.000    0.000    0.000    0.000 <string>:8(__new__)
        1    0.000    0.000    0.000    0.000 __init__.py:10(get)
        9    0.000    0.000    0.001    0.000 __init__.py:1002(params)
       14    0.000    0.000    0.000    0.000 __init__.py:1014(__init__)
       14    0.000    0.000    0.001    0.000 __init__.py:1019(__str__)
       14    0.000    0.000    0.001    0.000 __init__.py:1022(params)
       29    0.000    0.000    0.000    0.000 __init__.py:119(__enter__)
       29    0.000    0.000    0.000    0.000 __init__.py:126(__exit__)
      444    0.001    0.000    0.005    0.000 __init__.py:132(get)
        1    0.000    0.000    0.000    0.000 __init__.py:138(set)
       31    0.001    0.000    0.002    0.000 __init__.py:143(alias_factory)
       84    0.000    0.000    0.054    0.001 __init__.py:156(__iter__)
      444    0.002    0.000    0.007    0.000 __init__.py:164(alias)
      135    0.000    0.000    0.002    0.000 __init__.py:168(__getattr__)
       28    0.000    0.000    0.003    0.000 __init__.py:175(select)
        6    0.000    0.000    0.001    0.000 __init__.py:178(join)
       28    0.000    0.000    0.000    0.000 __init__.py:185(__init__)
       74    0.000    0.000    0.000    0.000 __init__.py:194(order_by)
       28    0.000    0.000    0.000    0.000 __init__.py:198(order_by)
       24    0.000    0.000    0.000    0.000 __init__.py:203(<genexpr>)
       28    0.000    0.000    0.001    0.000 __init__.py:206(_order_by_str)
       30    0.000    0.000    0.000    0.000 __init__.py:213(limit)
       28    0.000    0.000    0.000    0.000 __init__.py:217(limit)
       28    0.000    0.000    0.000    0.000 __init__.py:223(_limit_str)
       54    0.000    0.000    0.000    0.000 __init__.py:234(offset)
       28    0.000    0.000    0.000    0.000 __init__.py:238(offset)
       28    0.000    0.000    0.000    0.000 __init__.py:244(_offset_str)
       28    0.000    0.000    0.003    0.000 __init__.py:256(__init__)
       84    0.000    0.000    0.000    0.000 __init__.py:272(columns)
       28    0.000    0.000    0.002    0.000 __init__.py:276(columns)
      310    0.002    0.000    0.002    0.000 __init__.py:278(<genexpr>)
      112    0.000    0.000    0.000    0.000 __init__.py:281(where)
       28    0.000    0.000    0.000    0.000 __init__.py:285(where)
       56    0.000    0.000    0.000    0.000 __init__.py:292(group_by)
       28    0.000    0.000    0.000    0.000 __init__.py:296(group_by)
       56    0.000    0.000    0.000    0.000 __init__.py:304(having)
       28    0.001    0.000    0.001    0.000 __init__.py:308(having)
       28    0.000    0.000    0.000    0.000 __init__.py:315(for_)
       28    0.000    0.000    0.000    0.000 __init__.py:319(for_)
      282    0.005    0.000    0.014    0.000 __init__.py:327(_format_column)
    28/27    0.002    0.000    0.031    0.001 __init__.py:334(__str__)
    28/27    0.003    0.000    0.022    0.001 __init__.py:357(params)
        1    0.000    0.000    0.001    0.001 __init__.py:390(__init__)
        7    0.000    0.000    0.000    0.000 __init__.py:400(table)
        1    0.001    0.001    0.001    0.001 __init__.py:404(table)
        2    0.000    0.000    0.000    0.000 __init__.py:409(columns)
       31    0.000    0.000    0.001    0.000 __init__.py:41(alias)
        1    0.000    0.000    0.000    0.000 __init__.py:413(columns)
        4    0.000    0.000    0.000    0.000 __init__.py:416(<genexpr>)
        4    0.000    0.000    0.000    0.000 __init__.py:417(<genexpr>)
        1    0.000    0.000    0.000    0.000 __init__.py:434(returning)
        3    0.000    0.000    0.000    0.000 __init__.py:440(_format)
        1    0.000    0.000    0.001    0.001 __init__.py:491(__init__)
        2    0.000    0.000    0.000    0.000 __init__.py:497(values)
        1    0.000    0.000    0.000    0.000 __init__.py:501(values)
        4    0.000    0.000    0.000    0.000 __init__.py:508(where)
        1    0.000    0.000    0.000    0.000 __init__.py:512(where)
        1    0.000    0.000    0.000    0.000 __init__.py:519(__str__)
        4    0.000    0.000    0.000    0.000 __init__.py:520(<genexpr>)
        4    0.000    0.000    0.000    0.000 __init__.py:532(<genexpr>)
        1    0.000    0.000    0.001    0.001 __init__.py:539(params)
       41    0.000    0.000    0.000    0.000 __init__.py:658(__init__)
       33    0.000    0.000    0.000    0.000 __init__.py:662(__str__)
       37    0.000    0.000    0.000    0.000 __init__.py:665(params)
        1    0.000    0.000    0.001    0.001 __init__.py:673(update)
        6    0.000    0.000    0.001    0.000 __init__.py:685(__init__)
        6    0.000    0.000    0.000    0.000 __init__.py:695(left)
        6    0.001    0.000    0.001    0.000 __init__.py:699(left)
        9    0.000    0.000    0.000    0.000 __init__.py:704(right)
        6    0.000    0.000    0.000    0.000 __init__.py:708(right)
       15    0.000    0.000    0.000    0.000 __init__.py:713(condition)
        6    0.000    0.000    0.000    0.000 __init__.py:717(condition)
        3    0.000    0.000    0.000    0.000 __init__.py:724(type_)
        6    0.000    0.000    0.000    0.000 __init__.py:728(type_)
        3    0.000    0.000    0.000    0.000 __init__.py:735(__str__)
       12    0.001    0.000    0.001    0.000 __init__.py:74(__init__)
        3    0.000    0.000    0.004    0.001 __init__.py:744(params)
        3    0.000    0.000    0.000    0.000 __init__.py:754(alias)
        3    0.000    0.000    0.000    0.000 __init__.py:758(__getattr__)
        3    0.000    0.000    0.001    0.000 __init__.py:761(select)
       28    0.000    0.000    0.003    0.000 __init__.py:768(select)
    34/28    0.000    0.000    0.004    0.000 __init__.py:771(__str__)
    34/28    0.001    0.000    0.004    0.000 __init__.py:772(format)
       28    0.000    0.000    0.004    0.000 __init__.py:783(params)
      201    0.000    0.000    0.000    0.000 __init__.py:81(param)
       50    0.002    0.000    0.002    0.000 __init__.py:873(__eq__)
       14    0.000    0.000    0.000    0.000 __init__.py:880(__ne__)
       20    0.000    0.000    0.000    0.000 __init__.py:892(in_)
      271    0.001    0.000    0.002    0.000 __init__.py:904(as_)
        9    0.000    0.000    0.000    0.000 __init__.py:907(cast)
        1    0.000    0.000    0.000    0.000 __init__.py:922(__init__)
      239    0.001    0.000    0.003    0.000 __init__.py:93(get)
        1    0.000    0.000    0.000    0.000 __init__.py:930(__str__)
        1    0.000    0.000    0.000    0.000 __init__.py:933(params)
      413    0.003    0.000    0.003    0.000 __init__.py:941(__init__)
        6    0.000    0.000    0.000    0.000 __init__.py:946(table)
      413    0.002    0.000    0.006    0.000 __init__.py:954(__str__)
      428    0.002    0.000    0.002    0.000 __init__.py:966(params)
      271    0.001    0.000    0.001    0.000 __init__.py:974(__init__)
      271    0.002    0.000    0.002    0.000 __init__.py:979(__str__)
      271    0.000    0.000    0.000    0.000 __init__.py:982(params)
        9    0.000    0.000    0.000    0.000 __init__.py:990(__init__)
        9    0.000    0.000    0.002    0.000 __init__.py:995(__str__)
      191    0.003    0.000    0.011    0.000 _abcoll.py:526(update)
      573    0.001    0.000    0.001    0.000 _weakrefset.py:68(__contains__)
      191    0.002    0.000    0.003    0.000 abc.py:128(__instancecheck__)
      191    0.000    0.000    0.000    0.000 abc.py:148(__subclasscheck__)
        1    0.000    0.000    0.000    0.000 boolean.py:26(_domain_add_null)
     14/8    0.000    0.000    0.000    0.000 cache.py:13(freeze)
      191    0.002    0.000    0.017    0.000 cache.py:135(__init__)
       75    0.002    0.000    0.003    0.000 cache.py:141(__setitem__)
       13    0.000    0.000    0.000    0.000 cache.py:149(setdefault)
      279    0.003    0.000    0.003    0.000 cache.py:154(_check_size_limit)
       14    0.000    0.000    0.000    0.000 cache.py:17(<genexpr>)
       29    0.000    0.000    0.000    0.000 cache.py:39(_key)
       21    0.000    0.000    0.002    0.000 cache.py:44(get)
        8    0.000    0.000    0.001    0.000 cache.py:56(set)
        9    0.001    0.000    0.002    0.000 char.py:20(__init__)
        9    0.000    0.000    0.000    0.000 char.py:44(_set_autocomplete)
        9    0.000    0.000    0.000    0.000 char.py:50(_get_size)
        9    0.000    0.000    0.000    0.000 char.py:53(_set_size)
        7    0.000    0.000    0.000    0.000 char.py:59(sql_format)
        9    0.000    0.000    0.000    0.000 char.py:70(sql_type)
        9    0.000    0.000    0.000    0.000 char.py:9(autocomplete_validate)
       21    0.000    0.000    0.000    0.000 collections.py:132(pop)
       13    0.000    0.000    0.000    0.000 collections.py:146(setdefault)
      191    0.002    0.000    0.013    0.000 collections.py:38(__init__)
       75    0.000    0.000    0.000    0.000 collections.py:54(__setitem__)
       13    0.000    0.000    0.000    0.000 collections.py:64(__delitem__)
        1    0.000    0.000    0.000    0.000 collections.py:91(clear)
    30/24    0.000    0.000    0.000    0.000 conditionals.py:40(_format)
       15    0.000    0.000    0.000    0.000 conditionals.py:89(__init__)
    15/12    0.001    0.000    0.001    0.000 conditionals.py:92(__str__)
    15/12    0.000    0.000    0.002    0.000 conditionals.py:96(params)
       16    0.000    0.000    0.000    0.000 config.py:146(__getitem__)
        7    0.000    0.000    0.008    0.001 configuration.py:20(get_language)
       26    0.000    0.000    0.000    0.000 contextlib.py:12(__init__)
       26    0.000    0.000    0.003    0.000 contextlib.py:15(__enter__)
       26    0.000    0.000    0.001    0.000 contextlib.py:21(__exit__)
       26    0.000    0.000    0.000    0.000 contextlib.py:82(helper)
       52    0.001    0.000    0.004    0.000 contextlib.py:88(nested)
       82    0.004    0.000    0.010    0.000 database.py:110(get_cache)
        1    0.000    0.000    0.000    0.000 database.py:115(now)
       33    0.002    0.000    0.004    0.000 database.py:305(__build_dict)
      354    0.002    0.000    0.002    0.000 database.py:306(<genexpr>)
        9    0.000    0.000    0.002    0.000 database.py:316(dictfetchmany)
       15    0.001    0.000    0.003    0.000 database.py:320(dictfetchall)
       31    0.000    0.000    0.000    0.000 database.py:335(__getattr__)
       13    0.001    0.000    0.001    0.000 database.py:34(extract)
       31    0.000    0.000    0.009    0.000 database.py:340(execute)
        1    0.000    0.000    0.000    0.000 database.py:387(has_constraint)
        3    0.000    0.000    0.001    0.000 database.py:390(<lambda>)
        1    0.000    0.000    0.000    0.000 database.py:392(<lambda>)
       21    0.001    0.000    0.001    0.000 dbapi2.py:64(convert_timestamp)
        1    0.000    0.000    0.000    0.000 decimal.py:1640(_fix)
        1    0.000    0.000    0.000    0.000 decimal.py:2422(quantize)
        1    0.000    0.000    0.000    0.000 decimal.py:3724(_dec_from_triple)
        1    0.000    0.000    0.000    0.000 decimal.py:3782(__init__)
        2    0.000    0.000    0.000    0.000 decimal.py:3895(Etiny)
        1    0.000    0.000    0.000    0.000 decimal.py:3899(Etop)
        1    0.000    0.000    0.000    0.000 decimal.py:441(getcontext)
        6    0.001    0.000    0.001    0.000 decimal.py:515(__new__)
        2    0.000    0.000    0.000    0.000 decimal.py:5835(_convert_other)
        2    0.000    0.000    0.000    0.000 decimal.py:700(_isnan)
        1    0.000    0.000    0.000    0.000 decimal.py:728(_check_nans)
        4    0.000    0.000    0.000    0.000 decimal.py:793(__nonzero__)
        1    0.000    0.000    0.000    0.000 decimal.py:800(_cmp)
        1    0.000    0.000    0.000    0.000 decimal.py:872(__ne__)
        1    0.000    0.000    0.000    0.000 decimal.py:999(__str__)
        8    0.000    0.000    0.000    0.000 decoder.py:303(__init__)
        8    0.001    0.000    0.071    0.009 decoder.py:360(decode)
        8    0.000    0.000    0.069    0.009 decoder.py:371(raw_decode)
        8    0.001    0.000    0.001    0.000 encoder.py:101(__init__)
        8    0.000    0.000    0.000    0.000 encoder.py:186(encode)
        8    0.000    0.000    0.000    0.000 encoder.py:212(iterencode)
        9    0.000    0.000    0.000    0.000 field.py:14(domain_validate)
       27    0.000    0.000    0.000    0.000 field.py:144(_get_domain)
        9    0.000    0.000    0.000    0.000 field.py:147(_set_domain)
       39    0.000    0.000    0.000    0.000 field.py:153(_get_states)
        9    0.000    0.000    0.000    0.000 field.py:156(_set_states)
        9    0.000    0.000    0.000    0.000 field.py:165(_set_on_change)
        9    0.000    0.000    0.000    0.000 field.py:17(test_domain)
        9    0.000    0.000    0.000    0.000 field.py:173(_set_on_change_with)
        9    0.000    0.000    0.000    0.000 field.py:182(_set_depends)
        9    0.000    0.000    0.000    0.000 field.py:191(_set_context)
 1334/104    0.013    0.000    0.168    0.002 field.py:197(__get__)
        1    0.000    0.000    0.000    0.000 field.py:203(__set__)
       14    0.000    0.000    0.000    0.000 field.py:209(sql_format)
       14    0.000    0.000    0.000    0.000 field.py:216(_domain_value)
       14    0.000    0.000    0.000    0.000 field.py:224(_domain_add_null)
       28    0.000    0.000    0.000    0.000 field.py:227(<genexpr>)
       14    0.000    0.000    0.000    0.000 field.py:234(convert_domain)
       11    0.000    0.000    0.000    0.000 field.py:248(convert_order)
        3    0.000    0.000    0.002    0.001 field.py:260(__get_translation_join)
        2    0.000    0.000    0.000    0.000 field.py:292(convert_domain)
        5    0.000    0.000    0.002    0.000 field.py:317(convert_order)
        9    0.000    0.000    0.000    0.000 field.py:36(states_validate)
        9    0.000    0.000    0.000    0.000 field.py:48(on_change_validate)
        9    0.000    0.000    0.000    0.000 field.py:53(on_change_with_validate)
        9    0.000    0.000    0.000    0.000 field.py:58(depends_validate)
        9    0.000    0.000    0.000    0.000 field.py:62(context_validate)
        9    0.000    0.000    0.000    0.000 field.py:66(size_validate)
        9    0.001    0.000    0.001    0.000 field.py:92(__init__)
       22    0.000    0.000    0.000    0.000 float.py:44(_get_digits)
      173    0.001    0.000    0.002    0.000 function.py:49(__getattr__)
        1    0.000    0.000    0.000    0.000 function.py:62(convert_domain)
      5/4    0.000    0.000    0.081    0.020 function.py:68(get)
      5/4    0.000    0.000    0.079    0.020 function.py:76(call)
     10/8    0.000    0.000    0.077    0.010 function.py:81(<genexpr>)
     10/8    0.002    0.000    0.081    0.010 function.py:87(<genexpr>)
       28    0.000    0.000    0.000    0.000 functions.py:55(__init__)
       18    0.000    0.000    0.002    0.000 functions.py:58(_format)
       10    0.000    0.000    0.002    0.000 functions.py:65(__str__)
    19/10    0.000    0.000    0.001    0.000 functions.py:72(params)
        9    0.000    0.000    0.002    0.000 functions.py:91(__str__)
        5    0.000    0.000    0.000    0.000 inspect.py:142(isfunction)
        5    0.000    0.000    0.000    0.000 inspect.py:209(iscode)
        5    0.000    0.000    0.000    0.000 inspect.py:67(ismethod)
        5    0.000    0.000    0.000    0.000 inspect.py:743(getargs)
        5    0.000    0.000    0.000    0.000 inspect.py:803(getargspec)
        6    0.000    0.000    0.000    0.000 integer.py:24(sql_format)
        2    0.000    0.000    0.001    0.001 linecache.py:13(getline)
        2    0.000    0.000    0.001    0.001 linecache.py:33(getlines)
        1    0.000    0.000    0.001    0.001 linecache.py:68(updatecache)
        2    0.000    0.000    0.001    0.001 many2one.py:132(convert_domain)
       11    0.000    0.000    0.000    0.000 many2one.py:56(__get_required)
       48    0.000    0.000    0.002    0.000 many2one.py:66(get_target)
        1    0.000    0.000    0.000    0.000 many2one.py:79(sql_format)
       19    0.001    0.000    0.002    0.000 misc.py:327(reduce_ids)
       19    0.000    0.000    0.000    0.000 misc.py:333(<genexpr>)
    20/10    0.001    0.000    0.001    0.000 misc.py:416(reduce_domain)
        1    0.000    0.000    0.000    0.000 model.py:354(pre_validate)
       73    0.002    0.000    0.003    0.000 model.py:357(__init__)
     1329    0.004    0.000    0.004    0.000 model.py:378(__getattr__)
  514/513    0.003    0.000    0.003    0.000 model.py:386(__setattr__)
        6    0.000    0.000    0.000    0.000 model.py:400(__int__)
        1    0.000    0.000    0.000    0.000 model.py:403(__str__)
       20    0.000    0.000    0.000    0.000 model.py:443(__nonzero__)
       21    0.000    0.000    0.000    0.000 model.py:513(check)
       35    0.001    0.000    0.003    0.000 model.py:658(check)
      390    0.001    0.000    0.001    0.000 model.py:668(<genexpr>)
        1    0.000    0.000    0.004    0.004 modelsingleton.py:11(get_singleton)
        1    0.000    0.000    0.006    0.006 modelsingleton.py:29(read)
     10/9    0.001    0.000    0.004    0.000 modelsql.py:1005(search_domain)
       27    0.001    0.000    0.001    0.000 modelsql.py:1020(is_leaf)
     27/9    0.001    0.000    0.003    0.000 modelsql.py:1026(convert)
    26/21    0.000    0.000    0.001    0.000 modelsql.py:1039(<genexpr>)
        1    0.000    0.000    0.000    0.000 modelsql.py:1050(_update_mptt)
        1    0.000    0.000    0.001    0.001 modelsql.py:1159(validate)
       71    0.000    0.000    0.000    0.000 modelsql.py:185(table_query)
        1    0.000    0.000    0.000    0.000 modelsql.py:230(__insert_history)
        1    0.000    0.000    0.000    0.000 modelsql.py:265(__check_timestamp)
    20/11    0.006    0.000    0.130    0.012 modelsql.py:406(read)
       41    0.000    0.000    0.000    0.000 modelsql.py:49(__table__)
        1    0.000    0.000    0.191    0.191 modelsql.py:631(write)
     10/9    0.004    0.000    0.052    0.006 modelsql.py:861(search)
       28    0.000    0.000    0.000    0.000 modelsql.py:885(<genexpr>)
    13/10    0.000    0.000    0.000    0.000 modelsql.py:894(convert_from)
        4    0.000    0.000    0.000    0.000 modelstorage.py:1046(digits_test)
       20    0.001    0.000    0.002    0.000 modelstorage.py:112(read)
       73    0.003    0.000    0.017    0.000 modelstorage.py:1164(__init__)
      564    0.002    0.000    0.003    0.000 modelstorage.py:1185(_cache)
  1329/98    0.023    0.000    0.166    0.002 modelstorage.py:1192(__getattr__)
       14    0.000    0.000    0.000    0.000 modelstorage.py:1229(<genexpr>)
      376    0.006    0.000    0.025    0.000 modelstorage.py:1234(not_cached)
      318    0.000    0.000    0.002    0.000 modelstorage.py:1239(to_load)
       25    0.000    0.000    0.000    0.000 modelstorage.py:1260(filter_)
       75    0.002    0.000    0.023    0.000 modelstorage.py:1268(instantiate)
        1    0.000    0.000    0.001    0.001 modelstorage.py:128(write)
        1    0.000    0.000    0.000    0.000 modelstorage.py:1346(_save_values)
        1    0.000    0.000    0.235    0.235 modelstorage.py:1377(save)
        8    0.000    0.000    0.000    0.000 modelstorage.py:1401(__init__)
        9    0.000    0.000    0.069    0.008 modelstorage.py:1406(__getitem__)
        9    0.000    0.000    0.069    0.008 modelstorage.py:1430(get)
        8    0.000    0.000    0.000    0.000 modelstorage.py:1437(__nonzero__)
        1    0.000    0.000    0.000    0.000
modelstorage.py:160(trigger_write_get_eligibles)
        1    0.000    0.000    0.000    0.000 modelstorage.py:177(trigger_write)
       10    0.000    0.000    0.001    0.000
modelstorage.py:373(_search_domain_active)
       17    0.000    0.000    0.009    0.001 modelstorage.py:440(browse)
        1    0.000    0.000    0.000    0.000 modelstorage.py:782(check_xml_record)
        1    0.000    0.000    0.000    0.000 modelstorage.py:878(validate)
        1    0.004    0.004    0.185    0.185 modelstorage.py:882(_validate)
    24/14    0.002    0.000    0.002    0.000 modelstorage.py:910(is_pyson)
        9    0.000    0.000    0.000    0.000 modelstorage.py:995(required_test)
        1    0.000    0.000    0.002    0.002
move.py:367(on_change_with_unit_digits)
        1    0.000    0.000    0.029    0.029
move.py:400(on_change_with_product_uom_category)
        1    0.000    0.000    0.031    0.031
move.py:424(on_change_with_unit_price_required)
        1    0.000    0.000    0.000    0.000 move.py:437(_get_shipment)
        1    0.000    0.000    0.026    0.026 move.py:448(get_shipment)
        1    0.000    0.000    0.000    0.000 move.py:457(_get_origin)
        1    0.000    0.000    0.020    0.020 move.py:462(get_origin)
        1    0.000    0.000    0.001    0.001 move.py:475(check_period_closed)
        1    0.000    0.000    0.031    0.031 move.py:561(_get_internal_quantity)
        1    0.000    0.000    0.234    0.234 move.py:650(write)
        2    0.000    0.000    0.000    0.000 move.py:663(<genexpr>)
        1    0.000    0.000    0.000    0.000 numeric.py:17(sql_format)
       98    0.000    0.000    0.000    0.000 operators.py:122(__init__)
      107    0.000    0.000    0.000    0.000 operators.py:126(_operands)
    92/90    0.000    0.000    0.009    0.000 operators.py:130(__str__)
       63    0.001    0.000    0.001    0.000 operators.py:142(_operands)
    51/33    0.000    0.000    0.009    0.000 operators.py:146(__str__)
       83    0.000    0.000    0.000    0.000 operators.py:199(_operands)
       52    0.000    0.000    0.004    0.000 operators.py:207(__str__)
       16    0.000    0.000    0.002    0.000 operators.py:219(__str__)
   177/36    0.001    0.000    0.015    0.000 operators.py:55(params)
   187/36    0.009    0.000    0.014    0.000 operators.py:58(convert)
  202/180    0.003    0.000    0.009    0.000 operators.py:72(_format)
       28    0.000    0.000    0.000    0.000 operators.py:80(<genexpr>)
       12    0.000    0.000    0.000    0.000 operators.py:90(__and__)
      196    0.001    0.000    0.001    0.000 pool.py:155(get)
        1    0.000    0.000    0.000    0.000 pool.py:186(object_name_list)
      139    0.001    0.000    0.001    0.000 pool.py:51(__new__)
      139    0.003    0.000    0.003    0.000 pool.py:65(__init__)
        1    0.000    0.000    0.017    0.017
product.py:107(on_change_with_default_uom_category)
    111/5    0.001    0.000    0.046    0.009 product.py:157(__getattr__)
        1    0.000    0.000    0.015    0.015 product.py:179(get_default_uom)
        1    0.000    0.000    0.000    0.000 product.py:190(search_type)
        1    0.000    0.000    0.002    0.002 product.py:209(search_domain)
      3/1    0.000    0.000    0.000    0.000 product.py:211(convert_domain)
        0    0.000             0.000          profile:0(profiler)
        1    0.000    0.000    0.235    0.235 profile:0(write_move(move, 1))
        8    0.000    0.000    0.000    0.000 pyson.py:100(__init__)
       16    0.000    0.000    0.069    0.004 pyson.py:104(_object_hook)
        9    0.000    0.000    0.000    0.000 pyson.py:119(pyson)
        9    0.000    0.000    0.069    0.008 pyson.py:132(eval)
        2    0.000    0.000    0.000    0.000 pyson.py:167(pyson)
        2    0.000    0.000    0.000    0.000 pyson.py:176(eval)
        1    0.000    0.000    0.000    0.000 pyson.py:338(pyson)
        1    0.000    0.000    0.000    0.000 pyson.py:352(eval)
        1    0.000    0.000    0.000    0.000 pyson.py:376(pyson)
        1    0.000    0.000    0.000    0.000 pyson.py:390(eval)
        1    0.000    0.000    0.000    0.000 pyson.py:417(pyson)
        1    0.000    0.000    0.000    0.000 pyson.py:427(eval)
       14    0.000    0.000    0.000    0.000 pyson.py:85(default)
        2    0.000    0.000    0.001    0.001 reference.py:39(get)
       31    0.001    0.000    0.002    0.000 rule.py:157(domain_get)
     1402    0.004    0.000    0.004    0.000 singleton.py:13(__call__)
        1    0.000    0.000    0.000    0.000 stock.py:140(_get_origin)
        1    0.000    0.000    0.000    0.000 stock.py:190(_get_origin)
        1    0.000    0.000    0.000    0.000 stock.py:68(check_lot)
        1    0.001    0.001    0.002    0.002 stock.py:77(validate)
        1    0.000    0.000    0.235    0.235 test_performance.py:127(write_move)
      239    0.002    0.000    0.002    0.000 threading.py:1153(currentThread)
       73    0.000    0.000    0.000    0.000 transaction.py:106(set_context)
       29    0.001    0.000    0.001    0.000 transaction.py:120(set_user)
       24    0.001    0.000    0.001    0.000 transaction.py:128(set_cursor)
        6    0.000    0.000    0.009    0.002 transaction.py:140(language)
        6    0.000    0.000    0.009    0.002 transaction.py:142(get_language)
      126    0.000    0.000    0.000    0.000 transaction.py:27(__init__)
      126    0.000    0.000    0.003    0.000 transaction.py:30(__enter__)
      126    0.001    0.000    0.001    0.000 transaction.py:33(__exit__)
        2    0.000    0.000    0.023    0.012 translation.py:381(get_ids)
        7    0.000    0.000    0.001    0.000 translation.py:606(get_source)
        2    0.001    0.000    0.017    0.008 translation.py:638(get_sources)
        1    0.000    0.000    0.000    0.000 trigger.py:130(get_triggers)
        1    0.000    0.000    0.000    0.000 uom.py:134(round)
        2    0.000    0.000    0.002    0.001 uom.py:177(accurate_field)
        1    0.000    0.000    0.011    0.011 uom.py:197(compute_qty)
        2    0.000    0.000    0.001    0.001 warnings.py:24(_show_warning)
        2    0.000    0.000    0.001    0.001 warnings.py:36(formatwarning)




With patch:

         13545 function calls (11873 primitive calls) in 0.109 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 :0(__import__)
       12    0.001    0.000    0.001    0.000 :0(__new__)
        1    0.000    0.000    0.000    0.000 :0(abs)
       24    0.000    0.000    0.000    0.000 :0(all)
        1    0.000    0.000    0.000    0.000 :0(any)
      238    0.002    0.000    0.002    0.000 :0(append)
        2    0.000    0.000    0.000    0.000 :0(clear)
       98    0.000    0.000    0.000    0.000 :0(copy)
       10    0.000    0.000    0.000    0.000 :0(decode)
        2    0.000    0.000    0.000    0.000 :0(end)
       13    0.000    0.000    0.002    0.000 :0(execute)
      346    0.002    0.000    0.002    0.000 :0(extend)
        8    0.000    0.000    0.000    0.000 :0(fetchall)
        1    0.000    0.000    0.000    0.000 :0(fetchmany)
        3    0.000    0.000    0.000    0.000 :0(fetchone)
        1    0.000    0.000    0.002    0.002 :0(filter)
       10    0.000    0.000    0.000    0.000 :0(format)
        9    0.000    0.000    0.000    0.000 :0(fromkeys)
      542    0.000    0.000    0.000    0.000 :0(get)
       37    0.000    0.000    0.000    0.000 :0(get_ident)
  609/338    0.003    0.000    0.045    0.000 :0(getattr)
        2    0.000    0.000    0.000    0.000 :0(globals)
       19    0.000    0.000    0.000    0.000 :0(group)
      582    0.002    0.000    0.002    0.000 :0(hasattr)
       10    0.001    0.000    0.001    0.000 :0(index)
      874    0.003    0.000    0.004    0.000 :0(isinstance)
        1    0.000    0.000    0.000    0.000 :0(isoformat)
       86    0.000    0.000    0.000    0.000 :0(items)
      179    0.000    0.000    0.000    0.000 :0(iteritems)
        1    0.000    0.000    0.000    0.000 :0(itervalues)
    49/48    0.000    0.000    0.000    0.000 :0(join)
       47    0.000    0.000    0.000    0.000 :0(keys)
      457    0.001    0.000    0.001    0.000 :0(len)
    74/72    0.000    0.000    0.012    0.000 :0(map)
       12    0.000    0.000    0.000    0.000 :0(match)
       12    0.000    0.000    0.000    0.000 :0(max)
        1    0.000    0.000    0.000    0.000 :0(min)
        1    0.000    0.000    0.000    0.000 :0(now)
      147    0.000    0.000    0.000    0.000 :0(pop)
       25    0.000    0.000    0.000    0.000 :0(range)
       38    0.001    0.000    0.001    0.000 :0(repr)
        1    0.000    0.000    0.000    0.000 :0(round)
        4    0.000    0.000    0.000    0.000 :0(rstrip)
       81    0.000    0.000    0.000    0.000 :0(setattr)
      111    0.001    0.000    0.001    0.000 :0(setdefault)
        1    0.001    0.001    0.001    0.001 :0(setprofile)
       11    0.000    0.000    0.000    0.000 :0(sort)
       45    0.000    0.000    0.000    0.000 :0(split)
        1    0.000    0.000    0.000    0.000 :0(startswith)
        5    0.000    0.000    0.000    0.000 :0(strip)
        1    0.000    0.000    0.000    0.000 :0(today)
       74    0.003    0.000    0.016    0.000 :0(update)
        1    0.000    0.000    0.000    0.000 :0(upper)
       10    0.000    0.000    0.000    0.000 :0(values)
       11    0.000    0.000    0.000    0.000 :0(warn)
        1    0.000    0.000    0.000    0.000 :0(write)
        2    0.000    0.000    0.000    0.000 :0(zip)
        1    0.000    0.000    0.108    0.108 <string>:1(<module>)
        5    0.000    0.000    0.000    0.000 <string>:8(__new__)
        1    0.000    0.000    0.000    0.000 __init__.py:10(get)
        1    0.000    0.000    0.000    0.000 __init__.py:1002(params)
        1    0.000    0.000    0.000    0.000 __init__.py:1014(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:1019(__str__)
        1    0.000    0.000    0.000    0.000 __init__.py:1022(params)
       10    0.000    0.000    0.000    0.000 __init__.py:119(__enter__)
       10    0.000    0.000    0.000    0.000 __init__.py:126(__exit__)
      155    0.001    0.000    0.004    0.000 __init__.py:132(get)
        1    0.000    0.000    0.000    0.000 __init__.py:138(set)
        9    0.000    0.000    0.001    0.000 __init__.py:143(alias_factory)
       30    0.000    0.000    0.015    0.000 __init__.py:156(__iter__)
      155    0.000    0.000    0.004    0.000 __init__.py:164(alias)
       18    0.000    0.000    0.000    0.000 __init__.py:168(__getattr__)
        9    0.000    0.000    0.000    0.000 __init__.py:175(select)
        9    0.000    0.000    0.000    0.000 __init__.py:185(__init__)
       20    0.000    0.000    0.000    0.000 __init__.py:194(order_by)
        9    0.000    0.000    0.000    0.000 __init__.py:198(order_by)
        2    0.000    0.000    0.000    0.000 __init__.py:203(<genexpr>)
        9    0.000    0.000    0.000    0.000 __init__.py:206(_order_by_str)
       10    0.000    0.000    0.000    0.000 __init__.py:213(limit)
        9    0.000    0.000    0.000    0.000 __init__.py:217(limit)
        9    0.000    0.000    0.000    0.000 __init__.py:223(_limit_str)
       17    0.000    0.000    0.000    0.000 __init__.py:234(offset)
        9    0.000    0.000    0.000    0.000 __init__.py:238(offset)
        9    0.000    0.000    0.000    0.000 __init__.py:244(_offset_str)
        9    0.000    0.000    0.000    0.000 __init__.py:256(__init__)
       27    0.000    0.000    0.000    0.000 __init__.py:272(columns)
        9    0.000    0.000    0.000    0.000 __init__.py:276(columns)
      137    0.000    0.000    0.000    0.000 __init__.py:278(<genexpr>)
       36    0.000    0.000    0.000    0.000 __init__.py:281(where)
        9    0.000    0.000    0.000    0.000 __init__.py:285(where)
       18    0.000    0.000    0.000    0.000 __init__.py:292(group_by)
        9    0.000    0.000    0.000    0.000 __init__.py:296(group_by)
       18    0.000    0.000    0.000    0.000 __init__.py:304(having)
        9    0.000    0.000    0.000    0.000 __init__.py:308(having)
        9    0.000    0.000    0.000    0.000 __init__.py:315(for_)
        9    0.000    0.000    0.000    0.000 __init__.py:319(for_)
      128    0.000    0.000    0.005    0.000 __init__.py:327(_format_column)
        9    0.000    0.000    0.010    0.001 __init__.py:334(__str__)
        9    0.001    0.000    0.005    0.001 __init__.py:357(params)
        1    0.000    0.000    0.000    0.000 __init__.py:390(__init__)
        7    0.000    0.000    0.000    0.000 __init__.py:400(table)
        1    0.000    0.000    0.000    0.000 __init__.py:404(table)
        2    0.000    0.000    0.000    0.000 __init__.py:409(columns)
        9    0.000    0.000    0.000    0.000 __init__.py:41(alias)
        1    0.000    0.000    0.000    0.000 __init__.py:413(columns)
        4    0.000    0.000    0.000    0.000 __init__.py:416(<genexpr>)
        4    0.000    0.000    0.000    0.000 __init__.py:417(<genexpr>)
        1    0.000    0.000    0.000    0.000 __init__.py:434(returning)
        3    0.000    0.000    0.000    0.000 __init__.py:440(_format)
        1    0.000    0.000    0.000    0.000 __init__.py:491(__init__)
        2    0.000    0.000    0.000    0.000 __init__.py:497(values)
        1    0.000    0.000    0.000    0.000 __init__.py:501(values)
        4    0.000    0.000    0.000    0.000 __init__.py:508(where)
        1    0.000    0.000    0.000    0.000 __init__.py:512(where)
        1    0.000    0.000    0.000    0.000 __init__.py:519(__str__)
        4    0.000    0.000    0.000    0.000 __init__.py:520(<genexpr>)
        4    0.000    0.000    0.000    0.000 __init__.py:532(<genexpr>)
        1    0.000    0.000    0.000    0.000 __init__.py:539(params)
       13    0.000    0.000    0.000    0.000 __init__.py:658(__init__)
       11    0.000    0.000    0.000    0.000 __init__.py:662(__str__)
        9    0.000    0.000    0.000    0.000 __init__.py:665(params)
        1    0.000    0.000    0.000    0.000 __init__.py:673(update)
        1    0.000    0.000    0.000    0.000 __init__.py:74(__init__)
        9    0.000    0.000    0.000    0.000 __init__.py:768(select)
        9    0.000    0.000    0.002    0.000 __init__.py:771(__str__)
        9    0.001    0.000    0.002    0.000 __init__.py:772(format)
        9    0.000    0.000    0.000    0.000 __init__.py:783(params)
       31    0.001    0.000    0.001    0.000 __init__.py:81(param)
       11    0.001    0.000    0.001    0.000 __init__.py:892(in_)
      127    0.000    0.000    0.001    0.000 __init__.py:904(as_)
        1    0.000    0.000    0.000    0.000 __init__.py:907(cast)
       37    0.000    0.000    0.001    0.000 __init__.py:93(get)
      145    0.000    0.000    0.000    0.000 __init__.py:941(__init__)
        6    0.000    0.000    0.000    0.000 __init__.py:946(table)
      146    0.001    0.000    0.004    0.000 __init__.py:954(__str__)
      143    0.001    0.000    0.001    0.000 __init__.py:966(params)
      127    0.001    0.000    0.001    0.000 __init__.py:974(__init__)
      127    0.001    0.000    0.001    0.000 __init__.py:979(__str__)
      127    0.000    0.000    0.000    0.000 __init__.py:982(params)
        1    0.000    0.000    0.000    0.000 __init__.py:990(__init__)
        1    0.000    0.000    0.000    0.000 __init__.py:995(__str__)
       85    0.002    0.000    0.003    0.000 _abcoll.py:526(update)
      255    0.001    0.000    0.001    0.000 _weakrefset.py:68(__contains__)
       85    0.000    0.000    0.001    0.000 abc.py:128(__instancecheck__)
       85    0.001    0.000    0.001    0.000 abc.py:148(__subclasscheck__)
        2    0.000    0.000    0.000    0.000 cache.py:13(freeze)
       85    0.000    0.000    0.007    0.000 cache.py:135(__init__)
       24    0.000    0.000    0.000    0.000 cache.py:141(__setitem__)
      109    0.000    0.000    0.000    0.000 cache.py:154(_check_size_limit)
        2    0.000    0.000    0.000    0.000 cache.py:17(<genexpr>)
        2    0.000    0.000    0.000    0.000 cache.py:39(_key)
        2    0.000    0.000    0.000    0.000 cache.py:44(get)
        1    0.000    0.000    0.001    0.001 char.py:20(__init__)
        1    0.000    0.000    0.000    0.000 char.py:44(_set_autocomplete)
        1    0.000    0.000    0.000    0.000 char.py:50(_get_size)
        1    0.001    0.001    0.001    0.001 char.py:53(_set_size)
        1    0.000    0.000    0.000    0.000 char.py:70(sql_type)
        1    0.000    0.000    0.000    0.000 char.py:9(autocomplete_validate)
        2    0.000    0.000    0.000    0.000 collections.py:132(pop)
       85    0.003    0.000    0.007    0.000 collections.py:38(__init__)
       24    0.000    0.000    0.000    0.000 collections.py:54(__setitem__)
        2    0.000    0.000    0.000    0.000 collections.py:64(__delitem__)
        1    0.000    0.000    0.000    0.000 collections.py:91(clear)
        2    0.000    0.000    0.000    0.000 conditionals.py:40(_format)
        1    0.000    0.000    0.000    0.000 conditionals.py:89(__init__)
        1    0.000    0.000    0.000    0.000 conditionals.py:92(__str__)
        1    0.000    0.000    0.000    0.000 conditionals.py:96(params)
        2    0.000    0.000    0.000    0.000 config.py:146(__getitem__)
        2    0.000    0.000    0.000    0.000 configuration.py:20(get_language)
       11    0.000    0.000    0.000    0.000 contextlib.py:12(__init__)
       11    0.000    0.000    0.003    0.000 contextlib.py:15(__enter__)
       11    0.000    0.000    0.000    0.000 contextlib.py:21(__exit__)
       11    0.001    0.000    0.001    0.000 contextlib.py:82(helper)
       22    0.001    0.000    0.003    0.000 contextlib.py:88(nested)
       38    0.000    0.000    0.007    0.000 database.py:110(get_cache)
        1    0.000    0.000    0.000    0.000 database.py:115(now)
        7    0.000    0.000    0.000    0.000 database.py:305(__build_dict)
      125    0.000    0.000    0.000    0.000 database.py:306(<genexpr>)
        1    0.000    0.000    0.000    0.000 database.py:316(dictfetchmany)
        7    0.000    0.000    0.000    0.000 database.py:320(dictfetchall)
       13    0.000    0.000    0.000    0.000 database.py:335(__getattr__)
       13    0.000    0.000    0.002    0.000 database.py:340(execute)
        1    0.000    0.000    0.000    0.000 database.py:387(has_constraint)
        3    0.000    0.000    0.001    0.000 database.py:390(<lambda>)
        1    0.000    0.000    0.000    0.000 database.py:392(<lambda>)
       10    0.001    0.000    0.001    0.000 dbapi2.py:64(convert_timestamp)
        1    0.000    0.000    0.001    0.001 decimal.py:1640(_fix)
        1    0.000    0.000    0.001    0.001 decimal.py:2422(quantize)
        1    0.000    0.000    0.000    0.000 decimal.py:3724(_dec_from_triple)
        1    0.000    0.000    0.000    0.000 decimal.py:3782(__init__)
        2    0.000    0.000    0.000    0.000 decimal.py:3895(Etiny)
        1    0.000    0.000    0.000    0.000 decimal.py:3899(Etop)
        1    0.000    0.000    0.000    0.000 decimal.py:441(getcontext)
        6    0.001    0.000    0.002    0.000 decimal.py:515(__new__)
        2    0.000    0.000    0.000    0.000 decimal.py:5835(_convert_other)
        2    0.000    0.000    0.000    0.000 decimal.py:700(_isnan)
        1    0.000    0.000    0.000    0.000 decimal.py:728(_check_nans)
        4    0.000    0.000    0.000    0.000 decimal.py:793(__nonzero__)
        1    0.000    0.000    0.000    0.000 decimal.py:800(_cmp)
        1    0.000    0.000    0.000    0.000 decimal.py:872(__ne__)
        1    0.000    0.000    0.000    0.000 decimal.py:999(__str__)
        1    0.000    0.000    0.000    0.000 decoder.py:303(__init__)
        1    0.000    0.000    0.021    0.021 decoder.py:360(decode)
        1    0.000    0.000    0.021    0.021 decoder.py:371(raw_decode)
        1    0.000    0.000    0.000    0.000 encoder.py:101(__init__)
        1    0.000    0.000    0.000    0.000 encoder.py:186(encode)
        1    0.000    0.000    0.000    0.000 encoder.py:212(iterencode)
        1    0.000    0.000    0.000    0.000 field.py:14(domain_validate)
        1    0.000    0.000    0.000    0.000 field.py:147(_set_domain)
        4    0.000    0.000    0.000    0.000 field.py:153(_get_states)
        1    0.000    0.000    0.000    0.000 field.py:156(_set_states)
        1    0.000    0.000    0.000    0.000 field.py:165(_set_on_change)
        1    0.000    0.000    0.000    0.000 field.py:17(test_domain)
        1    0.000    0.000    0.000    0.000 field.py:173(_set_on_change_with)
       39    0.000    0.000    0.001    0.000 field.py:179(_get_depends)
        1    0.000    0.000    0.000    0.000 field.py:182(_set_depends)
        1    0.000    0.000    0.000    0.000 field.py:191(_set_context)
   691/36    0.005    0.000    0.094    0.003 field.py:197(__get__)
        1    0.000    0.000    0.000    0.000 field.py:203(__set__)
        1    0.000    0.000    0.000    0.000 field.py:209(sql_format)
        1    0.000    0.000    0.000    0.000 field.py:216(_domain_value)
        1    0.000    0.000    0.000    0.000 field.py:224(_domain_add_null)
        1    0.000    0.000    0.000    0.000 field.py:234(convert_domain)
        1    0.000    0.000    0.000    0.000 field.py:248(convert_order)
        1    0.000    0.000    0.000    0.000 field.py:36(states_validate)
        1    0.000    0.000    0.000    0.000 field.py:48(on_change_validate)
        1    0.000    0.000    0.000    0.000 field.py:53(on_change_with_validate)
        1    0.000    0.000    0.000    0.000 field.py:58(depends_validate)
        1    0.000    0.000    0.000    0.000 field.py:62(context_validate)
        1    0.000    0.000    0.000    0.000 field.py:66(size_validate)
        1    0.000    0.000    0.000    0.000 field.py:92(__init__)
        8    0.000    0.000    0.000    0.000 float.py:44(_get_digits)
      104    0.001    0.000    0.002    0.000 function.py:49(__getattr__)
        2    0.000    0.000    0.039    0.019 function.py:68(get)
        2    0.000    0.000    0.039    0.019 function.py:76(call)
        4    0.000    0.000    0.038    0.009 function.py:81(<genexpr>)
        4    0.000    0.000    0.039    0.010 function.py:87(<genexpr>)
        4    0.000    0.000    0.000    0.000 functions.py:55(__init__)
        2    0.000    0.000    0.000    0.000 functions.py:58(_format)
        2    0.000    0.000    0.000    0.000 functions.py:65(__str__)
      3/2    0.000    0.000    0.000    0.000 functions.py:72(params)
        1    0.000    0.000    0.000    0.000 functions.py:91(__str__)
        2    0.000    0.000    0.000    0.000 inspect.py:142(isfunction)
        2    0.000    0.000    0.000    0.000 inspect.py:209(iscode)
        2    0.000    0.000    0.000    0.000 inspect.py:67(ismethod)
        2    0.000    0.000    0.000    0.000 inspect.py:743(getargs)
        2    0.000    0.000    0.000    0.000 inspect.py:803(getargspec)
        1    0.000    0.000    0.000    0.000 linecache.py:13(getline)
        1    0.000    0.000    0.000    0.000 linecache.py:33(getlines)
       34    0.003    0.000    0.003    0.000 many2one.py:66(get_target)
       11    0.001    0.000    0.002    0.000 misc.py:327(reduce_ids)
       11    0.000    0.000    0.000    0.000 misc.py:333(<genexpr>)
        1    0.000    0.000    0.000    0.000 misc.py:416(reduce_domain)
        1    0.000    0.000    0.000    0.000 model.py:354(pre_validate)
       37    0.000    0.000    0.002    0.000 model.py:357(__init__)
      687    0.002    0.000    0.002    0.000 model.py:378(__getattr__)
  262/261    0.003    0.000    0.003    0.000 model.py:386(__setattr__)
        3    0.000    0.000    0.000    0.000 model.py:400(__int__)
        4    0.000    0.000    0.000    0.000 model.py:443(__nonzero__)
       10    0.000    0.000    0.000    0.000 model.py:513(check)
       18    0.000    0.000    0.001    0.000 model.py:658(check)
      230    0.000    0.000    0.000    0.000 model.py:668(<genexpr>)
        1    0.000    0.000    0.000    0.000 modelsql.py:1005(search_domain)
        2    0.000    0.000    0.000    0.000 modelsql.py:1020(is_leaf)
      2/1    0.000    0.000    0.000    0.000 modelsql.py:1026(convert)
        2    0.000    0.000    0.000    0.000 modelsql.py:1039(<genexpr>)
        1    0.001    0.001    0.001    0.001 modelsql.py:1050(_update_mptt)
        1    0.000    0.000    0.002    0.002 modelsql.py:1159(validate)
       24    0.000    0.000    0.000    0.000 modelsql.py:185(table_query)
        1    0.000    0.000    0.000    0.000 modelsql.py:230(__insert_history)
        1    0.000    0.000    0.000    0.000 modelsql.py:265(__check_timestamp)
      9/5    0.009    0.001    0.057    0.011 modelsql.py:406(read)
       13    0.000    0.000    0.000    0.000 modelsql.py:49(__table__)
        1    0.000    0.000    0.050    0.050 modelsql.py:631(write)
        1    0.000    0.000    0.002    0.002 modelsql.py:861(search)
        2    0.000    0.000    0.000    0.000 modelsql.py:885(<genexpr>)
        1    0.000    0.000    0.000    0.000 modelsql.py:894(convert_from)
        1    0.000    0.000    0.000    0.000 modelstorage.py:1005(required_test)
        1    0.000    0.000    0.001    0.001 modelstorage.py:1056(digits_test)
        9    0.001    0.000    0.002    0.000 modelstorage.py:113(read)
       37    0.003    0.000    0.014    0.000 modelstorage.py:1174(__init__)
      291    0.002    0.000    0.002    0.000 modelstorage.py:1195(_cache)
   687/32    0.013    0.000    0.092    0.003 modelstorage.py:1202(__getattr__)
        8    0.000    0.000    0.000    0.000 modelstorage.py:1239(<genexpr>)
      222    0.003    0.000    0.011    0.000 modelstorage.py:1244(not_cached)
      209    0.001    0.000    0.002    0.000 modelstorage.py:1249(to_load)
        9    0.000    0.000    0.001    0.000 modelstorage.py:1270(filter_)
       55    0.004    0.000    0.023    0.000 modelstorage.py:1278(instantiate)
        1    0.000    0.000    0.001    0.001 modelstorage.py:129(write)
        1    0.000    0.000    0.000    0.000 modelstorage.py:1356(_save_values)
        1    0.000    0.000    0.108    0.108 modelstorage.py:1387(save)
        1    0.000    0.000    0.000    0.000 modelstorage.py:1411(__init__)
        1    0.000    0.000    0.021    0.021 modelstorage.py:1416(__getitem__)
        1    0.000    0.000    0.021    0.021 modelstorage.py:1440(get)
        1    0.000    0.000    0.000    0.000 modelstorage.py:1447(__nonzero__)
        1    0.000    0.000    0.000    0.000
modelstorage.py:161(trigger_write_get_eligibles)
        1    0.000    0.000    0.000    0.000 modelstorage.py:178(trigger_write)
        1    0.000    0.000    0.000    0.000
modelstorage.py:374(_search_domain_active)
        4    0.000    0.000    0.001    0.000 modelstorage.py:441(browse)
        1    0.000    0.000    0.001    0.001 modelstorage.py:783(check_xml_record)
        1    0.000    0.000    0.000    0.000 modelstorage.py:879(validate)
        1    0.001    0.001    0.046    0.046 modelstorage.py:883(_validate)
        2    0.000    0.000    0.000    0.000 modelstorage.py:911(is_pyson)
       39    0.001    0.000    0.002    0.000 modelstorage.py:933(<lambda>)
        1    0.000    0.000    0.020    0.020
move.py:424(on_change_with_unit_price_required)
        1    0.000    0.000    0.002    0.002 move.py:475(check_period_closed)
        1    0.000    0.000    0.037    0.037 move.py:561(_get_internal_quantity)
        1    0.001    0.001    0.107    0.107 move.py:650(write)
        2    0.000    0.000    0.000    0.000 move.py:663(<genexpr>)
        1    0.000    0.000    0.000    0.000 numeric.py:17(sql_format)
       12    0.000    0.000    0.000    0.000 operators.py:122(__init__)
       13    0.000    0.000    0.000    0.000 operators.py:126(_operands)
       13    0.000    0.000    0.005    0.000 operators.py:130(__str__)
       13    0.000    0.000    0.000    0.000 operators.py:142(_operands)
       13    0.000    0.000    0.005    0.000 operators.py:146(__str__)
        1    0.000    0.000    0.000    0.000 operators.py:199(_operands)
        1    0.000    0.000    0.000    0.000 operators.py:207(__str__)
    26/13    0.001    0.000    0.001    0.000 operators.py:55(params)
    26/13    0.000    0.000    0.001    0.000 operators.py:58(convert)
       26    0.001    0.000    0.005    0.000 operators.py:72(_format)
       90    0.001    0.000    0.001    0.000 pool.py:155(get)
        1    0.000    0.000    0.000    0.000 pool.py:186(object_name_list)
       70    0.001    0.000    0.001    0.000 pool.py:51(__new__)
       70    0.000    0.000    0.000    0.000 pool.py:65(__init__)
     56/1    0.000    0.000    0.022    0.022 product.py:157(__getattr__)
        1    0.000    0.000    0.018    0.018 product.py:179(get_default_uom)
        0    0.000             0.000          profile:0(profiler)
        1    0.000    0.000    0.109    0.109 profile:0(write_move(move, 1))
        1    0.000    0.000    0.000    0.000 pyson.py:100(__init__)
        2    0.000    0.000    0.021    0.011 pyson.py:104(_object_hook)
        1    0.000    0.000    0.000    0.000 pyson.py:119(pyson)
        1    0.000    0.000    0.021    0.021 pyson.py:132(eval)
        1    0.000    0.000    0.000    0.000 pyson.py:167(pyson)
        1    0.000    0.000    0.000    0.000 pyson.py:176(eval)
        2    0.000    0.000    0.000    0.000 pyson.py:85(default)
       11    0.000    0.000    0.000    0.000 rule.py:157(domain_get)
      653    0.004    0.000    0.004    0.000 singleton.py:13(__call__)
        1    0.000    0.000    0.000    0.000 stock.py:68(check_lot)
        1    0.000    0.000    0.002    0.002 stock.py:77(validate)
        1    0.000    0.000    0.108    0.108 test_performance.py:127(write_move)
       37    0.001    0.000    0.001    0.000 threading.py:1153(currentThread)
       46    0.000    0.000    0.001    0.000 transaction.py:106(set_context)
       12    0.000    0.000    0.001    0.000 transaction.py:120(set_user)
       11    0.000    0.000    0.000    0.000 transaction.py:128(set_cursor)
        1    0.000    0.000    0.000    0.000 transaction.py:140(language)
        1    0.000    0.000    0.000    0.000 transaction.py:142(get_language)
       69    0.002    0.000    0.002    0.000 transaction.py:27(__init__)
       69    0.001    0.000    0.002    0.000 transaction.py:30(__enter__)
       69    0.000    0.000    0.000    0.000 transaction.py:33(__exit__)
        1    0.000    0.000    0.000    0.000 trigger.py:130(get_triggers)
        1    0.000    0.000    0.000    0.000 uom.py:134(round)
        2    0.000    0.000    0.002    0.001 uom.py:177(accurate_field)
        1    0.000    0.000    0.014    0.014 uom.py:197(compute_qty)
        1    0.000    0.000    0.000    0.000 warnings.py:24(_show_warning)
        1    0.000    0.000    0.000    0.000 warnings.py:36(formatwarning)
History
Date User Action Args
2013-12-23 20:48:07cedsetstatus: testing -> resolved
2013-12-23 20:47:53roundup-botsetnosy: + roundup-bot
messages: + msg15033
2013-12-16 21:15:33ohuismansetnosy: + ohuisman
2013-12-16 17:31:21cedsetstatus: chatting -> testing
assignedto: ced
component: + trytond
nosy: + ced
2013-10-28 16:28:29pokolisetnosy: + pokoli
2013-10-27 23:19:39giedriussetfiles: + test_performance.py
status: unread -> chatting
messages: + msg14457
2013-10-27 15:02:47giedriuscreate

Showing 10 items. Show all history (warning: this could be VERY long)