11from datetime import timedelta
22from mongoengine .base import BaseField
3+ from mongoengine .fields import StringField , EmailField
34
45import os
56import datetime
@@ -18,7 +19,7 @@ class TimedeltaField(BaseField):
1819
1920 Looks to the outside world like a datatime.timedelta, but stores
2021 in the database as an integer (or float) number of seconds.
21-
22+
2223 """
2324 def validate (self , value ):
2425 if not isinstance (value , (timedelta , int , float )):
@@ -53,11 +54,11 @@ def total_seconds(value):
5354
5455
5556class LocalStorageFileField (BaseField ):
56-
57+
5758 proxy_class = FieldFile
5859
5960 def __init__ (self ,
60- db_alias = DEFAULT_CONNECTION_NAME ,
61+ db_alias = DEFAULT_CONNECTION_NAME ,
6162 name = None ,
6263 upload_to = '' ,
6364 storage = None ,
@@ -93,7 +94,7 @@ def __get__(self, instance, owner):
9394 file .instance = instance
9495 file .field = self
9596 file .storage = self .storage
96-
97+
9798 return instance ._data [self .name ]
9899
99100
@@ -122,11 +123,33 @@ def to_mongo(self, value):
122123 value .save (value .name , value )
123124 return value .path
124125
125- return value .name
126+ return value .name
126127
127128
128129 def to_python (self , value ):
129130 eu = self
130131 return eu .proxy_class (eu .owner_document , eu , value )
131132
132133
134+ class LowerStringField (StringField ):
135+ def __set__ (self , instance , value ):
136+ value = self .to_python (value )
137+ return super (LowerStringField , self ).__set__ (instance , value )
138+
139+ def to_python (self , value ):
140+ if value :
141+ value = value .lower ()
142+ return value
143+
144+ def prepare_query_value (self , op , value ):
145+ value = value .lower () if value else value
146+ return super (LowerStringField , self ).prepare_query_value (op , value )
147+
148+
149+ class LowerEmailField (LowerStringField ):
150+
151+ def validate (self , value ):
152+ if not EmailField .EMAIL_REGEX .match (value ):
153+ self .error ('Invalid Mail-address: %s' % value )
154+ super (LowerEmailField , self ).validate (value )
155+
0 commit comments