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
1=== modified file 'openerp/osv/orm.py'
2--- openerp/osv/orm.py 2011-11-10 16:57:29 +0000
3+++ openerp/osv/orm.py 2011-11-10 16:57:29 +0000
4@@ -2463,23 +2463,25 @@
5 data.sort(lambda x,y: cmp(data_ids.index(x['id']), data_ids.index(y['id'])))
6
7 for d in data:
8+ group_data = alldata[d['id']]
9 if groupby:
10- d['__domain'] = [(groupby, '=', alldata[d['id']][groupby] or False)] + domain
11+ grouping_value = group_data[groupby]
12+ d['__domain'] = [(groupby, '=', grouping_value or False)] + domain
13 if not isinstance(groupby_list, (str, unicode)):
14 if groupby or not context.get('group_by_no_leaf', False):
15 d['__context'] = {'group_by': groupby_list[1:]}
16- if groupby and groupby in fget:
17- if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):
18- dt = datetime.datetime.strptime(alldata[d['id']][groupby][:7], '%Y-%m')
19- days = calendar.monthrange(dt.year, dt.month)[1]
20-
21- date_value = datetime.datetime.strptime(d[groupby][:10], '%Y-%m-%d')
22- d[groupby] = babel.dates.format_date(
23- date_value, format='MMMM yyyy', locale=context.get('lang', 'en_US'))
24- 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),\
25- (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)] + domain
26- del alldata[d['id']][groupby]
27- d.update(alldata[d['id']])
28+
29+ if groupby in fget:
30+ if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):
31+ dt = datetime.datetime.strptime(grouping_value, '%Y-%m')
32+ _, month_length = calendar.monthrange(dt.year, dt.month)
33+
34+ d[groupby] = babel.dates.format_date(
35+ dt, format='MMMM yyyy', locale=context.get('lang', 'en_US'))
36+ d['__domain'] = [(groupby, '>=', grouping_value and dt.replace(day=1).strftime('%Y-%m-%d') or False),
37+ (groupby, '<=', grouping_value and dt.replace(day=month_length).strftime('%Y-%m-%d') or False)] + domain
38+ del group_data[groupby]
39+ d.update(group_data)
40 del d['id']
41 return data
42