Skip to content

Commit cb34a60

Browse files
Small simplifications and optimizations.
Generators are faster than lists when they're just meant to be iterated on once.
1 parent a447c42 commit cb34a60

File tree

3 files changed

+8
-26
lines changed

3 files changed

+8
-26
lines changed

django_pandas/io.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@
33

44

55
def to_fields(qs, fieldnames):
6-
fields = []
76
for fieldname in fieldnames:
87
model = qs.model
98
for fieldname_part in fieldname.split('__'):
109
field = model._meta.get_field(fieldname_part)
1110
if field.get_internal_type() == 'ForeignKey':
1211
model = field.rel.to
13-
fields.append(field)
14-
return fields
12+
yield field
1513

1614

1715
def read_frame(qs, fieldnames=(), index_col=None, coerce_float=False,

django_pandas/managers.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ def to_timeseries(self, fieldnames=(), verbose=True,
135135
else:
136136
df = self.to_dataframe(fieldnames, verbose=verbose)
137137
assert values is not None, 'You must specify a values field'
138-
139138
assert pivot_columns is not None, 'You must specify pivot_columns'
140139

141140
if isinstance(pivot_columns, (tuple, list)):
@@ -186,11 +185,8 @@ def to_dataframe(self, fieldnames=(), verbose=True, index=None,
186185
187186
"""
188187

189-
df = read_frame(self, fieldnames=fieldnames, verbose=verbose,
190-
index_col=index,
191-
coerce_float=coerce_float)
192-
193-
return df
188+
return read_frame(self, fieldnames=fieldnames, verbose=verbose,
189+
index_col=index, coerce_float=coerce_float)
194190

195191

196192
class DataFrameManager(PassThroughManager):

django_pandas/utils.py

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,41 +36,29 @@ def inner(pk_list):
3636
for pk in pk_list]
3737
out_dict = cache.get_many(frozenset(cache_keys))
3838
try:
39-
out_list = [None if k is None else out_dict[k]
40-
for k in cache_keys]
39+
return [None if k is None else out_dict[k] for k in cache_keys]
4140
except KeyError:
4241
out_dict = {
4342
base_cache_key % obj.pk: force_text(obj)
4443
for obj in model.objects.filter(pk__in={pk for pk in pk_list
4544
if not isnan(pk)})}
4645
cache.set_many(out_dict)
47-
out_list = list(map(out_dict.get, cache_keys))
48-
return out_list
46+
return list(map(out_dict.get, cache_keys))
4947

5048
return inner
5149

5250

5351
def build_update_functions(fieldnames, fields):
54-
update_functions = []
55-
5652
for fieldname, field in zip(fieldnames, fields):
5753
if field.choices:
5854
choices = {k: force_text(v)
5955
for k, v in field.flatchoices}
60-
update_functions.append((fieldname,
61-
replace_from_choices(choices)))
56+
yield fieldname, replace_from_choices(choices)
6257

6358
elif field.get_internal_type() == 'ForeignKey':
64-
update_functions.append((fieldname, replace_pk(field.rel.to)))
65-
66-
return update_functions
59+
yield fieldname, replace_pk(field.rel.to)
6760

6861

6962
def update_with_verbose(df, fieldnames, fields):
70-
update_functions = build_update_functions(fieldnames, fields)
71-
72-
if not update_functions:
73-
return
74-
75-
for fieldname, function in update_functions:
63+
for fieldname, function in build_update_functions(fieldnames, fields):
7664
df[fieldname] = function(df[fieldname])

0 commit comments

Comments
 (0)