Skip to content

Commit 4aa8b58

Browse files
committed
Separating out utility functions into their own files.
- Legacy-Id: 168
1 parent 959274e commit 4aa8b58

3 files changed

Lines changed: 81 additions & 82 deletions

File tree

ietf/utils/__init__.py

Lines changed: 3 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,6 @@
11
from listop import orl, flattenl
22
from log import log
3+
from cache_foreign_key import FKAsOneToOne
4+
from templated_form import makeTemplatedForm
35

4-
from django.utils.html import escape
5-
# look at snippets 59, 148, 99 for newforms helpers
6-
7-
8-
# Caching accessor for the reverse of a ForeignKey relatinoship
9-
# Started by axiak on #django
10-
class FKAsOneToOne(object):
11-
def __init__(self, field, reverse = False, query = None):
12-
self.field = field
13-
self.reverse = reverse
14-
self.query = query
15-
16-
def __get_attr(self, instance):
17-
if self.reverse:
18-
field_name = '%s_set' % self.field
19-
else:
20-
field_name = self.field
21-
return getattr(instance, field_name)
22-
23-
def __get__(self, instance, Model):
24-
if not hasattr(instance, '_field_values'):
25-
instance._field_values = {}
26-
try:
27-
return instance._field_values[self.field]
28-
except KeyError:
29-
pass
30-
31-
if self.reverse:
32-
value_set = self.__get_attr(instance).all()
33-
if self.query:
34-
value_set = value_set.filter(self.query)
35-
try:
36-
instance._field_values[self.field] = value_set[0]
37-
except IndexError:
38-
instance._field_values[self.field] = None
39-
else:
40-
instance._field_values[self.field] = self.__get_attr(instance)
41-
42-
return instance._field_values[self.field]
43-
44-
def __set__(self, instance, value):
45-
if self.reverse:
46-
# this is dangerous
47-
#other_instance = self.__get_attr(instance).all()[0]
48-
#setattr(other_instance, self.field, value)
49-
#other_instance.save()
50-
raise NotImplemented
51-
else:
52-
setattr(instance, self.field, value)
53-
54-
55-
def makeFormattingForm(template=None):
56-
"""Create a form class which formats its fields using the provided template
57-
58-
The template is provided with a dictionary containing the following keys, value
59-
pairs:
60-
61-
"label": field label, if any,
62-
"errors": list of errors, if any,
63-
"field": widget rendering for an unbound form / field value for a bound form,
64-
"help_text": field help text, if any
65-
66-
"""
67-
from django.template import loader
68-
import django.newforms as forms
69-
70-
class FormattingForm(forms.BaseForm):
71-
_template = template
72-
def __getitem__(self, name):
73-
"Returns a BoundField with the given name."
74-
#syslog.syslog("FormattingForm.__getitem__(%s)" % (name, ))
75-
try:
76-
field = self.fields[name]
77-
except KeyError:
78-
raise KeyError('Key %r not found in Form' % name)
79-
if not isinstance(field, forms.fields.Field):
80-
return field
81-
bf = forms.forms.BoundField(self, field, name)
82-
errors = [escape(error) for error in bf.errors]
83-
rendering = loader.render_to_string(self._template, { "errors": errors, "label": bf.label, "text": unicode(bf), "help_text": field.help_text, "field":field })
84-
return rendering
85-
return FormattingForm
6+
makeFormattingForm = makeTemplatedForm

ietf/utils/cache_foreign_key.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Caching accessor for the reverse of a ForeignKey relatinoship
2+
# Started by axiak on #django
3+
class FKAsOneToOne(object):
4+
def __init__(self, field, reverse = False, query = None):
5+
self.field = field
6+
self.reverse = reverse
7+
self.query = query
8+
9+
def __get_attr(self, instance):
10+
if self.reverse:
11+
field_name = '%s_set' % self.field
12+
else:
13+
field_name = self.field
14+
return getattr(instance, field_name)
15+
16+
def __get__(self, instance, Model):
17+
if not hasattr(instance, '_field_values'):
18+
instance._field_values = {}
19+
try:
20+
return instance._field_values[self.field]
21+
except KeyError:
22+
pass
23+
24+
if self.reverse:
25+
value_set = self.__get_attr(instance).all()
26+
if self.query:
27+
value_set = value_set.filter(self.query)
28+
try:
29+
instance._field_values[self.field] = value_set[0]
30+
except IndexError:
31+
instance._field_values[self.field] = None
32+
else:
33+
instance._field_values[self.field] = self.__get_attr(instance)
34+
35+
return instance._field_values[self.field]
36+
37+
def __set__(self, instance, value):
38+
if self.reverse:
39+
# this is dangerous
40+
#other_instance = self.__get_attr(instance).all()[0]
41+
#setattr(other_instance, self.field, value)
42+
#other_instance.save()
43+
raise NotImplemented
44+
else:
45+
setattr(instance, self.field, value)

ietf/utils/templated_form.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from django.utils.html import escape
2+
3+
def makeTemplatedForm(template=None):
4+
"""Create a form class which formats its fields using the provided template
5+
6+
The template is provided with a dictionary containing the following keys, value
7+
pairs:
8+
9+
"label": field label, if any,
10+
"errors": list of errors, if any,
11+
"field": widget rendering for an unbound form / field value for a bound form,
12+
"help_text": field help text, if any
13+
14+
"""
15+
from django.template import loader
16+
import django.newforms as forms
17+
18+
class TemplatedForm(forms.BaseForm):
19+
_template = template
20+
def __getitem__(self, name):
21+
"Returns a BoundField with the given name."
22+
#syslog.syslog("FormattingForm.__getitem__(%s)" % (name, ))
23+
try:
24+
field = self.fields[name]
25+
except KeyError:
26+
raise KeyError('Key %r not found in Form' % name)
27+
if not isinstance(field, forms.fields.Field):
28+
return field
29+
bf = forms.forms.BoundField(self, field, name)
30+
errors = [escape(error) for error in bf.errors]
31+
rendering = loader.render_to_string(self._template, { "errors": errors, "label": bf.label, "text": unicode(bf), "help_text": field.help_text, "field":field })
32+
return rendering
33+
return TemplatedForm

0 commit comments

Comments
 (0)