Commit 13e54f83 authored by Jérome Perrin's avatar Jérome Perrin

manual

parent c1a277b7
......@@ -5576,7 +5576,8 @@ Business Template is a set of definitions, such as skins, portal types and categ
self,
getattr(new_bt, item_name))
def _uninstall(self, **kw):
@security.protected(Permissions.ManagePortal)
def uninstall(self, **kw):
"""
For uninstall based on paramaters provided in **kw
"""
......@@ -5590,8 +5591,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
# template deletes many things from the portal.
self.getPortalObject().portal_caches.clearAllCache()
security.declareProtected(Permissions.ManagePortal, 'uninstall')
uninstall = _uninstall
_uninstall = uninstall
def _clean(self):
"""
......
......@@ -189,11 +189,9 @@ class CompositionMixin:
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
security.declareProtected(Permissions.AccessContentsInformation,
'asComposedDocument')
asComposedDocument = transactional_cached(
asComposedDocument = security.protected(Permissions.AccessContentsInformation)(transactional_cached(
lambda self, portal_type_list=None: (self, portal_type_list)
)(asComposedDocument) # pylint:disable=used-before-assignment
)(asComposedDocument)) # pylint:disable=used-before-assignment
# XXX add accessors to get properties from '_effective_model_list' ?
# (cf PaySheetModel)
......
......@@ -35,14 +35,6 @@ from datetime import datetime
import six
security = ModuleSecurityInfo(__name__)
security.declarePublic('addToDate', 'getClosestDate',
'getIntervalBetweenDates', 'getMonthAndDaysBetween',
'getCompletedMonthBetween', 'getRoundedMonthBetween',
'getMonthFraction', 'getYearFraction', 'getAccountableYearFraction',
'getBissextilCompliantYearFraction', 'getIntervalListBetweenDates',
'getDecimalNumberOfYearsBetween','roundMonthToGreaterEntireYear',
'roundDate', 'convertDateToHour', 'getNumberOfDayInMonth', 'atTheEndOfPeriod',
'copyDate')
millis = DateTime('2000/01/01 12:00:00.001') - DateTime('2000/01/01 12:00:00')
centis = millis * 10
......@@ -58,6 +50,7 @@ accountable_days_in_month = 30.
accountable_months_in_year = 12.
number_of_hours_in_year = 8760
@security.public
def addToDate(date, to_add=None, **kw):
"""
Return a new DateTime object with the corresponding added values.
......@@ -147,6 +140,7 @@ def addToDate(date, to_add=None, **kw):
return_date += day_to_add
return return_date
@security.public
def getClosestDate(date=None, target_date=None,
precision='month', before=1, strict=1):
"""
......@@ -186,14 +180,15 @@ def getClosestDate(date=None, target_date=None,
return return_date
# pylint: disable=dangerous-default-value
def getIntervalBetweenDates(from_date=None, to_date=None,
keys={'year':1, 'month':1, 'day':1}):
@security.public
def getIntervalBetweenDates(from_date=None, to_date=None, keys=None):
"""
Return the number of entire years, months and days (if each is equal to 1 in keys)
between the both given dates.
If one of the given dates is None, the date used is the current time.
"""
if keys is None:
keys = {'year':1, 'month':1, 'day':1}
if from_date is None:
from_date = DateTime()
if to_date is None:
......@@ -205,7 +200,7 @@ def getIntervalBetweenDates(from_date=None, to_date=None,
to_inverse = 0
diff_value = {}
for key in keys.keys():
for key in keys:
if key:
diff_value[key] = 0
......@@ -227,14 +222,15 @@ def getIntervalBetweenDates(from_date=None, to_date=None,
returned_value[key] = value
return returned_value
# pylint: disable=dangerous-default-value
def getIntervalListBetweenDates(from_date=None, to_date=None,
keys={'year':1, 'month':1, 'week' : 1, 'day':1}):
@security.public
def getIntervalListBetweenDates(from_date=None, to_date=None, keys=None):
"""
Return the list of years, months and days (if each is equal to 1 in keys)
between the both given dates including the current one.
If one of the given dates is None, the date used is the current time.
"""
if keys is None:
keys = {'year':1, 'month':1, 'day':1}
# key -> format dict
format_dict = {'year':'%Y',
'month':'%Y-%m',
......@@ -283,6 +279,7 @@ def getIntervalListBetweenDates(from_date=None, to_date=None,
returned_value_dict[key] = value
return returned_value_dict
@security.public
def getMonthAndDaysBetween(from_date=None, to_date=None):
"""
Return the number of entire months and days between the both given dates.
......@@ -290,6 +287,7 @@ def getMonthAndDaysBetween(from_date=None, to_date=None):
return getIntervalBetweenDates(from_date=from_date, to_date=to_date, keys={'month':1, 'day':1} )
@security.public
def getCompletedMonthBetween(from_date=None, to_date=None,
reference_date=DateTime('2000/01/01')):
"""
......@@ -310,6 +308,7 @@ def getCompletedMonthBetween(from_date=None, to_date=None,
to_date = getClosestDate(target_date = to_date, date = reference_date, before = 0)
return getIntervalBetweenDates(from_date = from_date, to_date = to_date, keys = {'month':1} )
@security.public
def getRoundedMonthBetween(from_date=None, to_date=None, rounded_day=False):
"""
Return a rounded number of months between the both given dates.
......@@ -330,6 +329,7 @@ def getRoundedMonthBetween(from_date=None, to_date=None, rounded_day=False):
return_value += 1
return return_value
@security.public
def getMonthFraction(date, days):
"""
Return a ratio corresponding to the fraction of the month
......@@ -344,6 +344,7 @@ def getMonthFraction(date, days):
return days / number_of_days_in_month
@security.public
def getYearFraction(days=None, months=None, days_in_year=number_of_days_in_year):
"""
Return a ratio corresponding to the fraction of the year
......@@ -354,6 +355,7 @@ def getYearFraction(days=None, months=None, days_in_year=number_of_days_in_year)
else:
return days / days_in_year
@security.public
def getAccountableYearFraction(from_date=None, to_date=None):
"""
Returns a year fraction according to accounting rules,
......@@ -382,6 +384,7 @@ def getAccountableYearFraction(from_date=None, to_date=None):
year_fraction += (1 / accountable_months_in_year) * ( days / accountable_days_in_month)
return year_fraction
@security.public
def getBissextilCompliantYearFraction(from_date=None, to_date=None, reference_date=DateTime('2000/01/01')):
"""
Returns a ratio corresponding to the fraction of the year
......@@ -399,6 +402,7 @@ def getBissextilCompliantYearFraction(from_date=None, to_date=None, reference_da
return_value = interval['year'] + getYearFraction(days=interval['day'], days_in_year=days_in_year)
return return_value
@security.public
def getDecimalNumberOfYearsBetween(from_date, to_date, reference_date=DateTime('2000/01/01')):
"""
Return a float representing the number of years between
......@@ -419,6 +423,7 @@ def getDecimalNumberOfYearsBetween(from_date, to_date, reference_date=DateTime('
return fraction
@security.public
def roundMonthToGreaterEntireYear(months_number):
"""
Round the given number of months in order to have an entire
......@@ -429,6 +434,7 @@ def roundMonthToGreaterEntireYear(months_number):
years_number += 1
return int(years_number) * 12
@security.public
def roundDate(date):
"""
Returns a date at 0:00
......@@ -437,6 +443,7 @@ def roundDate(date):
' DateTime.earliestTime instead', DeprecationWarning)
return date.earliestTime()
@security.public
def convertDateToHour(date=None):
"""
converts the date passed as parameter into hours
......@@ -461,6 +468,7 @@ def convertDateToHour(date=None):
return int(hour_)
@security.public
def getNumberOfDayInMonth(date):
month = date.month()
mapping = {
......@@ -483,6 +491,7 @@ def getNumberOfDayInMonth(date):
else:
return mapping[month]
@security.public
def atTheEndOfPeriod(date, period):
"""
return the last time value for a given date
......@@ -511,6 +520,7 @@ def atTheEndOfPeriod(date, period):
raise NotImplementedError('Period "%s" not Handled yet' % period)
return end
@security.public
def copyDate(date, year=None, month=None, day=None,
hour=None, minute=None, second=None, timezone=None): # pylint: disable=redefined-outer-name
if year is None:
......
......@@ -45,18 +45,19 @@ class LanguageManager(Tabs):
########################################################################
# API
########################################################################
@security.public
def get_languages(self):
"""Returns all the object languages.
"""
return self._languages
@security.protected('Manage language')
def set_languages(self, languages):
"""Sets the object languages.
"""
self._languages = tuple(languages)
@security.protected('Manage language')
def add_language(self, language):
"""Adds a new language.
"""
......@@ -67,6 +68,7 @@ class LanguageManager(Tabs):
new_language_list = tuple(sorted(new_language_list))
self._languages = new_language_list
@security.protected('Manage language')
def del_language(self, language):
"""Removes a language.
"""
......@@ -74,7 +76,7 @@ class LanguageManager(Tabs):
languages = [ x for x in self._languages if x != language ]
self._languages = tuple(languages)
@security.public
def get_languages_mapping(self):
"""Returns a list of dictionary, one for each objects language. The
dictionary contains the language code, its name and a boolean value
......@@ -85,7 +87,7 @@ class LanguageManager(Tabs):
'default': x == self._default_language}
for x in self._languages ]
@security.public
def get_available_languages(self, **kw):
"""Returns the langauges available. For example, a language could be
considered as available only if there is some data associated to it.
......@@ -96,7 +98,7 @@ class LanguageManager(Tabs):
"""
return self._languages
@security.public
def get_default_language(self):
"""Returns the default language.
......@@ -109,20 +111,10 @@ class LanguageManager(Tabs):
"""
return self._default_language
########################################################################
# Web API
# API
########################################################################
# Security settings
security.declarePublic('get_languages')
security.declareProtected('Manage languages', 'set_languages')
security.declareProtected('Manage languages', 'add_language')
security.declareProtected('Manage languages', 'del_language')
security.declarePublic('get_languages_mapping')
security.declarePublic('get_language_name')
@security.public
def get_language_name(self, id=None):
"""
Returns the name of the given language code.
......@@ -138,12 +130,8 @@ class LanguageManager(Tabs):
return language_name
security.declarePublic('get_available_languages')
security.declarePublic('get_default_language')
# XXX Kept here temporarily, further refactoring needed
security.declarePublic('get_selected_language')
@security.public
def get_selected_language(self, **kw):
"""
Returns the selected language. Here the language negotiation takes
......@@ -191,7 +179,7 @@ class LanguageManager(Tabs):
manage_languages = LocalDTMLFile('ui/LM_languages', globals())
security.declarePublic('get_all_languages')
@security.public
def get_all_languages(self):
"""
Returns all ISO languages, used by 'manage_languages'.
......@@ -199,7 +187,7 @@ class LanguageManager(Tabs):
return get_languages() + self.get_user_defined_languages()
security.declareProtected('Manage languages', 'manage_addLanguage')
@security.protected('Manage languages')
def manage_addLanguage(self, language, REQUEST=None, RESPONSE=None):
""" """
self.add_language(language)
......@@ -208,7 +196,7 @@ class LanguageManager(Tabs):
RESPONSE.redirect("%s/manage_languages" % REQUEST['URL1'])
security.declareProtected('Manage languages', 'manage_delLanguages')
@security.protected('Manage languages')
def manage_delLanguages(self, languages, REQUEST, RESPONSE):
""" """
for language in languages:
......@@ -217,7 +205,7 @@ class LanguageManager(Tabs):
RESPONSE.redirect("%s/manage_languages" % REQUEST['URL1'])
security.declareProtected('Manage languages', 'manage_changeDefaultLang')
@security.protected('Manage languages')
def manage_changeDefaultLang(self, language, REQUEST=None, RESPONSE=None):
""" """
self._default_language = language
......@@ -236,7 +224,7 @@ class LanguageManager(Tabs):
pass
security.declarePublic('need_upgrade')
@security.public
def need_upgrade(self):
""" """
return self._needs_upgrade()
......@@ -251,7 +239,7 @@ class LanguageManager(Tabs):
RESPONSE.redirect('manage_main')
# Add a feature which allows users to be able to add a new language.
security.declarePublic('get_user_defined_language_name')
@security.public
def get_user_defined_language_name(self, id=None):
"""
Returns the name of the given user defined language code.
......@@ -260,7 +248,7 @@ class LanguageManager(Tabs):
if language_dict['code']==id:
return language_dict['name']
security.declarePublic('get_user_defined_languages')
@security.public
def get_user_defined_languages(self):
user_define_language_dict_list = []
localizer = getattr(self, 'Localizer', None)
......
......@@ -110,7 +110,7 @@ class Localizer(LanguageManager, Folder):
#######################################################################
# Get some data
security.declarePublic('get_supported_languages')
@security.public
def get_supported_languages(self):
"""
Get the supported languages, that is the languages that the
......@@ -119,7 +119,7 @@ class Localizer(LanguageManager, Folder):
return self._languages
security.declarePublic('get_selected_language')
@security.public
def get_selected_language(self):
""" """
return lang_negotiator(self._languages) \
......@@ -131,7 +131,7 @@ class Localizer(LanguageManager, Folder):
## security.declareProtected('View management screens', 'manage_hookForm')
## manage_hookForm = LocalDTMLFile('ui/Localizer_hook', globals())
## security.declareProtected('Manage properties', 'manage_hook')
security.declarePrivate('manage_hook')
@security.private
def manage_hook(self, hook=0):
""" """
if hook != self.hooked():
......@@ -142,7 +142,7 @@ class Localizer(LanguageManager, Folder):
unregisterBeforeTraverse(aq_parent(self), self.meta_type)
security.declarePublic('hooked')
@security.public
def hooked(self):
""" """
if queryBeforeTraverse(aq_parent(self), self.meta_type):
......@@ -151,7 +151,7 @@ class Localizer(LanguageManager, Folder):
# New code to control the language policy
security.declarePrivate('accept_cookie')
@security.private
def accept_cookie(self, accept_language):
"""Add the language from a cookie."""
lang = self.REQUEST.cookies.get('LOCALIZER_LANGUAGE', None)
......@@ -159,7 +159,7 @@ class Localizer(LanguageManager, Folder):
accept_language.set(lang, 2.0)
security.declarePrivate('accept_path')
@security.private
def accept_path(self, accept_language):
"""Add the language from the path."""
stack = self.REQUEST['TraversalRequestNameStack']
......@@ -168,7 +168,7 @@ class Localizer(LanguageManager, Folder):
accept_language.set(lang, 3.0)
security.declarePrivate('accept_url')
@security.private
def accept_url(self, accept_language):
"""Add the language from the URL."""
lang = self.REQUEST.form.get('LOCALIZER_LANGUAGE')
......@@ -193,7 +193,7 @@ class Localizer(LanguageManager, Folder):
# Changing the language, useful snippets
security.declarePublic('get_languages_map')
@security.public
def get_languages_map(self):
"""
Return a list of dictionaries, each dictionary has the language
......@@ -220,10 +220,10 @@ class Localizer(LanguageManager, Folder):
'selected': x == ob_language})
return langs
changeLanguageForm = LocalDTMLFile('ui/changeLanguageForm', globals())
security.declarePublic('changeLanguage')
changeLanguageForm = LocalDTMLFile('ui/changeLanguageForm', globals())
@security.public
def changeLanguage(self, lang, goto=None, expires=None):
"""Change the user language to `lang`.
......@@ -246,7 +246,7 @@ class Localizer(LanguageManager, Folder):
response.redirect(goto)
security.declarePublic('translationContext')
@security.public
@contextmanager
def translationContext(self, lang):
"""Context manager to temporarily change the current language.
......@@ -273,7 +273,7 @@ class Localizer(LanguageManager, Folder):
if old_accept_language is not MARKER:
request.set('AcceptLanguage', old_accept_language)
security.declarePublic('translate')
@security.public
def translate(self, domain, msgid, lang=None, *args, **kw):
"""
backward compatibility shim over zope.i18n.translate. Please avoid.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment