root / snf-astakos-app / astakos / im / messages.py @ 0f433ce2
History | View | Annotate | Download (17.1 kB)
1 |
# Copyright 2011-2012 GRNET S.A. All rights reserved.
|
---|---|
2 |
#
|
3 |
# Redistribution and use in source and binary forms, with or
|
4 |
# without modification, are permitted provided that the following
|
5 |
# conditions are met:
|
6 |
#
|
7 |
# 1. Redistributions of source code must retain the above
|
8 |
# copyright notice, this list of conditions and the following
|
9 |
# disclaimer.
|
10 |
#
|
11 |
# 2. Redistributions in binary form must reproduce the above
|
12 |
# copyright notice, this list of conditions and the following
|
13 |
# disclaimer in the documentation and/or other materials
|
14 |
# provided with the distribution.
|
15 |
#
|
16 |
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 |
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 |
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 |
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 |
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 |
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED
|
24 |
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 |
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN
|
26 |
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 |
# POSSIBILITY OF SUCH DAMAGE.
|
28 |
#
|
29 |
# The views and conclusions contained in the software and
|
30 |
# documentation are those of the authors and should not be
|
31 |
# interpreted as representing official policies, either expressed
|
32 |
# or implied, of GRNET S.A.
|
33 |
|
34 |
from django.conf import settings |
35 |
import astakos.im.settings as astakos_settings |
36 |
|
37 |
|
38 |
LOGGED_IN_WARNING = 'It seems that you are already logged in.'
|
39 |
ACCOUNT_ALREADY_VERIFIED = 'This account is already verified.'
|
40 |
ACCOUNT_ALREADY_MODERATED = 'This account is already moderated.'
|
41 |
ACCOUNT_ALREADY_ACTIVE = 'This account is already active.'
|
42 |
ACCOUNT_REJECTED = 'This account has been rejected.'
|
43 |
ACCOUNT_NOT_ACTIVE = 'User account is not active.'
|
44 |
ACCOUNT_NOT_MODERATED = 'User account is not moderated.'
|
45 |
ACCOUNT_NOT_VERIFIED = 'User account does not have a verified email address.'
|
46 |
ACCOUNT_RESEND_ACTIVATION = ( |
47 |
'It seems that an activation email has been sent to you, but you have '
|
48 |
'not followed the activation link. '
|
49 |
'<a href="%(send_activation_url)s">Resend activation email.</a>')
|
50 |
INACTIVE_ACCOUNT_CHANGE_EMAIL = ''.join(
|
51 |
[ACCOUNT_RESEND_ACTIVATION, |
52 |
' Or <a href="%(signup_url)s">Send activation to a new email.</a>'])
|
53 |
|
54 |
ACCOUNT_PENDING_ACTIVATION_HELP = ( |
55 |
'An activation email has been sent to you. Make sure you check your '
|
56 |
'spam folder, too.')
|
57 |
|
58 |
ACCOUNT_ACTIVATED = 'Congratulations. Your account has' + \
|
59 |
' been activated. You are now logged in.'
|
60 |
ACCOUNT_DEACTIVATED = 'Your account is inactive'
|
61 |
PASSWORD_RESET_DONE = ( |
62 |
'An email with details on how to change your password has been sent. '
|
63 |
'Please check your Inbox.')
|
64 |
PASSWORD_RESET_CONFIRM_DONE = ( |
65 |
'Your password has changed successfully. You '
|
66 |
'can now login using your new password.')
|
67 |
PASSWORD_CHANGED = 'Your new password was set successfully.'
|
68 |
|
69 |
ACCOUNT_RESEND_ACTIVATION = 'Resend activation email'
|
70 |
ACCOUNT_USER_ACTIVATION_PENDING = 'You have not followed the activation link'
|
71 |
|
72 |
ACCOUNT_UNKNOWN = 'There is no such account.'
|
73 |
TOKEN_UNKNOWN = 'There is no user matching this authentication token.'
|
74 |
TOKEN_UPDATED = 'Your authentication token has been updated successfully.'
|
75 |
|
76 |
PROFILE_UPDATED = 'Your profile has been updated successfully.'
|
77 |
FEEDBACK_SENT = ( |
78 |
'Thank you for contacting us. We will process your message carefully '
|
79 |
'and get back to you.')
|
80 |
EMAIL_CHANGED = 'The email of your account changed successfully.'
|
81 |
EMAIL_CHANGE_REGISTERED = ( |
82 |
'Your request for changing your email has been registered successfully. '
|
83 |
'A verification email will be sent to your new address.')
|
84 |
|
85 |
OBJECT_CREATED = 'The %(verbose_name)s was created successfully.'
|
86 |
USER_MEMBERSHIP_REJECTED = ( |
87 |
'Request by %s to join the project has been rejected.')
|
88 |
BILLING_ERROR = 'Service response status: %(status)d'
|
89 |
|
90 |
GENERIC_ERROR = ( |
91 |
'Hmm... It seems something bad has happened, and we don\'t know the '
|
92 |
'details right now. Please contact the administrators by email for '
|
93 |
'more details.')
|
94 |
|
95 |
MAX_INVITATION_NUMBER_REACHED = ( |
96 |
'You have reached the maximum amount of invitations for your account. '
|
97 |
'No invitations left.')
|
98 |
GROUP_MAX_PARTICIPANT_NUMBER_REACHED = ( |
99 |
'This Group reached its maximum number of members. No other member can '
|
100 |
'be added.')
|
101 |
PROJECT_MAX_PARTICIPANT_NUMBER_REACHED = ( |
102 |
'This Project reached its maximum number of members. No other member '
|
103 |
'can be added.')
|
104 |
NO_APPROVAL_TERMS = 'There are no terms of service to approve.'
|
105 |
PENDING_EMAIL_CHANGE_REQUEST = ( |
106 |
'It seems there is already a pending request for an email change. '
|
107 |
'Submitting a new request to change your email will cancel all previous '
|
108 |
'requests.')
|
109 |
OBJECT_CREATED_FAILED = 'The %(verbose_name)s creation failed: %(reason)s.'
|
110 |
GROUP_JOIN_FAILURE = 'Failed to join this Group.'
|
111 |
PROJECT_JOIN_FAILURE = 'Failed to join this Project.'
|
112 |
GROUPKIND_UNKNOWN = 'The kind of Project you specified does not exist.'
|
113 |
NOT_MEMBER = 'User is not a member of the Project.'
|
114 |
NOT_OWNER = 'User is not the Project\'s owner.'
|
115 |
OWNER_CANNOT_LEAVE_GROUP = ( |
116 |
'You are the owner of this Project. Owners can not leave their Projects.')
|
117 |
|
118 |
# Field validation fields
|
119 |
REQUIRED_FIELD = 'This field is required.'
|
120 |
EMAIL_USED = 'There is already an account with this email address.'
|
121 |
SHIBBOLETH_EMAIL_USED = ( |
122 |
'This email is already associated with another shibboleth account.')
|
123 |
SHIBBOLETH_INACTIVE_ACC = ( |
124 |
'This email is already associated with an account that is not '
|
125 |
'yet activated. '
|
126 |
'If that is your account, you need to activate it before being able to '
|
127 |
'associate it with this shibboleth account.')
|
128 |
SHIBBOLETH_MISSING_EPPN = ( |
129 |
'Your request is missing a unique ' +
|
130 |
'token. This means your academic ' +
|
131 |
'institution does not yet allow its users to log ' +
|
132 |
'into %(domain)s with their academic ' +
|
133 |
'account. Please contact %(contact_email)s' +
|
134 |
' for more information.')
|
135 |
SHIBBOLETH_MISSING_NAME = 'This request is missing the user name.'
|
136 |
|
137 |
SIGN_TERMS = "Please, you need to 'Agree with the terms' before proceeding."
|
138 |
CAPTCHA_VALIDATION_ERR = ( |
139 |
"You have not entered the correct words. Please try again."
|
140 |
) |
141 |
SUSPENDED_LOCAL_ACC = ( |
142 |
"This account does not have a local password. "
|
143 |
"Please try logging in using an external login provider (e.g.: twitter)"
|
144 |
) |
145 |
EMAIL_UNKNOWN = ( |
146 |
"This email address doesn't have an associated user account. "
|
147 |
"Please make sure you have registered, before proceeding."
|
148 |
) |
149 |
INVITATION_EMAIL_EXISTS = "An invitation has already been sent to this email."
|
150 |
INVITATION_CONSUMED_ERR = "The invitation has already been used."
|
151 |
UNKNOWN_USERS = "Unknown users: %s"
|
152 |
UNIQUE_EMAIL_IS_ACTIVE_CONSTRAIN_ERR = ( |
153 |
"More than one account with the same email & 'is_active' field. Error."
|
154 |
) |
155 |
INVALID_ACTIVATION_KEY = "Invalid activation key."
|
156 |
NEW_EMAIL_ADDR_RESERVED = ( |
157 |
"The new email address you requested is already used by another account. "
|
158 |
"Please provide a different one."
|
159 |
) |
160 |
EMAIL_RESERVED = "Email: %(email)s is already reserved."
|
161 |
NO_LOCAL_AUTH = ( |
162 |
"Only external login providers are enabled for this account. "
|
163 |
"You can not login with a local password."
|
164 |
) |
165 |
SWITCH_ACCOUNT_FAILURE = "Account failed to switch. Invalid parameters."
|
166 |
SWITCH_ACCOUNT_SUCCESS_WITH_PROVIDER = ( |
167 |
"Account failed to switch to %(provider)s."
|
168 |
) |
169 |
SWITCH_ACCOUNT_SUCCESS = ( |
170 |
"Account successfully switched to %(provider)s."
|
171 |
) |
172 |
|
173 |
# Field help text
|
174 |
ADD_GROUP_MEMBERS_Q_HELP = ( |
175 |
'Add a comma separated list of user emails, eg. user1@user.com, '
|
176 |
'user2@user.com')
|
177 |
ASTAKOSUSER_GROUPS_HELP = ( |
178 |
'In addition to the permissions assigned manually, '
|
179 |
'this user will also get all permissions coming from his/her groups.')
|
180 |
|
181 |
EMAIL_SEND_ERR = 'Failed to send %s.'
|
182 |
ADMIN_NOTIFICATION_SEND_ERR = EMAIL_SEND_ERR % 'admin notification'
|
183 |
VERIFICATION_SEND_ERR = EMAIL_SEND_ERR % 'verification'
|
184 |
INVITATION_SEND_ERR = EMAIL_SEND_ERR % 'invitation'
|
185 |
GREETING_SEND_ERR = EMAIL_SEND_ERR % 'greeting'
|
186 |
FEEDBACK_SEND_ERR = EMAIL_SEND_ERR % 'feedback'
|
187 |
CHANGE_EMAIL_SEND_ERR = EMAIL_SEND_ERR % 'email change'
|
188 |
NOTIFICATION_SEND_ERR = EMAIL_SEND_ERR % 'notification'
|
189 |
DETAILED_NOTIFICATION_SEND_ERR = ( |
190 |
'Failed to send %(subject)s notification to %(recipients)s.')
|
191 |
|
192 |
MISSING_NEXT_PARAMETER = 'The next parameter is missing.'
|
193 |
|
194 |
INVITATION_SENT = 'Invitation sent to %(email)s.'
|
195 |
VERIFICATION_SENT = ( |
196 |
'Your information has been submitted successfully. A verification email, '
|
197 |
'with an activation link has been sent to the email address you provided. '
|
198 |
'Please follow the activation link on this email to complete the '
|
199 |
'registration process.')
|
200 |
VERIFICATION_FAILED = 'Email verification process failed.'
|
201 |
SWITCH_ACCOUNT_LINK_SENT = ( |
202 |
'This email is already associated with a local account, '
|
203 |
'and a verification email has been sent to %(email)s. To complete '
|
204 |
'the association process, go back to your Inbox and follow the link '
|
205 |
'inside the verification email.')
|
206 |
NOTIFICATION_SENT = ( |
207 |
'Your request for an account has been submitted successfully, and is '
|
208 |
'now pending approval. You will be notified by email in the next few '
|
209 |
'days. Thanks for your interest!')
|
210 |
ACTIVATION_SENT = ( |
211 |
'An email containing your activation link has been sent to your '
|
212 |
'email address.')
|
213 |
|
214 |
REGISTRATION_COMPLETED = ( |
215 |
'Your registration completed successfully. You can now login to your '
|
216 |
'new account!')
|
217 |
|
218 |
NO_RESPONSE = 'There is no response.'
|
219 |
NOT_ALLOWED_NEXT_PARAM = 'Not allowed next parameter.'
|
220 |
MISSING_KEY_PARAMETER = 'Missing key parameter.'
|
221 |
INVALID_KEY_PARAMETER = 'Invalid key.'
|
222 |
DOMAIN_VALUE_ERR = 'Enter a valid domain.'
|
223 |
QH_SYNC_ERROR = 'Failed to get synchronized with quotaholder.'
|
224 |
UNIQUE_PROJECT_NAME_CONSTRAIN_ERR = ( |
225 |
'The project name (as specified in its application\'s definition) must '
|
226 |
'be unique among all active projects.')
|
227 |
INVALID_PROJECT = 'Project %(id)s is invalid.'
|
228 |
NOT_ALIVE_PROJECT = 'Project %(id)s is not alive.'
|
229 |
NOT_SUSPENDED_PROJECT = 'Project %(id)s is not suspended.'
|
230 |
NOT_ALLOWED = 'You do not have the permissions to perform this action.'
|
231 |
MEMBER_NUMBER_LIMIT_REACHED = ( |
232 |
'You have reached the maximum number of members for this Project.')
|
233 |
MEMBER_JOIN_POLICY_CLOSED = 'The Project\'s member join policy is closed.'
|
234 |
MEMBER_LEAVE_POLICY_CLOSED = 'The project\'s member leave policy is closed.'
|
235 |
NOT_MEMBERSHIP_REQUEST = 'This is not a valid membership request.'
|
236 |
NOT_ACCEPTED_MEMBERSHIP = 'This is not an accepted membership.'
|
237 |
MEMBERSHIP_REQUEST_EXISTS = 'The membership request already exists.'
|
238 |
NO_APPLICANT = ( |
239 |
'Project application requires at least one applicant. None found.')
|
240 |
INVALID_PROJECT_START_DATE = ( |
241 |
'Project start date should be equal or greater than the current date.')
|
242 |
INVALID_PROJECT_END_DATE = ( |
243 |
'Project end date should be equal or greater than than the current date.')
|
244 |
INCONSISTENT_PROJECT_DATES = ( |
245 |
'Project end date should be greater than the project start date.')
|
246 |
ADD_PROJECT_MEMBERS_Q_HELP = ( |
247 |
'Add a comma separated list of user emails, eg. user1@user.com, '
|
248 |
'user2@user.com')
|
249 |
ADD_PROJECT_MEMBERS_Q_PLACEHOLDER = 'user1@user.com, user2@user.com'
|
250 |
MISSING_IDENTIFIER = 'Missing identifier.'
|
251 |
UNKNOWN_USER_ID = 'There is no user identified by %s.'
|
252 |
UNKNOWN_PROJECT_APPLICATION_ID = ( |
253 |
'There is no project application identified by %s.')
|
254 |
UNKNOWN_PROJECT_ID = 'There is no project identified by %s.'
|
255 |
UNKNOWN_IDENTIFIER = 'Unknown identifier.'
|
256 |
PENDING_MEMBERSHIP_LEAVE = ( |
257 |
'Your request is pending moderation by the Project owner.')
|
258 |
USER_MEMBERSHIP_ACCEPTED = '%s has been accepted in the project.'
|
259 |
USER_MEMBERSHIP_REMOVED = '%s has been removed from the project.'
|
260 |
USER_LEFT_PROJECT = 'You have left the project.'
|
261 |
USER_LEAVE_REQUEST_SUBMITTED = ( |
262 |
'Your request to leave the project has been submitted successfully.')
|
263 |
USER_JOIN_REQUEST_SUBMITTED = ( |
264 |
'Your request to join the project has been submitted successfully.')
|
265 |
USER_JOINED_PROJECT = 'You have joined the project.'
|
266 |
USER_REQUEST_CANCELLED = 'Your request to join the project has been cancelled.'
|
267 |
APPLICATION_CANNOT_APPROVE = "Cannot approve application %s in state '%s'"
|
268 |
APPLICATION_CANNOT_DENY = "Cannot deny application %s in state '%s'"
|
269 |
APPLICATION_CANNOT_DISMISS = "Cannot dismiss application %s in state '%s'"
|
270 |
APPLICATION_CANNOT_CANCEL = "Cannot cancel application %s in state '%s'"
|
271 |
APPLICATION_CANCELLED = "Your project application has been cancelled."
|
272 |
|
273 |
REACHED_PENDING_APPLICATION_LIMIT = ("You have reached the maximum number "
|
274 |
"of pending project applications: %s.")
|
275 |
|
276 |
PENDING_APPLICATION_LIMIT_ADD = \ |
277 |
("You are not allowed to create a new project "
|
278 |
"because you have reached the maximum [%s] for "
|
279 |
"pending project applications. "
|
280 |
"Consider cancelling any unnecessary ones.")
|
281 |
|
282 |
PENDING_APPLICATION_LIMIT_MODIFY = \ |
283 |
("You are not allowed to modify this project "
|
284 |
"because you have reached the maximum [%s] for "
|
285 |
"pending project applications. "
|
286 |
"Consider cancelling any unnecessary ones.")
|
287 |
|
288 |
# Auth providers messages
|
289 |
AUTH_PROVIDER_LOGIN_SUCCESS = "Logged in successfully, using {method_prompt}."
|
290 |
AUTH_PROVIDER_LOGOUT_SUCCESS = "Logged out successfully."
|
291 |
AUTH_PROVIDER_LOGOUT_SUCCESS_EXTRA = ( |
292 |
"You may still be logged in at {title} though. "
|
293 |
"Consider logging out from there too.")
|
294 |
AUTH_PROVIDER_NOT_ACTIVE = "'{method_prompt}' is disabled."
|
295 |
AUTH_PROVIDER_ADD_DISABLED = "{method_prompt} is disabled for your account."
|
296 |
AUTH_PROVIDER_NOT_ACTIVE_FOR_USER = "You cannot login using '{method_prompt}'."
|
297 |
AUTH_PROVIDER_NOT_ACTIVE_FOR_CREATE = ( |
298 |
"Sign up using '{method_prompt}' is disabled.")
|
299 |
AUTH_PROVIDER_NOT_ACTIVE_FOR_ADD = "You cannot add {method_prompt}."
|
300 |
AUTH_PROVIDER_ADDED = "{method_prompt} enabled for this account."
|
301 |
AUTH_PROVIDER_SWITCHED = "{method_prompt} changed for this account."
|
302 |
AUTH_PROVIDER_REMOVED = "{method_prompt} removed for this account."
|
303 |
AUTH_PROVIDER_ADD_FAILED = "Failed to add {method_prompt}."
|
304 |
AUTH_PROVIDER_ADD_EXISTS = ( |
305 |
"It seems that this '{method_prompt}' is already in use by "
|
306 |
"another account.")
|
307 |
AUTH_PROVIDER_LOGIN_TO_ADD = ( |
308 |
"The new login method will be assigned once you login to your account.")
|
309 |
AUTH_PROVIDER_INVALID_LOGIN = "No account exists."
|
310 |
AUTH_PROVIDER_REQUIRED = ( |
311 |
"{method_prompt} is required. Add one from your profile page.")
|
312 |
AUTH_PROVIDER_CANNOT_CHANGE_PASSWORD = "Changing password is not supported."
|
313 |
AUTH_PROVIDER_SIGNUP_FROM_LOGIN = None
|
314 |
AUTH_PROVIDER_UNUSABLE_PASSWORD = ( |
315 |
'{method_prompt} is not enabled'
|
316 |
' for your account. You can access your account by logging in with'
|
317 |
' {available_methods_links}.')
|
318 |
AUTH_PROVIDER_LOGIN_DISABLED = AUTH_PROVIDER_UNUSABLE_PASSWORD |
319 |
AUTH_PROVIDER_SIGNUP_FROM_LOGIN = ''
|
320 |
AUTH_PROVIDER_AUTHENTICATION_FAILED = ( |
321 |
'Authentication with this account failed.')
|
322 |
|
323 |
|
324 |
AUTH_PROVIDER_PENDING_REGISTRATION = '''A pending registration exists for
|
325 |
{title} account {username}. The email used for the registration is
|
326 |
{user_email}. If you decide to procceed with the signup process once again,
|
327 |
all pending registrations will be deleted.'''
|
328 |
|
329 |
AUTH_PROVIDER_PENDING_RESEND_ACTIVATION = ( |
330 |
'<a href="{resend_activation_url}">Click here to resend activation '
|
331 |
'email.</a>')
|
332 |
AUTH_PROVIDER_PENDING_MODERATION = ( |
333 |
'Your account request is pending moderation.')
|
334 |
AUTH_PROVIDER_PENDING_ACTIVATION = ( |
335 |
'Your account request is pending activation.')
|
336 |
AUTH_PROVIDER_ACCOUNT_INACTIVE = 'Your account is disabled.'
|
337 |
|
338 |
AUTH_PROVIDER_ADD_TO_EXISTING_ACCOUNT = ( |
339 |
"You can add {method_prompt} to your existing account from your "
|
340 |
" <a href='{profile_url}'>profile page</a>")
|
341 |
|
342 |
# Email subjects
|
343 |
_SITENAME = astakos_settings.SITENAME |
344 |
INVITATION_EMAIL_SUBJECT = 'Invitation to %s' % _SITENAME
|
345 |
GREETING_EMAIL_SUBJECT = 'Welcome to %s' % _SITENAME
|
346 |
FEEDBACK_EMAIL_SUBJECT = 'Feedback from %s' % _SITENAME
|
347 |
VERIFICATION_EMAIL_SUBJECT = '%s account activation is needed' % _SITENAME
|
348 |
ACCOUNT_CREATION_SUBJECT = '%s account created (%%(user)s)' % _SITENAME
|
349 |
HELPDESK_NOTIFICATION_EMAIL_SUBJECT = \ |
350 |
'%s account activated (%%(user)s)' % _SITENAME
|
351 |
EMAIL_CHANGE_EMAIL_SUBJECT = 'Email change on %s ' % _SITENAME
|
352 |
PASSWORD_RESET_EMAIL_SUBJECT = 'Password reset on %s ' % _SITENAME
|
353 |
PROJECT_CREATION_SUBJECT = \ |
354 |
'%s project application created (%%(name)s)' % _SITENAME
|
355 |
PROJECT_APPROVED_SUBJECT = \ |
356 |
'%s project application approved (%%(name)s)' % _SITENAME
|
357 |
PROJECT_DENIED_SUBJECT = \ |
358 |
'%s project application denied (%%(name)s)' % _SITENAME
|
359 |
PROJECT_TERMINATION_SUBJECT = \ |
360 |
'%s project terminated (%%(name)s)' % _SITENAME
|
361 |
PROJECT_SUSPENSION_SUBJECT = \ |
362 |
'%s project suspended (%%(name)s)' % _SITENAME
|
363 |
PROJECT_MEMBERSHIP_CHANGE_SUBJECT = \ |
364 |
'%s project membership changed (%%(name)s)' % _SITENAME
|
365 |
PROJECT_MEMBERSHIP_ENROLL_SUBJECT = \ |
366 |
'%s project enrollment (%%(name)s)' % _SITENAME
|
367 |
PROJECT_MEMBERSHIP_REQUEST_SUBJECT = \ |
368 |
'%s project membership request (%%(name)s)' % _SITENAME
|
369 |
PROJECT_MEMBERSHIP_LEAVE_REQUEST_SUBJECT = \ |
370 |
'%s project membership leave request (%%(name)s)' % _SITENAME
|
371 |
|
372 |
|
373 |
messages = locals().keys()
|
374 |
for msg in messages: |
375 |
if msg == msg.upper():
|
376 |
attr = "ASTAKOS_%s_MESSAGE" % msg
|
377 |
settings_value = getattr(settings, attr, None) |
378 |
if settings_value:
|
379 |
locals()[msg] = settings_value
|