1
1
from datetime import timedelta
2
2
from mongoengine .base import BaseField
3
+ from mongoengine .fields import StringField , EmailField
3
4
4
5
import os
5
6
import datetime
@@ -18,7 +19,7 @@ class TimedeltaField(BaseField):
18
19
19
20
Looks to the outside world like a datatime.timedelta, but stores
20
21
in the database as an integer (or float) number of seconds.
21
-
22
+
22
23
"""
23
24
def validate (self , value ):
24
25
if not isinstance (value , (timedelta , int , float )):
@@ -53,11 +54,11 @@ def total_seconds(value):
53
54
54
55
55
56
class LocalStorageFileField (BaseField ):
56
-
57
+
57
58
proxy_class = FieldFile
58
59
59
60
def __init__ (self ,
60
- db_alias = DEFAULT_CONNECTION_NAME ,
61
+ db_alias = DEFAULT_CONNECTION_NAME ,
61
62
name = None ,
62
63
upload_to = '' ,
63
64
storage = None ,
@@ -93,7 +94,7 @@ def __get__(self, instance, owner):
93
94
file .instance = instance
94
95
file .field = self
95
96
file .storage = self .storage
96
-
97
+
97
98
return instance ._data [self .name ]
98
99
99
100
@@ -122,11 +123,33 @@ def to_mongo(self, value):
122
123
value .save (value .name , value )
123
124
return value .path
124
125
125
- return value .name
126
+ return value .name
126
127
127
128
128
129
def to_python (self , value ):
129
130
eu = self
130
131
return eu .proxy_class (eu .owner_document , eu , value )
131
132
132
133
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