Merge lp:~openerp-dev/openobject-server/trunk-read_group-dates-formatting-reformatting-xmo into lp:openobject-server

Proposed by Xavier (Open ERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openobject-server/trunk-read_group-dates-formatting-reformatting-xmo
Merge into: lp:openobject-server
Prerequisite: lp:~openerp-dev/openobject-server/trunk-read_group-dates-formatting-xmo
Diff against target: 41 lines (+15/-13)
1 file modified
openerp/osv/orm.py (+15/-13)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/trunk-read_group-dates-formatting-reformatting-xmo
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+81877@code.launchpad.net

Description of the change

Some reformatting and refactoring (mostly variable extraction) of the datetime munging in read_group, to try and make the code clearer and more readable.

And stop doing string munging when we have perfectly good datetime objects to manipulate

To post a comment you must log in.

Unmerged revisions

3794. By Xavier (Open ERP)

[REM] redundant variable (maybe?): d[groupby] seems mostly redundant with grouping_value, especially as we're slicing stuff and only using year/month

3793. By Xavier (Open ERP)

[REF] introduce variables for improved naming, use datetime.datetime.replace instead of string munging

3792. By Xavier (Open ERP)

[REM] redundant value test

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py 2011-11-10 16:57:29 +0000
+++ openerp/osv/orm.py 2011-11-10 16:57:29 +0000
@@ -2463,23 +2463,25 @@
2463 data.sort(lambda x,y: cmp(data_ids.index(x['id']), data_ids.index(y['id'])))2463 data.sort(lambda x,y: cmp(data_ids.index(x['id']), data_ids.index(y['id'])))
24642464
2465 for d in data:2465 for d in data:
2466 group_data = alldata[d['id']]
2466 if groupby:2467 if groupby:
2467 d['__domain'] = [(groupby, '=', alldata[d['id']][groupby] or False)] + domain2468 grouping_value = group_data[groupby]
2469 d['__domain'] = [(groupby, '=', grouping_value or False)] + domain
2468 if not isinstance(groupby_list, (str, unicode)):2470 if not isinstance(groupby_list, (str, unicode)):
2469 if groupby or not context.get('group_by_no_leaf', False):2471 if groupby or not context.get('group_by_no_leaf', False):
2470 d['__context'] = {'group_by': groupby_list[1:]}2472 d['__context'] = {'group_by': groupby_list[1:]}
2471 if groupby and groupby in fget:2473
2472 if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):2474 if groupby in fget:
2473 dt = datetime.datetime.strptime(alldata[d['id']][groupby][:7], '%Y-%m')2475 if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):
2474 days = calendar.monthrange(dt.year, dt.month)[1]2476 dt = datetime.datetime.strptime(grouping_value, '%Y-%m')
24752477 _, month_length = calendar.monthrange(dt.year, dt.month)
2476 date_value = datetime.datetime.strptime(d[groupby][:10], '%Y-%m-%d')2478
2477 d[groupby] = babel.dates.format_date(2479 d[groupby] = babel.dates.format_date(
2478 date_value, format='MMMM yyyy', locale=context.get('lang', 'en_US'))2480 dt, format='MMMM yyyy', locale=context.get('lang', 'en_US'))
2479 d['__domain'] = [(groupby, '>=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-01', '%Y-%m-%d').strftime('%Y-%m-%d') or False),\2481 d['__domain'] = [(groupby, '>=', grouping_value and dt.replace(day=1).strftime('%Y-%m-%d') or False),
2480 (groupby, '<=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-' + str(days), '%Y-%m-%d').strftime('%Y-%m-%d') or False)] + domain2482 (groupby, '<=', grouping_value and dt.replace(day=month_length).strftime('%Y-%m-%d') or False)] + domain
2481 del alldata[d['id']][groupby]2483 del group_data[groupby]
2482 d.update(alldata[d['id']])2484 d.update(group_data)
2483 del d['id']2485 del d['id']
2484 return data2486 return data
24852487