Commit 0aa35a8c authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

set permissions in all methods in ZSQLCatalog and SQLCatalog.

parent 2fc28650
...@@ -1250,7 +1250,7 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor): ...@@ -1250,7 +1250,7 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
for i in range(0,100): for i in range(0,100):
message_list = portal_activities.getMessageList() message_list = portal_activities.getMessageList()
for message in message_list: for message in message_list:
#if message.method_id=='setHotReindexingState': #if message.method_id=='_setHotReindexingState':
# import pdb;pdb.set_trace() # import pdb;pdb.set_trace()
if message.method_id in method_id_list: if message.method_id in method_id_list:
try: try:
...@@ -1383,7 +1383,7 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor): ...@@ -1383,7 +1383,7 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
'recursiveImmediateReindexObject', 'recursiveImmediateReindexObject',
'playBackRecordedObjectList', 'playBackRecordedObjectList',
'getId', 'getId',
'setHotReindexingState')) '_setHotReindexingState'))
self.assertEqual(portal_catalog.getHotReindexingState(), self.assertEqual(portal_catalog.getHotReindexingState(),
HOT_REINDEXING_DOUBLE_INDEXING_STATE) HOT_REINDEXING_DOUBLE_INDEXING_STATE)
# Now we have started an double indexing # Now we have started an double indexing
......
...@@ -22,6 +22,8 @@ from App.special_dtml import DTMLFile ...@@ -22,6 +22,8 @@ from App.special_dtml import DTMLFile
from thread import allocate_lock, get_ident from thread import allocate_lock, get_ident
from OFS.Folder import Folder from OFS.Folder import Folder
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from AccessControl.Permissions import access_contents_information, \
manage_zcatalog_entries
from AccessControl.SimpleObjectPolicies import ContainerAssertions from AccessControl.SimpleObjectPolicies import ContainerAssertions
from BTrees.OIBTree import OIBTree from BTrees.OIBTree import OIBTree
from App.config import getConfiguration from App.config import getConfiguration
...@@ -670,12 +672,14 @@ class Catalog(Folder, ...@@ -670,12 +672,14 @@ class Catalog(Folder,
pass pass
super(Catalog, self).manage_afterClone(item) super(Catalog, self).manage_afterClone(item)
security.declarePrivate('getCacheSequenceNumber')
def getCacheSequenceNumber(self): def getCacheSequenceNumber(self):
return self._cache_sequence_number return self._cache_sequence_number
def _clearCaches(self): def _clearCaches(self):
self._cache_sequence_number += 1 self._cache_sequence_number += 1
security.declarePrivate('getSQLCatalogRoleKeysList')
def getSQLCatalogRoleKeysList(self): def getSQLCatalogRoleKeysList(self):
""" """
Return the list of role keys. Return the list of role keys.
...@@ -686,6 +690,7 @@ class Catalog(Folder, ...@@ -686,6 +690,7 @@ class Catalog(Folder,
role_key_dict[role.strip()] = column.strip() role_key_dict[role.strip()] = column.strip()
return role_key_dict.items() return role_key_dict.items()
security.declarePrivate('getSQLCatalogSecurityUidGroupsColumnsDict')
def getSQLCatalogSecurityUidGroupsColumnsDict(self): def getSQLCatalogSecurityUidGroupsColumnsDict(self):
""" """
Return a mapping of local_roles_group_id name to the name of the column Return a mapping of local_roles_group_id name to the name of the column
...@@ -698,6 +703,7 @@ class Catalog(Folder, ...@@ -698,6 +703,7 @@ class Catalog(Folder,
local_roles_group_id_dict[local_roles_group_id.strip()] = column.strip() local_roles_group_id_dict[local_roles_group_id.strip()] = column.strip()
return local_roles_group_id_dict return local_roles_group_id_dict
security.declarePrivate('getSQLCatalogLocalRoleKeysList')
def getSQLCatalogLocalRoleKeysList(self): def getSQLCatalogLocalRoleKeysList(self):
""" """
Return the list of local role keys. Return the list of local role keys.
...@@ -708,6 +714,7 @@ class Catalog(Folder, ...@@ -708,6 +714,7 @@ class Catalog(Folder,
local_role_key_dict[role.strip()] = column.strip() local_role_key_dict[role.strip()] = column.strip()
return local_role_key_dict.items() return local_role_key_dict.items()
security.declareProtected(manage_zcatalog_entries, 'manage_exportProperties')
def manage_exportProperties(self, REQUEST=None, RESPONSE=None): def manage_exportProperties(self, REQUEST=None, RESPONSE=None):
""" """
Export properties to an XML file. Export properties to an XML file.
...@@ -767,6 +774,7 @@ class Catalog(Folder, ...@@ -767,6 +774,7 @@ class Catalog(Folder,
'inline;filename=properties.xml') 'inline;filename=properties.xml')
return f.getvalue() return f.getvalue()
security.declareProtected(manage_zcatalog_entries, 'manage_importProperties')
def manage_importProperties(self, file): def manage_importProperties(self, file):
""" """
Import properties from an XML file. Import properties from an XML file.
...@@ -821,6 +829,7 @@ class Catalog(Folder, ...@@ -821,6 +829,7 @@ class Catalog(Folder,
finally: finally:
doc.unlink() doc.unlink()
security.declareProtected(manage_zcatalog_entries, 'manage_historyCompare')
def manage_historyCompare(self, rev1, rev2, REQUEST, def manage_historyCompare(self, rev1, rev2, REQUEST,
historyComparisonResults=''): historyComparisonResults=''):
return Catalog.inheritedAttribute('manage_historyCompare')( return Catalog.inheritedAttribute('manage_historyCompare')(
...@@ -898,6 +907,7 @@ class Catalog(Folder, ...@@ -898,6 +907,7 @@ class Catalog(Folder,
return (local_roles_group_id_to_security_uid_mapping, optimised_roles_and_users) return (local_roles_group_id_to_security_uid_mapping, optimised_roles_and_users)
security.declarePrivate('getRoleAndSecurityUidList')
def getRoleAndSecurityUidList(self): def getRoleAndSecurityUidList(self):
""" """
Return a list of 3-tuples, suitable for direct use in a zsqlmethod. Return a list of 3-tuples, suitable for direct use in a zsqlmethod.
...@@ -958,7 +968,7 @@ class Catalog(Folder, ...@@ -958,7 +968,7 @@ class Catalog(Folder,
self.subject_set_uid_dict[subject_list] = subject_set_uid self.subject_set_uid_dict[subject_list] = subject_set_uid
return (subject_set_uid, subject_list) return (subject_set_uid, subject_list)
def clear(self): def _clear(self):
""" """
Clears the catalog by calling a list of methods Clears the catalog by calling a list of methods
""" """
...@@ -975,7 +985,7 @@ class Catalog(Folder, ...@@ -975,7 +985,7 @@ class Catalog(Folder,
raise raise
# Reserved uids have been removed. # Reserved uids have been removed.
self.clearReserved() self._clearReserved()
id_tool = getattr(self.getPortalObject(), 'portal_ids', None) id_tool = getattr(self.getPortalObject(), 'portal_ids', None)
if id_tool is None: if id_tool is None:
...@@ -986,6 +996,7 @@ class Catalog(Folder, ...@@ -986,6 +996,7 @@ class Catalog(Folder,
self._clearSubjectCache() self._clearSubjectCache()
self._clearCaches() self._clearCaches()
security.declarePrivate('insertMaxUid')
def insertMaxUid(self): def insertMaxUid(self):
""" """
Add a dummy item so that SQLCatalog will not use existing uids again. Add a dummy item so that SQLCatalog will not use existing uids again.
...@@ -996,7 +1007,7 @@ class Catalog(Folder, ...@@ -996,7 +1007,7 @@ class Catalog(Folder,
self._max_uid.change(1) self._max_uid.change(1)
method(uid = [self._max_uid()]) method(uid = [self._max_uid()])
def clearReserved(self): def _clearReserved(self):
""" """
Clears reserved uids Clears reserved uids
""" """
...@@ -1013,6 +1024,7 @@ class Catalog(Folder, ...@@ -1013,6 +1024,7 @@ class Catalog(Folder,
raise raise
self._last_clear_reserved_time += 1 self._last_clear_reserved_time += 1
security.declarePrivate('getRecordForUid')
def getRecordForUid(self, uid): def getRecordForUid(self, uid):
""" """
Get an object by UID Get an object by UID
...@@ -1032,6 +1044,7 @@ class Catalog(Folder, ...@@ -1032,6 +1044,7 @@ class Catalog(Folder,
return search_result[0] return search_result[0]
raise KeyError, uid raise KeyError, uid
security.declarePrivate('editSchema')
def editSchema(self, names_list): def editSchema(self, names_list):
""" """
Builds a schema from a list of strings Builds a schema from a list of strings
...@@ -1051,6 +1064,7 @@ class Catalog(Folder, ...@@ -1051,6 +1064,7 @@ class Catalog(Folder,
self.schema = schema self.schema = schema
self.names = names self.names = names
security.declarePrivate('getCatalogSearchTableIds')
def getCatalogSearchTableIds(self): def getCatalogSearchTableIds(self):
"""Return selected tables of catalog which are used in JOIN. """Return selected tables of catalog which are used in JOIN.
catalaog is always first catalaog is always first
...@@ -1108,6 +1122,7 @@ class Catalog(Folder, ...@@ -1108,6 +1122,7 @@ class Catalog(Folder,
add_key(scriptable_tuple[0].strip()) add_key(scriptable_tuple[0].strip())
return sorted(keys) return sorted(keys)
security.declarePrivate('getColumnIds')
def getColumnIds(self): def getColumnIds(self):
""" """
Calls the show column method and returns dictionnary of Calls the show column method and returns dictionnary of
...@@ -1115,6 +1130,7 @@ class Catalog(Folder, ...@@ -1115,6 +1130,7 @@ class Catalog(Folder,
""" """
return self._getColumnIds()[:] return self._getColumnIds()[:]
security.declarePrivate('getColumnMap')
@transactional_cache_decorator('SQLCatalog.getColumnMap') @transactional_cache_decorator('SQLCatalog.getColumnMap')
@caching_instance_method(id='SQLCatalog.getColumnMap', @caching_instance_method(id='SQLCatalog.getColumnMap',
cache_factory='erp5_content_long', cache_factory='erp5_content_long',
...@@ -1132,6 +1148,7 @@ class Catalog(Folder, ...@@ -1132,6 +1148,7 @@ class Catalog(Folder,
result.setdefault('%s.%s' % (table, field), []).append(table) # Is this inconsistent ? result.setdefault('%s.%s' % (table, field), []).append(table) # Is this inconsistent ?
return result return result
security.declarePrivate('getResultColumnIds')
@transactional_cache_decorator('SQLCatalog.getResultColumnIds') @transactional_cache_decorator('SQLCatalog.getResultColumnIds')
@caching_instance_method(id='SQLCatalog.getResultColumnIds', @caching_instance_method(id='SQLCatalog.getResultColumnIds',
cache_factory='erp5_content_long', cache_factory='erp5_content_long',
...@@ -1148,6 +1165,7 @@ class Catalog(Folder, ...@@ -1148,6 +1165,7 @@ class Catalog(Folder,
keys.add('%s.%s' % (table, field)) keys.add('%s.%s' % (table, field))
return sorted(keys) return sorted(keys)
security.declarePrivate('getSortColumnIds')
@transactional_cache_decorator('SQLCatalog.getSortColumnIds') @transactional_cache_decorator('SQLCatalog.getSortColumnIds')
@caching_instance_method(id='SQLCatalog.getSortColumnIds', @caching_instance_method(id='SQLCatalog.getSortColumnIds',
cache_factory='erp5_content_long', cache_factory='erp5_content_long',
...@@ -1164,6 +1182,7 @@ class Catalog(Folder, ...@@ -1164,6 +1182,7 @@ class Catalog(Folder,
keys.add('%s.%s' % (table, field)) keys.add('%s.%s' % (table, field))
return sorted(keys) return sorted(keys)
security.declarePrivate('getTableIds')
def getTableIds(self): def getTableIds(self):
""" """
Calls the show table method and returns dictionnary of Calls the show table method and returns dictionnary of
...@@ -1182,6 +1201,7 @@ class Catalog(Folder, ...@@ -1182,6 +1201,7 @@ class Catalog(Folder,
pass pass
return keys return keys
security.declarePrivate('getUIDBuffer')
def getUIDBuffer(self, force_new_buffer=False): def getUIDBuffer(self, force_new_buffer=False):
global global_uid_buffer_dict global global_uid_buffer_dict
klass = self.__class__ klass = self.__class__
...@@ -1197,6 +1217,7 @@ class Catalog(Folder, ...@@ -1197,6 +1217,7 @@ class Catalog(Folder,
return uid_buffer_dict[thread_key] return uid_buffer_dict[thread_key]
# the cataloging API # the cataloging API
security.declarePrivate('produceUid')
def produceUid(self): def produceUid(self):
""" """
Produces reserved uids in advance Produces reserved uids in advance
...@@ -1233,6 +1254,7 @@ class Catalog(Folder, ...@@ -1233,6 +1254,7 @@ class Catalog(Folder,
uid_list = [x.uid for x in method(count = UID_BUFFER_SIZE, instance_id = instance_id) if x.uid != 0] uid_list = [x.uid for x in method(count = UID_BUFFER_SIZE, instance_id = instance_id) if x.uid != 0]
uid_buffer.extend(uid_list) uid_buffer.extend(uid_list)
security.declarePrivate('isIndexable')
def isIndexable(self): def isIndexable(self):
""" """
This is required to check in many methods that This is required to check in many methods that
...@@ -1247,6 +1269,7 @@ class Catalog(Folder, ...@@ -1247,6 +1269,7 @@ class Catalog(Folder,
return False return False
return True return True
security.declarePrivate('getSiteRoot')
def getSiteRoot(self): def getSiteRoot(self):
""" """
Returns the root of the site Returns the root of the site
...@@ -1257,6 +1280,7 @@ class Catalog(Folder, ...@@ -1257,6 +1280,7 @@ class Catalog(Folder,
site_root = self.aq_parent site_root = self.aq_parent
return site_root return site_root
security.declarePrivate('getZopeRoot')
def getZopeRoot(self): def getZopeRoot(self):
""" """
Returns the root of the zope Returns the root of the zope
...@@ -1267,6 +1291,7 @@ class Catalog(Folder, ...@@ -1267,6 +1291,7 @@ class Catalog(Folder,
zope_root = self.getPhysicalRoot() zope_root = self.getPhysicalRoot()
return zope_root return zope_root
security.declarePrivate('newUid')
def newUid(self): def newUid(self):
""" """
This is where uid generation takes place. We should consider a multi-threaded environment This is where uid generation takes place. We should consider a multi-threaded environment
...@@ -1306,6 +1331,7 @@ class Catalog(Folder, ...@@ -1306,6 +1331,7 @@ class Catalog(Folder,
finally: finally:
klass._reserved_uid_lock.release() klass._reserved_uid_lock.release()
security.declareProtected(manage_zcatalog_entries, 'manage_catalogObject')
def manage_catalogObject(self, REQUEST, RESPONSE, URL1, urls=None): def manage_catalogObject(self, REQUEST, RESPONSE, URL1, urls=None):
""" index Zope object(s) that 'urls' point to """ """ index Zope object(s) that 'urls' point to """
if urls: if urls:
...@@ -1321,6 +1347,7 @@ class Catalog(Folder, ...@@ -1321,6 +1347,7 @@ class Catalog(Folder,
RESPONSE.redirect(URL1 + '/manage_catalogView?manage_tabs_message=Object%20Cataloged') RESPONSE.redirect(URL1 + '/manage_catalogView?manage_tabs_message=Object%20Cataloged')
security.declareProtected(manage_zcatalog_entries, 'manage_uncatalogObject')
def manage_uncatalogObject(self, REQUEST, RESPONSE, URL1, urls=None): def manage_uncatalogObject(self, REQUEST, RESPONSE, URL1, urls=None):
""" removes Zope object(s) 'urls' from catalog """ """ removes Zope object(s) 'urls' from catalog """
...@@ -1333,6 +1360,7 @@ class Catalog(Folder, ...@@ -1333,6 +1360,7 @@ class Catalog(Folder,
RESPONSE.redirect(URL1 + '/manage_catalogView?manage_tabs_message=Object%20Uncataloged') RESPONSE.redirect(URL1 + '/manage_catalogView?manage_tabs_message=Object%20Uncataloged')
security.declareProtected(manage_zcatalog_entries, 'manage_catalogReindex')
def manage_catalogReindex(self, REQUEST, RESPONSE, URL1, urls=None): def manage_catalogReindex(self, REQUEST, RESPONSE, URL1, urls=None):
""" clear the catalog, then re-index everything """ """ clear the catalog, then re-index everything """
elapse = time.time() elapse = time.time()
...@@ -1349,25 +1377,28 @@ class Catalog(Folder, ...@@ -1349,25 +1377,28 @@ class Catalog(Folder,
'Total time: %s<br>' 'Total time: %s<br>'
'Total CPU time: %s' % (`elapse`, `c_elapse`))) 'Total CPU time: %s' % (`elapse`, `c_elapse`)))
security.declareProtected(manage_zcatalog_entries, 'manage_catalogClear')
def manage_catalogClear(self, REQUEST=None, RESPONSE=None, def manage_catalogClear(self, REQUEST=None, RESPONSE=None,
URL1=None, sql_catalog_id=None): URL1=None, sql_catalog_id=None):
""" clears the whole enchilada """ """ clears the whole enchilada """
self.beforeCatalogClear() self.beforeCatalogClear()
self.clear() self._clear()
if RESPONSE and URL1: if RESPONSE and URL1:
RESPONSE.redirect('%s/manage_catalogAdvanced?' \ RESPONSE.redirect('%s/manage_catalogAdvanced?' \
'manage_tabs_message=Catalog%%20Cleared' % URL1) 'manage_tabs_message=Catalog%%20Cleared' % URL1)
security.declareProtected(manage_zcatalog_entries, 'manage_catalogClearReserved')
def manage_catalogClearReserved(self, REQUEST=None, RESPONSE=None, URL1=None): def manage_catalogClearReserved(self, REQUEST=None, RESPONSE=None, URL1=None):
""" clears reserved uids """ """ clears reserved uids """
self.clearReserved() self._clearReserved()
if RESPONSE and URL1: if RESPONSE and URL1:
RESPONSE.redirect('%s/manage_catalogAdvanced?' \ RESPONSE.redirect('%s/manage_catalogAdvanced?' \
'manage_tabs_message=Catalog%%20Cleared' % URL1) 'manage_tabs_message=Catalog%%20Cleared' % URL1)
security.declareProtected(manage_zcatalog_entries, 'manage_catalogFoundItems')
def manage_catalogFoundItems(self, REQUEST, RESPONSE, URL2, URL1, def manage_catalogFoundItems(self, REQUEST, RESPONSE, URL2, URL1,
obj_metatypes=None, obj_metatypes=None,
obj_ids=None, obj_searchterm=None, obj_ids=None, obj_searchterm=None,
...@@ -1404,6 +1435,7 @@ class Catalog(Folder, ...@@ -1404,6 +1435,7 @@ class Catalog(Folder,
RESPONSE.redirect(URL1 + '/manage_catalogView?manage_tabs_message=' + RESPONSE.redirect(URL1 + '/manage_catalogView?manage_tabs_message=' +
urllib.quote('Catalog Updated<br>Total time: %s<br>Total CPU time: %s' % (`elapse`, `c_elapse`))) urllib.quote('Catalog Updated<br>Total time: %s<br>Total CPU time: %s' % (`elapse`, `c_elapse`)))
security.declarePrivate('catalogObject')
def catalogObject(self, object, path, is_object_moved=0): def catalogObject(self, object, path, is_object_moved=0):
"""Add an object to the Catalog by calling all SQL methods and """Add an object to the Catalog by calling all SQL methods and
providing needed arguments. providing needed arguments.
...@@ -1411,6 +1443,7 @@ class Catalog(Folder, ...@@ -1411,6 +1443,7 @@ class Catalog(Folder,
'object' is the object to be catalogged.""" 'object' is the object to be catalogged."""
self._catalogObjectList([object]) self._catalogObjectList([object])
security.declarePrivate('catalogObjectList')
def catalogObjectList(self, object_list, method_id_list=None, def catalogObjectList(self, object_list, method_id_list=None,
disable_cache=0, check_uid=1, idxs=None): disable_cache=0, check_uid=1, idxs=None):
"""Add objects to the Catalog by calling all SQL methods and """Add objects to the Catalog by calling all SQL methods and
...@@ -1696,6 +1729,7 @@ class Catalog(Folder, ...@@ -1696,6 +1729,7 @@ class Catalog(Folder,
if psyco is not None: if psyco is not None:
psyco.bind(_catalogObjectList) psyco.bind(_catalogObjectList)
security.declarePrivate('beforeUncatalogObject')
def beforeUncatalogObject(self, path=None,uid=None): def beforeUncatalogObject(self, path=None,uid=None):
""" """
Set the path as deleted Set the path as deleted
...@@ -1716,6 +1750,7 @@ class Catalog(Folder, ...@@ -1716,6 +1750,7 @@ class Catalog(Folder,
method = getattr(self, method_name) method = getattr(self, method_name)
method(uid = uid) method(uid = uid)
security.declarePrivate('uncatalogObject')
def uncatalogObject(self, path=None, uid=None): def uncatalogObject(self, path=None, uid=None):
""" """
Uncatalog and object from the Catalog. Uncatalog and object from the Catalog.
...@@ -1743,6 +1778,7 @@ class Catalog(Folder, ...@@ -1743,6 +1778,7 @@ class Catalog(Folder,
method = getattr(self, method_name) method = getattr(self, method_name)
method(uid = uid) method(uid = uid)
security.declarePrivate('catalogTranslationList')
def catalogTranslationList(self, object_list): def catalogTranslationList(self, object_list):
"""Catalog translations. """Catalog translations.
""" """
...@@ -1750,6 +1786,7 @@ class Catalog(Folder, ...@@ -1750,6 +1786,7 @@ class Catalog(Folder,
return self.catalogObjectList(object_list, method_id_list = (method_name,), return self.catalogObjectList(object_list, method_id_list = (method_name,),
check_uid=0) check_uid=0)
security.declarePrivate('deleteTranslationList')
def deleteTranslationList(self): def deleteTranslationList(self):
"""Delete translations. """Delete translations.
""" """
...@@ -1762,16 +1799,19 @@ class Catalog(Folder, ...@@ -1762,16 +1799,19 @@ class Catalog(Folder,
except: except:
LOG('SQLCatalog', WARNING, 'could not delete translations', error=sys.exc_info()) LOG('SQLCatalog', WARNING, 'could not delete translations', error=sys.exc_info())
security.declarePrivate('uniqueValuesFor')
def uniqueValuesFor(self, name): def uniqueValuesFor(self, name):
""" return unique values for FieldIndex name """ """ return unique values for FieldIndex name """
method = getattr(self, self.sql_unique_values) method = getattr(self, self.sql_unique_values)
return method(column=name) return method(column=name)
security.declarePrivate('getPaths')
def getPaths(self): def getPaths(self):
""" Returns all object paths stored inside catalog """ """ Returns all object paths stored inside catalog """
method = getattr(self, self.sql_catalog_paths) method = getattr(self, self.sql_catalog_paths)
return method() return method()
security.declarePrivate('getUidForPath')
def getUidForPath(self, path): def getUidForPath(self, path):
""" Looks up into catalog table to convert path into uid """ """ Looks up into catalog table to convert path into uid """
#try: #try:
...@@ -1786,6 +1826,7 @@ class Catalog(Folder, ...@@ -1786,6 +1826,7 @@ class Catalog(Folder,
else: else:
return None return None
security.declarePrivate('getUidDictForPathList')
def getUidDictForPathList(self, path_list): def getUidDictForPathList(self, path_list):
""" Looks up into catalog table to convert path into uid """ """ Looks up into catalog table to convert path into uid """
# Get the appropriate SQL Method # Get the appropriate SQL Method
...@@ -1807,6 +1848,7 @@ class Catalog(Folder, ...@@ -1807,6 +1848,7 @@ class Catalog(Folder,
path_uid_dict[path] = search_result[0].uid path_uid_dict[path] = search_result[0].uid
return path_uid_dict return path_uid_dict
security.declarePrivate('getPathDictForUidList')
def getPathDictForUidList(self, uid_list): def getPathDictForUidList(self, uid_list):
""" Looks up into catalog table to convert uid into path """ """ Looks up into catalog table to convert uid into path """
# Get the appropriate SQL Method # Get the appropriate SQL Method
...@@ -1828,10 +1870,12 @@ class Catalog(Folder, ...@@ -1828,10 +1870,12 @@ class Catalog(Folder,
uid_path_dict[uid] = search_result[0].path uid_path_dict[uid] = search_result[0].path
return uid_path_dict return uid_path_dict
security.declarePrivate('hasPath')
def hasPath(self, path): def hasPath(self, path):
""" Checks if path is catalogued """ """ Checks if path is catalogued """
return self.getUidForPath(path) is not None return self.getUidForPath(path) is not None
security.declarePrivate('getPathForUid')
def getPathForUid(self, uid): def getPathForUid(self, uid):
""" Looks up into catalog table to convert uid into path """ """ Looks up into catalog table to convert uid into path """
try: try:
...@@ -1857,6 +1901,7 @@ class Catalog(Folder, ...@@ -1857,6 +1901,7 @@ class Catalog(Folder,
LOG('SQLCatalog', WARNING, "could not find path from uid %s" % (uid,)) LOG('SQLCatalog', WARNING, "could not find path from uid %s" % (uid,))
return None return None
security.declarePrivate('getMetadataForUid')
def getMetadataForUid(self, uid): def getMetadataForUid(self, uid):
""" Accesses a single record for a given uid """ """ Accesses a single record for a given uid """
if uid is None: if uid is None:
...@@ -1869,10 +1914,12 @@ class Catalog(Folder, ...@@ -1869,10 +1914,12 @@ class Catalog(Folder,
result[k] = getattr(brain,k) result[k] = getattr(brain,k)
return result return result
security.declarePrivate('getIndexDataForUid')
def getIndexDataForUid(self, uid): def getIndexDataForUid(self, uid):
""" Accesses a single record for a given uid """ """ Accesses a single record for a given uid """
return self.getMetadataForUid(uid) return self.getMetadataForUid(uid)
security.declarePrivate('getMetadataForPath')
def getMetadataForPath(self, path): def getMetadataForPath(self, path):
""" Accesses a single record for a given path """ """ Accesses a single record for a given path """
try: try:
...@@ -1892,10 +1939,12 @@ class Catalog(Folder, ...@@ -1892,10 +1939,12 @@ class Catalog(Folder,
"could not find metadata from path %s" % (path,)) "could not find metadata from path %s" % (path,))
return None return None
security.declarePrivate('getIndexDataForPath')
def getIndexDataForPath(self, path): def getIndexDataForPath(self, path):
""" Accesses a single record for a given path """ """ Accesses a single record for a given path """
return self.getMetadataForPath(path) return self.getMetadataForPath(path)
security.declarePrivate('getCatalogMethodIds')
def getCatalogMethodIds(self, def getCatalogMethodIds(self,
valid_method_meta_type_list=valid_method_meta_type_list): valid_method_meta_type_list=valid_method_meta_type_list):
"""Find Z SQL methods in the current folder and above """Find Z SQL methods in the current folder and above
...@@ -1922,6 +1971,7 @@ class Catalog(Folder, ...@@ -1922,6 +1971,7 @@ class Catalog(Folder,
ids.sort() ids.sort()
return ids return ids
security.declarePrivate('getPythonMethodIds')
def getPythonMethodIds(self): def getPythonMethodIds(self):
""" """
Returns a list of all python scripts available in Returns a list of all python scripts available in
...@@ -1949,6 +1999,7 @@ class Catalog(Folder, ...@@ -1949,6 +1999,7 @@ class Catalog(Folder,
column_set.add(related_key_id) column_set.add(related_key_id)
return column_set return column_set
security.declarePrivate('getSQLCatalogRelatedKeyList')
def getSQLCatalogRelatedKeyList(self, key_list=None): def getSQLCatalogRelatedKeyList(self, key_list=None):
""" """
Return the list of related keys. Return the list of related keys.
...@@ -1966,6 +2017,7 @@ class Catalog(Folder, ...@@ -1966,6 +2017,7 @@ class Catalog(Folder,
# Compatibililty SQL Sql # Compatibililty SQL Sql
getSqlCatalogRelatedKeyList = getSQLCatalogRelatedKeyList getSqlCatalogRelatedKeyList = getSQLCatalogRelatedKeyList
security.declarePrivate('getSQLCatalogScriptableKeyList')
def getSQLCatalogScriptableKeyList(self): def getSQLCatalogScriptableKeyList(self):
""" """
Return the list of scriptable keys. Return the list of scriptable keys.
...@@ -1989,12 +2041,14 @@ class Catalog(Folder, ...@@ -1989,12 +2041,14 @@ class Catalog(Folder,
table_index[line.KEY_NAME] = [line.COLUMN_NAME,] table_index[line.KEY_NAME] = [line.COLUMN_NAME,]
return table_index return table_index
security.declarePrivate('getTableIndex')
def getTableIndex(self, table): def getTableIndex(self, table):
""" """
Return a map between index and column for a given table Return a map between index and column for a given table
""" """
return self._getTableIndex(table).copy() return self._getTableIndex(table).copy()
security.declareProtected(access_contents_information, 'isValidColumn')
def isValidColumn(self, column_id): def isValidColumn(self, column_id):
""" """
Tells wether given name is or not an existing column. Tells wether given name is or not an existing column.
...@@ -2009,6 +2063,7 @@ class Catalog(Folder, ...@@ -2009,6 +2063,7 @@ class Catalog(Folder,
result = self.getRelatedKeyDefinition(column_id) is not None result = self.getRelatedKeyDefinition(column_id) is not None
return result return result
security.declarePrivate('getRelatedKeyDefinition')
def getRelatedKeyDefinition(self, key): def getRelatedKeyDefinition(self, key):
""" """
Returns the definition of given related key name if found, None Returns the definition of given related key name if found, None
...@@ -2049,9 +2104,11 @@ class Catalog(Folder, ...@@ -2049,9 +2104,11 @@ class Catalog(Folder,
result[key] = script result[key] = script
return result return result
security.declarePrivate('getScriptableKeyScript')
def getScriptableKeyScript(self, key): def getScriptableKeyScript(self, key):
return self._getgetScriptableKeyDict().get(key) return self._getgetScriptableKeyDict().get(key)
security.declarePrivate('getColumnSearchKey')
def getColumnSearchKey(self, key, search_key_name=None): def getColumnSearchKey(self, key, search_key_name=None):
""" """
Return a SearchKey instance for given key, using search_key_name Return a SearchKey instance for given key, using search_key_name
...@@ -2077,9 +2134,11 @@ class Catalog(Folder, ...@@ -2077,9 +2134,11 @@ class Catalog(Folder,
search_key = self.getSearchKey(key, 'RelatedKey') search_key = self.getSearchKey(key, 'RelatedKey')
return search_key, related_key_definition return search_key, related_key_definition
security.declarePrivate('hasColumn')
def hasColumn(self, column): def hasColumn(self, column):
return self.getColumnSearchKey(column)[0] is not None return self.getColumnSearchKey(column)[0] is not None
security.declarePrivate('getColumnDefaultSearchKey')
def getColumnDefaultSearchKey(self, key, search_key_name=None): def getColumnDefaultSearchKey(self, key, search_key_name=None):
""" """
Return a SearchKey instance which would ultimately receive the value Return a SearchKey instance which would ultimately receive the value
...@@ -2095,6 +2154,7 @@ class Catalog(Folder, ...@@ -2095,6 +2154,7 @@ class Catalog(Folder,
related_key_definition=related_key_definition) related_key_definition=related_key_definition)
return search_key return search_key
security.declareProtected(access_contents_information, 'buildSingleQuery')
def buildSingleQuery(self, key, value, search_key_name=None, logical_operator=None, comparison_operator=None): def buildSingleQuery(self, key, value, search_key_name=None, logical_operator=None, comparison_operator=None):
""" """
From key and value, determine the SearchKey to use and generate a Query From key and value, determine the SearchKey to use and generate a Query
...@@ -2178,6 +2238,7 @@ class Catalog(Folder, ...@@ -2178,6 +2238,7 @@ class Catalog(Folder,
result = None result = None
return result return result
security.declareProtected(access_contents_information, 'buildQueryFromAbstractSyntaxTreeNode')
def buildQueryFromAbstractSyntaxTreeNode(self, node, key, wrap=lambda x: x, ignore_unknown_columns=False): def buildQueryFromAbstractSyntaxTreeNode(self, node, key, wrap=lambda x: x, ignore_unknown_columns=False):
""" """
Build a query from given Abstract Syntax Tree (AST) node by recursing in Build a query from given Abstract Syntax Tree (AST) node by recursing in
...@@ -2223,6 +2284,7 @@ class Catalog(Folder, ...@@ -2223,6 +2284,7 @@ class Catalog(Folder,
is_valid = self.isValidColumn is_valid = self.isValidColumn
return search_key.parseSearchText(search_text, is_valid) return search_key.parseSearchText(search_text, is_valid)
security.declareProtected(access_contents_information, 'parseSearchText')
def parseSearchText(self, search_text, column=None, search_key=None, def parseSearchText(self, search_text, column=None, search_key=None,
is_valid=None): is_valid=None):
if column is None and search_key is None: if column is None and search_key is None:
...@@ -2231,6 +2293,7 @@ class Catalog(Folder, ...@@ -2231,6 +2293,7 @@ class Catalog(Folder,
return self._parseSearchText(self.getSearchKey( return self._parseSearchText(self.getSearchKey(
column, search_key=search_key), search_text, is_valid=is_valid) column, search_key=search_key), search_text, is_valid=is_valid)
security.declareProtected(access_contents_information, 'buildQuery')
def buildQuery(self, kw, ignore_empty_string=True, operator='and', ignore_unknown_columns=False): def buildQuery(self, kw, ignore_empty_string=True, operator='and', ignore_unknown_columns=False):
query_list = [] query_list = []
append = query_list.append append = query_list.append
...@@ -2324,6 +2387,7 @@ class Catalog(Folder, ...@@ -2324,6 +2387,7 @@ class Catalog(Folder,
return ComplexQuery(query_list, logical_operator=operator, return ComplexQuery(query_list, logical_operator=operator,
unknown_column_dict=unknown_column_dict) unknown_column_dict=unknown_column_dict)
security.declarePrivate('buildOrderByList')
def buildOrderByList(self, sort_on=None, sort_order=None, order_by_expression=None): def buildOrderByList(self, sort_on=None, sort_order=None, order_by_expression=None):
""" """
Internal method. Should not be used by code outside buildSQLQuery. Internal method. Should not be used by code outside buildSQLQuery.
...@@ -2373,6 +2437,7 @@ class Catalog(Folder, ...@@ -2373,6 +2437,7 @@ class Catalog(Folder,
append([x]) append([x])
return order_by_list return order_by_list
security.declarePrivate('buildEntireQuery')
def buildEntireQuery(self, kw, query_table='catalog', ignore_empty_string=1, def buildEntireQuery(self, kw, query_table='catalog', ignore_empty_string=1,
limit=None, extra_column_list=(), limit=None, extra_column_list=(),
ignore_unknown_columns=False): ignore_unknown_columns=False):
...@@ -2414,6 +2479,7 @@ class Catalog(Folder, ...@@ -2414,6 +2479,7 @@ class Catalog(Folder,
extra_column_list=extra_column_list, extra_column_list=extra_column_list,
from_expression=from_expression) from_expression=from_expression)
security.declarePrivate('buildSQLQuery')
def buildSQLQuery(self, query_table='catalog', REQUEST=None, def buildSQLQuery(self, query_table='catalog', REQUEST=None,
ignore_empty_string=1, only_group_columns=False, ignore_empty_string=1, only_group_columns=False,
limit=None, extra_column_list=(), limit=None, extra_column_list=(),
...@@ -2434,7 +2500,7 @@ class Catalog(Folder, ...@@ -2434,7 +2500,7 @@ class Catalog(Folder,
# Compatibililty SQL Sql # Compatibililty SQL Sql
buildSqlQuery = buildSQLQuery buildSqlQuery = buildSQLQuery
security.declarePublic('getCannonicalArgumentDict') security.declareProtected(access_contents_information, 'getCannonicalArgumentDict')
def getCannonicalArgumentDict(self, kw): def getCannonicalArgumentDict(self, kw):
""" """
Convert some catalog arguments to generic arguments. Convert some catalog arguments to generic arguments.
...@@ -2518,6 +2584,7 @@ class Catalog(Folder, ...@@ -2518,6 +2584,7 @@ class Catalog(Folder,
LOG('SQLCatalog', WARNING, 'Wrong configuration for sql_catalog_search_keys: %r' % line) LOG('SQLCatalog', WARNING, 'Wrong configuration for sql_catalog_search_keys: %r' % line)
return result return result
security.declarePrivate('getSearchKey')
def getSearchKey(self, column, search_key=None): def getSearchKey(self, column, search_key=None):
""" """
Return an instance of a SearchKey class. Return an instance of a SearchKey class.
...@@ -2533,6 +2600,7 @@ class Catalog(Folder, ...@@ -2533,6 +2600,7 @@ class Catalog(Folder,
search_key = self._getSearchKeyDict().get(column, 'DefaultKey') search_key = self._getSearchKeyDict().get(column, 'DefaultKey')
return getSearchKeyInstance(search_key, column) return getSearchKeyInstance(search_key, column)
security.declarePrivate('getComparisonOperator')
def getComparisonOperator(self, operator): def getComparisonOperator(self, operator):
""" """
Return an instance of an Operator class. Return an instance of an Operator class.
...@@ -2544,6 +2612,7 @@ class Catalog(Folder, ...@@ -2544,6 +2612,7 @@ class Catalog(Folder,
return getComparisonOperatorInstance(operator) return getComparisonOperatorInstance(operator)
security.declarePrivate('queryResults')
def queryResults( def queryResults(
self, self,
sql_method, sql_method,
...@@ -2578,9 +2647,11 @@ class Catalog(Folder, ...@@ -2578,9 +2647,11 @@ class Catalog(Folder,
limit_expression=query['limit_expression'], limit_expression=query['limit_expression'],
) )
security.declarePrivate('getSearchResultsMethod')
def getSearchResultsMethod(self): def getSearchResultsMethod(self):
return getattr(self, self.sql_search_results) return getattr(self, self.sql_search_results)
security.declarePrivate('searchResults')
def searchResults(self, REQUEST=None, **kw): def searchResults(self, REQUEST=None, **kw):
""" Returns a list of brains from a set of constraints on variables """ """ Returns a list of brains from a set of constraints on variables """
if 'only_group_columns' in kw: if 'only_group_columns' in kw:
...@@ -2596,9 +2667,11 @@ class Catalog(Folder, ...@@ -2596,9 +2667,11 @@ class Catalog(Folder,
__call__ = searchResults __call__ = searchResults
security.declarePrivate('getCountResultsMethod')
def getCountResultsMethod(self): def getCountResultsMethod(self):
return getattr(self, self.sql_count_results) return getattr(self, self.sql_count_results)
security.declarePrivate('countResults')
def countResults(self, REQUEST=None, **kw): def countResults(self, REQUEST=None, **kw):
""" Returns the number of items which satisfy the where_expression """ """ Returns the number of items which satisfy the where_expression """
return self.queryResults( return self.queryResults(
...@@ -2609,9 +2682,11 @@ class Catalog(Folder, ...@@ -2609,9 +2682,11 @@ class Catalog(Folder,
**kw **kw
) )
security.declarePrivate('isAdvancedSearchText')
def isAdvancedSearchText(self, search_text): def isAdvancedSearchText(self, search_text):
return isAdvancedSearchText(search_text, self.isValidColumn) return isAdvancedSearchText(search_text, self.isValidColumn)
security.declarePrivate('recordObjectList')
def recordObjectList(self, path_list, catalog=1): def recordObjectList(self, path_list, catalog=1):
""" """
Record the path of an object being catalogged or uncatalogged. Record the path of an object being catalogged or uncatalogged.
...@@ -2619,6 +2694,7 @@ class Catalog(Folder, ...@@ -2619,6 +2694,7 @@ class Catalog(Folder,
method = getattr(self, self.sql_record_object_list) method = getattr(self, self.sql_record_object_list)
method(path_list=path_list, catalog=catalog) method(path_list=path_list, catalog=catalog)
security.declarePrivate('deleteRecordedObjectList')
def deleteRecordedObjectList(self, uid_list=()): def deleteRecordedObjectList(self, uid_list=()):
""" """
Delete all objects which contain any path. Delete all objects which contain any path.
...@@ -2626,6 +2702,7 @@ class Catalog(Folder, ...@@ -2626,6 +2702,7 @@ class Catalog(Folder,
method = getattr(self, self.sql_delete_recorded_object_list) method = getattr(self, self.sql_delete_recorded_object_list)
method(uid_list=uid_list) method(uid_list=uid_list)
security.declarePrivate('readRecordedObjectList')
def readRecordedObjectList(self, catalog=1): def readRecordedObjectList(self, catalog=1):
""" """
Read objects. Note that this might not return all objects since ZMySQLDA limits the max rows. Read objects. Note that this might not return all objects since ZMySQLDA limits the max rows.
...@@ -2634,6 +2711,7 @@ class Catalog(Folder, ...@@ -2634,6 +2711,7 @@ class Catalog(Folder,
return method(catalog=catalog) return method(catalog=catalog)
# Filtering # Filtering
security.declareProtected(manage_zcatalog_entries, 'manage_editFilter')
def manage_editFilter(self, REQUEST=None, RESPONSE=None, URL1=None): def manage_editFilter(self, REQUEST=None, RESPONSE=None, URL1=None):
""" """
This methods allows to set a filter on each zsql method called, This methods allows to set a filter on each zsql method called,
...@@ -2679,6 +2757,7 @@ class Catalog(Folder, ...@@ -2679,6 +2757,7 @@ class Catalog(Folder,
if RESPONSE and URL1: if RESPONSE and URL1:
RESPONSE.redirect(URL1 + '/manage_catalogFilter?manage_tabs_message=Filter%20Changed') RESPONSE.redirect(URL1 + '/manage_catalogFilter?manage_tabs_message=Filter%20Changed')
security.declarePrivate('isMethodFiltered')
def isMethodFiltered(self, method_name): def isMethodFiltered(self, method_name):
""" """
Returns 1 if the method is already filtered, Returns 1 if the method is already filtered,
...@@ -2695,6 +2774,7 @@ class Catalog(Folder, ...@@ -2695,6 +2774,7 @@ class Catalog(Folder,
return 0 return 0
return 0 return 0
security.declarePrivate('getExpression')
def getExpression(self, method_name): def getExpression(self, method_name):
""" Get the filter expression text for this method. """ Get the filter expression text for this method.
""" """
...@@ -2708,6 +2788,7 @@ class Catalog(Folder, ...@@ -2708,6 +2788,7 @@ class Catalog(Folder,
return "" return ""
return "" return ""
security.declarePrivate('getExpressionCacheKey')
def getExpressionCacheKey(self, method_name): def getExpressionCacheKey(self, method_name):
""" Get the key string which is used to cache results """ Get the key string which is used to cache results
for the given expression. for the given expression.
...@@ -2722,6 +2803,7 @@ class Catalog(Folder, ...@@ -2722,6 +2803,7 @@ class Catalog(Folder,
return "" return ""
return "" return ""
security.declarePrivate('getExpressionInstance')
def getExpressionInstance(self, method_name): def getExpressionInstance(self, method_name):
""" Get the filter expression instance for this method. """ Get the filter expression instance for this method.
""" """
...@@ -2735,6 +2817,7 @@ class Catalog(Folder, ...@@ -2735,6 +2817,7 @@ class Catalog(Folder,
return None return None
return None return None
security.declarePrivate('setFilterExpression')
def setFilterExpression(self, method_name, expression): def setFilterExpression(self, method_name, expression):
""" Set the Expression for a certain method name. This allow set """ Set the Expression for a certain method name. This allow set
expressions by scripts. expressions by scripts.
...@@ -2749,6 +2832,7 @@ class Catalog(Folder, ...@@ -2749,6 +2832,7 @@ class Catalog(Folder,
else: else:
self.filter_dict[method_name]['expression_instance'] = None self.filter_dict[method_name]['expression_instance'] = None
security.declarePrivate('isPortalTypeSelected')
def isPortalTypeSelected(self, method_name, portal_type): def isPortalTypeSelected(self, method_name, portal_type):
""" Returns true if the portal type is selected for this method. """ Returns true if the portal type is selected for this method.
XXX deprecated XXX deprecated
...@@ -2763,6 +2847,7 @@ class Catalog(Folder, ...@@ -2763,6 +2847,7 @@ class Catalog(Folder,
return 0 return 0
return 0 return 0
security.declarePrivate('getFilteredPortalTypeList')
def getFilteredPortalTypeList(self, method_name): def getFilteredPortalTypeList(self, method_name):
""" Returns the list of portal types which define """ Returns the list of portal types which define
the filter. the filter.
...@@ -2778,6 +2863,7 @@ class Catalog(Folder, ...@@ -2778,6 +2863,7 @@ class Catalog(Folder,
return [] return []
return [] return []
security.declarePrivate('getFilterDict')
def getFilterDict(self): def getFilterDict(self):
""" """
Utility Method. Utility Method.
...@@ -2797,6 +2883,7 @@ class Catalog(Folder, ...@@ -2797,6 +2883,7 @@ class Catalog(Folder,
return filter_dict return filter_dict
return None return None
security.declarePrivate('getFilterableMethodList')
def getFilterableMethodList(self): def getFilterableMethodList(self):
""" """
Returns only zsql methods wich catalog or uncatalog objets Returns only zsql methods wich catalog or uncatalog objets
...@@ -2812,6 +2899,7 @@ class Catalog(Folder, ...@@ -2812,6 +2899,7 @@ class Catalog(Folder,
method_list = map(lambda method_id: getattr(self, method_id, None), method_dict.keys()) method_list = map(lambda method_id: getattr(self, method_id, None), method_dict.keys())
return filter(lambda method: method is not None, method_list) return filter(lambda method: method is not None, method_list)
security.declarePrivate('getExpressionContext')
def getExpressionContext(self, ob): def getExpressionContext(self, ob):
''' '''
An expression context provides names for TALES expressions. An expression context provides names for TALES expressions.
......
...@@ -24,6 +24,7 @@ from Persistence import Persistent ...@@ -24,6 +24,7 @@ from Persistence import Persistent
from DocumentTemplate.DT_Util import InstanceDict, TemplateDict from DocumentTemplate.DT_Util import InstanceDict, TemplateDict
from DocumentTemplate.DT_Util import Eval from DocumentTemplate.DT_Util import Eval
from AccessControl.Permission import name_trans from AccessControl.Permission import name_trans
from AccessControl.Permissions import manage_zcatalog_entries
from SQLCatalog import CatalogError from SQLCatalog import CatalogError
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from DocumentTemplate.security import RestrictedDTML from DocumentTemplate.security import RestrictedDTML
...@@ -206,9 +207,11 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -206,9 +207,11 @@ class ZCatalog(Folder, Persistent, Implicit):
self.id=id self.id=id
self.title=title self.title=title
security.declarePrivate('getSQLCatalogIdList')
def getSQLCatalogIdList(self): def getSQLCatalogIdList(self):
return self.objectIds(spec=('SQLCatalog',)) return self.objectIds(spec=('SQLCatalog',))
security.declarePublic('getSQLCatalog')
def getSQLCatalog(self, id=None, default_value=None): def getSQLCatalog(self, id=None, default_value=None):
""" """
Get the default SQL Catalog. Get the default SQL Catalog.
...@@ -224,6 +227,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -224,6 +227,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return self._getOb(id, default_value) return self._getOb(id, default_value)
security.declareProtected(manage_zcatalog_entries, 'manage_catalogExportProperties')
def manage_catalogExportProperties(self, REQUEST=None, RESPONSE=None, sql_catalog_id=None): def manage_catalogExportProperties(self, REQUEST=None, RESPONSE=None, sql_catalog_id=None):
""" """
Export properties to an XML file. Export properties to an XML file.
...@@ -232,6 +236,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -232,6 +236,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
return catalog.manage_exportProperties(REQUEST=REQUEST, RESPONSE=RESPONSE) return catalog.manage_exportProperties(REQUEST=REQUEST, RESPONSE=RESPONSE)
security.declareProtected(manage_zcatalog_entries, 'manage_catalogImportProperties')
def manage_catalogImportProperties(self, file, sql_catalog_id=None): def manage_catalogImportProperties(self, file, sql_catalog_id=None):
""" """
Import properties from an XML file. Import properties from an XML file.
...@@ -246,6 +251,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -246,6 +251,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return 0 return 0
return len(catalog) return len(catalog)
security.declarePrivate('getHotReindexingState')
def getHotReindexingState(self): def getHotReindexingState(self):
""" """
Return the current hot reindexing state. Return the current hot reindexing state.
...@@ -255,14 +261,14 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -255,14 +261,14 @@ class ZCatalog(Folder, Persistent, Implicit):
return HOT_REINDEXING_FINISHED_STATE return HOT_REINDEXING_FINISHED_STATE
return value return value
def setHotReindexingState(self, state='', source_sql_catalog_id=None, destination_sql_catalog_id=None, archive_path=None): def _setHotReindexingState(self, state='', source_sql_catalog_id=None, destination_sql_catalog_id=None, archive_path=None):
""" """
Set the state of hot reindexing. Set the state of hot reindexing.
Do not use setProperty because the state should not modified from the ZMI directly. Do not use setProperty because the state should not modified from the ZMI directly.
It must be maintained very carefully. It must be maintained very carefully.
""" """
#LOG("setHotReindexingState call", 300, state) #LOG("_setHotReindexingState call", 300, state)
if source_sql_catalog_id is None: if source_sql_catalog_id is None:
source_sql_catalog_id = self.default_sql_catalog_id source_sql_catalog_id = self.default_sql_catalog_id
...@@ -280,7 +286,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -280,7 +286,7 @@ class ZCatalog(Folder, Persistent, Implicit):
else: else:
raise CatalogError, 'unknown hot reindexing state %s' % state raise CatalogError, 'unknown hot reindexing state %s' % state
def finishHotReindexing(self, source_sql_catalog_id, def _finishHotReindexing(self, source_sql_catalog_id,
destination_sql_catalog_id, skin_selection_dict, destination_sql_catalog_id, skin_selection_dict,
sql_connection_id_dict): sql_connection_id_dict):
""" """
...@@ -292,16 +298,17 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -292,16 +298,17 @@ class ZCatalog(Folder, Persistent, Implicit):
else: else:
current_archive = None current_archive = None
default_catalog_id = self.default_sql_catalog_id default_catalog_id = self.default_sql_catalog_id
self.exchangeDatabases(source_sql_catalog_id=source_sql_catalog_id, self._exchangeDatabases(source_sql_catalog_id=source_sql_catalog_id,
destination_sql_catalog_id=destination_sql_catalog_id, destination_sql_catalog_id=destination_sql_catalog_id,
skin_selection_dict=skin_selection_dict, skin_selection_dict=skin_selection_dict,
sql_connection_id_dict=sql_connection_id_dict) sql_connection_id_dict=sql_connection_id_dict)
# cancel archive use as current catalog before archiving # cancel archive use as current catalog before archiving
if current_archive is not None: if current_archive is not None:
current_archive.cancel() current_archive.cancel()
self.setHotReindexingState(state=HOT_REINDEXING_FINISHED_STATE) self._setHotReindexingState(state=HOT_REINDEXING_FINISHED_STATE)
clearCache(cache_factory_list=('erp5_content_short',)) clearCache(cache_factory_list=('erp5_content_short',))
security.declarePrivate('cancelHotReindexing')
def cancelHotReindexing(self): def cancelHotReindexing(self):
""" """
Cancel a hot reindexing. Cancel a hot reindexing.
...@@ -314,18 +321,19 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -314,18 +321,19 @@ class ZCatalog(Folder, Persistent, Implicit):
raise Exception, 'cancelHotReindexing called while no Hot Reindexing '\ raise Exception, 'cancelHotReindexing called while no Hot Reindexing '\
'was runing. Nothing done.' 'was runing. Nothing done.'
# Remove hot reindexing state # Remove hot reindexing state
self.setHotReindexingState(HOT_REINDEXING_FINISHED_STATE) self._setHotReindexingState(HOT_REINDEXING_FINISHED_STATE)
portal_activities = getToolByName(self, 'portal_activities') portal_activities = getToolByName(self, 'portal_activities')
if portal_activities is not None: if portal_activities is not None:
object_path = self.getPhysicalPath() object_path = self.getPhysicalPath()
# Activities must be removed in the reverse order they were inserted # Activities must be removed in the reverse order they were inserted
# to make sure removing one does not accidntaly trigger the next one. # to make sure removing one does not accidntaly trigger the next one.
method_id_list = ('finishHotReindexing', 'runInventoryMethod', method_id_list = ('_finishHotReindexing', 'runInventoryMethod',
'playBackRecordedObjectList', 'InventoryModule_reindexMovementList' 'playBackRecordedObjectList', 'InventoryModule_reindexMovementList'
'setHotReindexingState') '_setHotReindexingState')
for method_id in method_id_list: for method_id in method_id_list:
portal_activities.flush(object_path, method_id=method_id) portal_activities.flush(object_path, method_id=method_id)
security.declarePrivate('playBackRecordedObjectList')
def playBackRecordedObjectList(self, sql_catalog_id, catalog=0): def playBackRecordedObjectList(self, sql_catalog_id, catalog=0):
""" """
Play back the actions scheduled while hot reindexing was in "record" Play back the actions scheduled while hot reindexing was in "record"
...@@ -371,6 +379,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -371,6 +379,7 @@ class ZCatalog(Folder, Persistent, Implicit):
catalog=1) catalog=1)
# If we were replaying index actions, there is nothing else to do. # If we were replaying index actions, there is nothing else to do.
security.declarePrivate('changeSQLConnectionIds')
def changeSQLConnectionIds(self, folder, sql_connection_id_dict): def changeSQLConnectionIds(self, folder, sql_connection_id_dict):
if sql_connection_id_dict is not None: if sql_connection_id_dict is not None:
if folder.meta_type == 'Z SQL Method': if folder.meta_type == 'Z SQL Method':
...@@ -381,7 +390,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -381,7 +390,7 @@ class ZCatalog(Folder, Persistent, Implicit):
for object in folder.objectValues(): for object in folder.objectValues():
self.changeSQLConnectionIds(object,sql_connection_id_dict) self.changeSQLConnectionIds(object,sql_connection_id_dict)
def exchangeDatabases(self, source_sql_catalog_id, destination_sql_catalog_id, def _exchangeDatabases(self, source_sql_catalog_id, destination_sql_catalog_id,
skin_selection_dict, sql_connection_id_dict): skin_selection_dict, sql_connection_id_dict):
""" """
Exchange two databases. Exchange two databases.
...@@ -395,18 +404,19 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -395,18 +404,19 @@ class ZCatalog(Folder, Persistent, Implicit):
# generated uids since destination catalog was created. # generated uids since destination catalog was created.
self[destination_sql_catalog_id].insertMaxUid() self[destination_sql_catalog_id].insertMaxUid()
LOG('exchangeDatabases skin_selection_dict:',0,skin_selection_dict) LOG('_exchangeDatabases skin_selection_dict:',0,skin_selection_dict)
if skin_selection_dict is not None: if skin_selection_dict is not None:
#LOG('exchangeDatabases skin_selection_dict:',0,'we will do manage_skinLayers') #LOG('_exchangeDatabases skin_selection_dict:',0,'we will do manage_skinLayers')
for skin_name, selection in self.portal_skins.getSkinPaths(): for skin_name, selection in self.portal_skins.getSkinPaths():
if skin_name in skin_selection_dict: if skin_name in skin_selection_dict:
new_selection = tuple(skin_selection_dict[skin_name]) new_selection = tuple(skin_selection_dict[skin_name])
self.portal_skins.manage_skinLayers(skinpath = new_selection, skinname = skin_name, add_skin = 1) self.portal_skins.manage_skinLayers(skinpath = new_selection, skinname = skin_name, add_skin = 1)
LOG('exchangeDatabases sql_connection_id_dict :',0,sql_connection_id_dict) LOG('_exchangeDatabases sql_connection_id_dict :',0,sql_connection_id_dict)
if sql_connection_id_dict is not None: if sql_connection_id_dict is not None:
self.changeSQLConnectionIds(self.portal_skins, sql_connection_id_dict) self.changeSQLConnectionIds(self.portal_skins, sql_connection_id_dict)
security.declareProtected(manage_zcatalog_entries, 'manage_hotReindexAll')
def manage_hotReindexAll(self, source_sql_catalog_id, def manage_hotReindexAll(self, source_sql_catalog_id,
destination_sql_catalog_id, destination_sql_catalog_id,
archive_path=None, archive_path=None,
...@@ -505,7 +515,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -505,7 +515,7 @@ class ZCatalog(Folder, Persistent, Implicit):
# Mark the hot reindex as begun. Each object indexed in the still-current # Mark the hot reindex as begun. Each object indexed in the still-current
# catalog will be scheduled for reindex in the future catalog. # catalog will be scheduled for reindex in the future catalog.
LOG('hotReindexObjectList', 0, 'Starting recording') LOG('hotReindexObjectList', 0, 'Starting recording')
self.setHotReindexingState(HOT_REINDEXING_RECORDING_STATE, self._setHotReindexingState(HOT_REINDEXING_RECORDING_STATE,
source_sql_catalog_id=source_sql_catalog_id, source_sql_catalog_id=source_sql_catalog_id,
destination_sql_catalog_id=destination_sql_catalog_id, destination_sql_catalog_id=destination_sql_catalog_id,
archive_path=archive_path) archive_path=archive_path)
...@@ -518,12 +528,12 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -518,12 +528,12 @@ class ZCatalog(Folder, Persistent, Implicit):
# Once reindexing is finished, change the hot reindexing state so that # Once reindexing is finished, change the hot reindexing state so that
# new catalog changes are applied in both catalogs. # new catalog changes are applied in both catalogs.
self.activate(after_tag=final_activity_tag, self.activate(after_tag=final_activity_tag,
priority=base_priority).setHotReindexingState(HOT_REINDEXING_DOUBLE_INDEXING_STATE, priority=base_priority)._setHotReindexingState(HOT_REINDEXING_DOUBLE_INDEXING_STATE,
source_sql_catalog_id=source_sql_catalog_id, source_sql_catalog_id=source_sql_catalog_id,
destination_sql_catalog_id=destination_sql_catalog_id, destination_sql_catalog_id=destination_sql_catalog_id,
archive_path=archive_path) archive_path=archive_path)
# Once in double-indexing mode, planned reindex can be replayed. # Once in double-indexing mode, planned reindex can be replayed.
self.activate(after_method_id='setHotReindexingState', self.activate(after_method_id='_setHotReindexingState',
priority=base_priority).playBackRecordedObjectList( priority=base_priority).playBackRecordedObjectList(
sql_catalog_id=destination_sql_catalog_id) sql_catalog_id=destination_sql_catalog_id)
# Once there is nothing to replay, databases are sync'ed, so the new # Once there is nothing to replay, databases are sync'ed, so the new
...@@ -531,7 +541,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -531,7 +541,7 @@ class ZCatalog(Folder, Persistent, Implicit):
self.activate(after_method_id=('playBackRecordedObjectList', self.activate(after_method_id=('playBackRecordedObjectList',
'InventoryModule_reindexMovementList'), 'InventoryModule_reindexMovementList'),
after_tag='InventoryModule_reindexMovementList', after_tag='InventoryModule_reindexMovementList',
priority=base_priority).finishHotReindexing( priority=base_priority)._finishHotReindexing(
source_sql_catalog_id=source_sql_catalog_id, source_sql_catalog_id=source_sql_catalog_id,
destination_sql_catalog_id=destination_sql_catalog_id, destination_sql_catalog_id=destination_sql_catalog_id,
skin_selection_dict=skin_selection_dict, skin_selection_dict=skin_selection_dict,
...@@ -540,6 +550,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -540,6 +550,7 @@ class ZCatalog(Folder, Persistent, Implicit):
URL1 = REQUEST.get('URL1') URL1 = REQUEST.get('URL1')
RESPONSE.redirect(URL1 + '/manage_catalogHotReindexing?manage_tabs_message=HotReindexing%20Started') RESPONSE.redirect(URL1 + '/manage_catalogHotReindexing?manage_tabs_message=HotReindexing%20Started')
security.declareProtected(manage_zcatalog_entries, 'manage_edit')
def manage_edit(self, RESPONSE, URL1, threshold=1000, REQUEST=None): def manage_edit(self, RESPONSE, URL1, threshold=1000, REQUEST=None):
""" edit the catalog """ """ edit the catalog """
if type(threshold) is not type(1): if type(threshold) is not type(1):
...@@ -549,6 +560,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -549,6 +560,7 @@ class ZCatalog(Folder, Persistent, Implicit):
RESPONSE.redirect(URL1 + '/manage_main?manage_tabs_message=Catalog%20Changed') RESPONSE.redirect(URL1 + '/manage_main?manage_tabs_message=Catalog%20Changed')
security.declareProtected(manage_zcatalog_entries, 'manage_catalogObject')
def manage_catalogObject(self, REQUEST, RESPONSE, URL1, urls=None, sql_catalog_id=None): def manage_catalogObject(self, REQUEST, RESPONSE, URL1, urls=None, sql_catalog_id=None):
""" index Zope object(s) that 'urls' point to """ """ index Zope object(s) that 'urls' point to """
if sql_catalog_id is None: if sql_catalog_id is None:
...@@ -559,6 +571,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -559,6 +571,7 @@ class ZCatalog(Folder, Persistent, Implicit):
catalog.manage_catalogObject(REQUEST, RESPONSE, URL1, urls=urls) catalog.manage_catalogObject(REQUEST, RESPONSE, URL1, urls=urls)
security.declareProtected(manage_zcatalog_entries, 'manage_uncatalogObject')
def manage_uncatalogObject(self, REQUEST, RESPONSE, URL1, urls=None, sql_catalog_id=None): def manage_uncatalogObject(self, REQUEST, RESPONSE, URL1, urls=None, sql_catalog_id=None):
""" removes Zope object(s) 'urls' from catalog """ """ removes Zope object(s) 'urls' from catalog """
if sql_catalog_id is None: if sql_catalog_id is None:
...@@ -569,6 +582,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -569,6 +582,7 @@ class ZCatalog(Folder, Persistent, Implicit):
catalog.manage_uncatalogObject(REQUEST, RESPONSE, URL1, urls=urls) catalog.manage_uncatalogObject(REQUEST, RESPONSE, URL1, urls=urls)
security.declareProtected(manage_zcatalog_entries, 'manage_catalogReindex')
def manage_catalogReindex(self, REQUEST, RESPONSE, URL1, urls=None, sql_catalog_id=None): def manage_catalogReindex(self, REQUEST, RESPONSE, URL1, urls=None, sql_catalog_id=None):
""" clear the catalog, then re-index everything """ """ clear the catalog, then re-index everything """
if sql_catalog_id is None: if sql_catalog_id is None:
...@@ -578,6 +592,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -578,6 +592,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
catalog.manage_catalogReindex(REQUEST, RESPONSE, URL1, urls=urls) catalog.manage_catalogReindex(REQUEST, RESPONSE, URL1, urls=urls)
security.declarePrivate('refreshCatalog')
def refreshCatalog(self, clear=0, sql_catalog_id=None): def refreshCatalog(self, clear=0, sql_catalog_id=None):
""" re-index everything we can find """ """ re-index everything we can find """
...@@ -585,7 +600,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -585,7 +600,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
paths = catalog.getPaths() paths = catalog.getPaths()
if clear: if clear:
catalog.clear() catalog._clear()
for p in paths: for p in paths:
obj = self.resolve_path(p.path) obj = self.resolve_path(p.path)
...@@ -594,6 +609,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -594,6 +609,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if obj is not None: if obj is not None:
self.catalog_object(obj, p.path, sql_catalog_id=sql_catalog_id) self.catalog_object(obj, p.path, sql_catalog_id=sql_catalog_id)
security.declareProtected(manage_zcatalog_entries, 'manage_catalogClear')
def manage_catalogClear(self, REQUEST=None, RESPONSE=None, URL1=None, sql_catalog_id=None): def manage_catalogClear(self, REQUEST=None, RESPONSE=None, URL1=None, sql_catalog_id=None):
""" clears the whole enchilada """ """ clears the whole enchilada """
if REQUEST is not None and sql_catalog_id is None: if REQUEST is not None and sql_catalog_id is None:
...@@ -603,6 +619,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -603,6 +619,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
catalog.manage_catalogClear(REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL1) catalog.manage_catalogClear(REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL1)
security.declareProtected(manage_zcatalog_entries, 'manage_catalogClearReserved')
def manage_catalogClearReserved(self, REQUEST=None, RESPONSE=None, URL1=None, sql_catalog_id=None): def manage_catalogClearReserved(self, REQUEST=None, RESPONSE=None, URL1=None, sql_catalog_id=None):
""" clears the whole enchilada """ """ clears the whole enchilada """
if REQUEST is not None and sql_catalog_id is None: if REQUEST is not None and sql_catalog_id is None:
...@@ -612,6 +629,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -612,6 +629,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
catalog.manage_catalogClearReserved(REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL1) catalog.manage_catalogClearReserved(REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL1)
security.declareProtected(manage_zcatalog_entries, 'manage_catalogFoundItems')
def manage_catalogFoundItems(self, REQUEST, RESPONSE, URL2, URL1, def manage_catalogFoundItems(self, REQUEST, RESPONSE, URL2, URL1,
obj_metatypes=None, obj_metatypes=None,
obj_ids=None, obj_searchterm=None, obj_ids=None, obj_searchterm=None,
...@@ -661,6 +679,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -661,6 +679,7 @@ class ZCatalog(Folder, Persistent, Implicit):
RESPONSE.redirect(URL1 + '/manage_catalogView?manage_tabs_message=' + RESPONSE.redirect(URL1 + '/manage_catalogView?manage_tabs_message=' +
urllib.quote('Catalog Updated<br>Total time: %s<br>Total CPU time: %s' % (`elapse`, `c_elapse`))) urllib.quote('Catalog Updated<br>Total time: %s<br>Total CPU time: %s' % (`elapse`, `c_elapse`)))
security.declareProtected(manage_zcatalog_entries, 'manage_editSchema')
def manage_editSchema(self, names, REQUEST=None, RESPONSE=None, URL1=None, sql_catalog_id=None): def manage_editSchema(self, names, REQUEST=None, RESPONSE=None, URL1=None, sql_catalog_id=None):
""" add a column """ """ add a column """
if REQUEST is not None and sql_catalog_id is None: if REQUEST is not None and sql_catalog_id is None:
...@@ -671,6 +690,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -671,6 +690,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if REQUEST and RESPONSE: if REQUEST and RESPONSE:
RESPONSE.redirect(URL1 + '/manage_catalogSchema?manage_tabs_message=Schema%20Saved') RESPONSE.redirect(URL1 + '/manage_catalogSchema?manage_tabs_message=Schema%20Saved')
security.declarePrivate('newUid')
def newUid(self, sql_catalog_id=None): def newUid(self, sql_catalog_id=None):
""" """
Allocates a new uid value. Allocates a new uid value.
...@@ -679,12 +699,14 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -679,12 +699,14 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
return catalog.newUid() return catalog.newUid()
security.declarePrivate('getDynamicRelatedKeyList')
def getDynamicRelatedKeyList(self, sql_catalog_id=None,**kw): def getDynamicRelatedKeyList(self, sql_catalog_id=None,**kw):
""" """
Return the list of dynamic related keys. Return the list of dynamic related keys.
""" """
return [] return []
security.declarePrivate('wrapObject')
def wrapObject(self, object, **kw): def wrapObject(self, object, **kw):
""" """
Return a wrapped object for reindexing. Return a wrapped object for reindexing.
...@@ -694,10 +716,12 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -694,10 +716,12 @@ class ZCatalog(Folder, Persistent, Implicit):
#LOG('ZSQLCatalog wrapObject', 0, 'object = %r, kw = %r' % (object, kw)) #LOG('ZSQLCatalog wrapObject', 0, 'object = %r, kw = %r' % (object, kw))
return object return object
security.declarePrivate('catalog_object')
def catalog_object(self, obj, url=None, idxs=[], is_object_moved=0, sql_catalog_id=None, **kw): def catalog_object(self, obj, url=None, idxs=[], is_object_moved=0, sql_catalog_id=None, **kw):
""" wrapper around catalog """ """ wrapper around catalog """
self.catalogObjectList([obj], sql_catalog_id=sql_catalog_id) self.catalogObjectList([obj], sql_catalog_id=sql_catalog_id)
security.declarePrivate('catalogObjectList')
def catalogObjectList(self, object_list, sql_catalog_id=None, disable_archive=0, def catalogObjectList(self, object_list, sql_catalog_id=None, disable_archive=0,
immediate_reindex_archive=1, **kw): immediate_reindex_archive=1, **kw):
"""Catalog a list of objects. """Catalog a list of objects.
...@@ -842,6 +866,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -842,6 +866,7 @@ class ZCatalog(Folder, Persistent, Implicit):
object_list[:] = failed_object_list object_list[:] = failed_object_list
security.declarePrivate('uncatalog_object')
def uncatalog_object(self, uid=None,path=None, sql_catalog_id=None): def uncatalog_object(self, uid=None,path=None, sql_catalog_id=None):
""" wrapper around catalog """ """ wrapper around catalog """
if uid is None: if uid is None:
...@@ -879,16 +904,19 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -879,16 +904,19 @@ class ZCatalog(Folder, Persistent, Implicit):
destination_catalog.uncatalogObject(uid=uid) destination_catalog.uncatalogObject(uid=uid)
security.declarePrivate('beforeUncatalogObject')
def beforeUncatalogObject(self, uid=None,path=None, sql_catalog_id=None): def beforeUncatalogObject(self, uid=None,path=None, sql_catalog_id=None):
""" wrapper around catalog """ """ wrapper around catalog """
catalog = self.getSQLCatalog(sql_catalog_id) catalog = self.getSQLCatalog(sql_catalog_id)
if catalog is not None: if catalog is not None:
catalog.beforeUncatalogObject(uid=uid,path=path) catalog.beforeUncatalogObject(uid=uid,path=path)
security.declarePrivate('beforeCatalogClear')
def beforeCatalogClear(self): def beforeCatalogClear(self):
""" allow to override this method """ """ allow to override this method """
pass pass
security.declarePrivate('catalogTranslationList')
def catalogTranslationList(self, object_list, sql_catalog_id=None): def catalogTranslationList(self, object_list, sql_catalog_id=None):
"""Catalog translations. """Catalog translations.
""" """
...@@ -896,6 +924,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -896,6 +924,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
catalog.catalogTranslationList(object_list) catalog.catalogTranslationList(object_list)
security.declarePrivate('deleteTranslationList')
def deleteTranslationList(self, sql_catalog_id=None): def deleteTranslationList(self, sql_catalog_id=None):
"""Delete translations. """Delete translations.
""" """
...@@ -903,6 +932,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -903,6 +932,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
catalog.deleteTranslationList() catalog.deleteTranslationList()
security.declarePrivate('uniqueValuesFor')
def uniqueValuesFor(self, name, sql_catalog_id=None): def uniqueValuesFor(self, name, sql_catalog_id=None):
""" returns the unique values for a given FieldIndex """ """ returns the unique values for a given FieldIndex """
catalog = self.getSQLCatalog(sql_catalog_id) catalog = self.getSQLCatalog(sql_catalog_id)
...@@ -911,6 +941,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -911,6 +941,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return () return ()
security.declarePrivate('getpath')
def getpath(self, uid, sql_catalog_id=None): def getpath(self, uid, sql_catalog_id=None):
""" """
Return the path to a cataloged object given its uid Return the path to a cataloged object given its uid
...@@ -924,6 +955,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -924,6 +955,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return None return None
getPath = getpath getPath = getpath
security.declarePrivate('hasPath')
def hasPath(self, path, sql_catalog_id=None): def hasPath(self, path, sql_catalog_id=None):
""" """
Checks if path is catalogued Checks if path is catalogued
...@@ -932,6 +964,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -932,6 +964,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
return catalog.hasPath(path) return catalog.hasPath(path)
security.declarePrivate('getobject')
def getobject(self, uid, REQUEST=None, sql_catalog_id=None): def getobject(self, uid, REQUEST=None, sql_catalog_id=None):
""" """
Return a cataloged object given its uid Return a cataloged object given its uid
...@@ -948,6 +981,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -948,6 +981,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return obj return obj
getObject = getobject getObject = getobject
security.declarePrivate('getObjectList')
def getObjectList(self, uid_list, REQUEST=None, sql_catalog_id=None): def getObjectList(self, uid_list, REQUEST=None, sql_catalog_id=None):
""" """
Return a cataloged object given its uid Return a cataloged object given its uid
...@@ -957,6 +991,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -957,6 +991,7 @@ class ZCatalog(Folder, Persistent, Implicit):
obj_list.append(self.getObject(uid, REQUEST, sql_catalog_id=sql_catalog_id)) obj_list.append(self.getObject(uid, REQUEST, sql_catalog_id=sql_catalog_id))
return obj_list return obj_list
security.declarePrivate('getMetadataForUid')
def getMetadataForUid(self, rid, sql_catalog_id=None): def getMetadataForUid(self, rid, sql_catalog_id=None):
# !!! do not use docstring here (CVE-2011-0720). # !!! do not use docstring here (CVE-2011-0720).
# return the correct metadata for the cataloged uid # return the correct metadata for the cataloged uid
...@@ -965,6 +1000,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -965,6 +1000,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return catalog.getMetadataForUid(int(rid)) return catalog.getMetadataForUid(int(rid))
return {} return {}
security.declarePrivate('getIndexDataForUid')
def getIndexDataForUid(self, rid, sql_catalog_id=None): def getIndexDataForUid(self, rid, sql_catalog_id=None):
# !!! do not use docstring here (CVE-2011-0720). # !!! do not use docstring here (CVE-2011-0720).
# return the current index contents for the specific uid # return the current index contents for the specific uid
...@@ -977,30 +1013,36 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -977,30 +1013,36 @@ class ZCatalog(Folder, Persistent, Implicit):
getMetadataForRID = getMetadataForUid getMetadataForRID = getMetadataForUid
getIndexDataForRID = getIndexDataForUid getIndexDataForRID = getIndexDataForUid
security.declarePrivate('schema')
def schema(self, sql_catalog_id=None): def schema(self, sql_catalog_id=None):
return self.getColumnIds(sql_catalog_id=sql_catalog_id) return self.getColumnIds(sql_catalog_id=sql_catalog_id)
security.declarePrivate('indexes')
def indexes(self, sql_catalog_id=None): def indexes(self, sql_catalog_id=None):
return self.getColumnIds(sql_catalog_id=sql_catalog_id) return self.getColumnIds(sql_catalog_id=sql_catalog_id)
security.declarePrivate('names')
def names(self, sql_catalog_id=None): def names(self, sql_catalog_id=None):
catalog = self.getSQLCatalog(sql_catalog_id) catalog = self.getSQLCatalog(sql_catalog_id)
if catalog is not None: if catalog is not None:
return catalog.names return catalog.names
return {} return {}
security.declarePrivate('getColumnIds')
def getColumnIds(self, sql_catalog_id=None): def getColumnIds(self, sql_catalog_id=None):
catalog = self.getSQLCatalog(sql_catalog_id) catalog = self.getSQLCatalog(sql_catalog_id)
if catalog is not None: if catalog is not None:
return catalog.getColumnIds() return catalog.getColumnIds()
return [] return []
security.declarePublic('hasColumn')
def hasColumn(self, column, sql_catalog_id=None): def hasColumn(self, column, sql_catalog_id=None):
catalog = self.getSQLCatalog(sql_catalog_id) catalog = self.getSQLCatalog(sql_catalog_id)
if catalog is not None: if catalog is not None:
return catalog.hasColumn(column) return catalog.hasColumn(column)
return False return False
security.declarePrivate('getAttributesForColumn')
def getAttributesForColumn(self, column, sql_catalog_id=None): def getAttributesForColumn(self, column, sql_catalog_id=None):
""" """
Return the attribute names as a single string Return the attribute names as a single string
...@@ -1013,6 +1055,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1013,6 +1055,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return catalog.getColumnIds(sql_catalog_id=sql_catalog_id) return catalog.getColumnIds(sql_catalog_id=sql_catalog_id)
return [] return []
security.declarePrivate('editSchema')
def editSchema(self,names, sql_catalog_id=None): def editSchema(self,names, sql_catalog_id=None):
catalog = self.getSQLCatalog(sql_catalog_id) catalog = self.getSQLCatalog(sql_catalog_id)
if catalog is not None: if catalog is not None:
...@@ -1050,6 +1093,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1050,6 +1093,7 @@ class ZCatalog(Folder, Persistent, Implicit):
security.declarePublic('buildSqlQuery') security.declarePublic('buildSqlQuery')
buildSqlQuery = buildSQLQuery buildSqlQuery = buildSQLQuery
security.declarePublic('searchResults')
def searchResults(self, REQUEST=None, sql_catalog_id=None, **kw): def searchResults(self, REQUEST=None, sql_catalog_id=None, **kw):
""" """
Search the catalog according to the ZTables search interface. Search the catalog according to the ZTables search interface.
...@@ -1063,6 +1107,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1063,6 +1107,7 @@ class ZCatalog(Folder, Persistent, Implicit):
__call__=searchResults __call__=searchResults
security.declarePublic('countResults')
def countResults(self, REQUEST=None, sql_catalog_id=None, **kw): def countResults(self, REQUEST=None, sql_catalog_id=None, **kw):
""" """
Counts the number of items which satisfy the query defined in kw. Counts the number of items which satisfy the query defined in kw.
...@@ -1076,6 +1121,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1076,6 +1121,7 @@ class ZCatalog(Folder, Persistent, Implicit):
meta_types=() # Sub-object types that are specific to this object meta_types=() # Sub-object types that are specific to this object
security.declarePrivate('valid_roles')
def valid_roles(self): def valid_roles(self):
"Return list of valid roles" "Return list of valid roles"
obj=self obj=self
...@@ -1096,6 +1142,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1096,6 +1142,7 @@ class ZCatalog(Folder, Persistent, Implicit):
roles.sort() roles.sort()
return roles return roles
security.declarePrivate('ZopeFindAndApply')
def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None, def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None,
obj_searchterm=None, obj_expr=None, obj_searchterm=None, obj_expr=None,
obj_mtime=None, obj_mspec=None, obj_mtime=None, obj_mspec=None,
...@@ -1196,6 +1243,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1196,6 +1243,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return result return result
security.declarePrivate('resolve_url')
def resolve_url(self, path, REQUEST): def resolve_url(self, path, REQUEST):
""" """
Attempt to resolve a url into an object in the Zope Attempt to resolve a url into an object in the Zope
...@@ -1213,6 +1261,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1213,6 +1261,7 @@ class ZCatalog(Folder, Persistent, Implicit):
except: except:
pass pass
security.declarePrivate('resolve_path')
def resolve_path(self, path): def resolve_path(self, path):
# !!! do not use docstring here (CVE-2011-0720). # !!! do not use docstring here (CVE-2011-0720).
# Attempt to resolve a url into an object in the Zope # Attempt to resolve a url into an object in the Zope
...@@ -1226,6 +1275,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1226,6 +1275,7 @@ class ZCatalog(Folder, Persistent, Implicit):
except: except:
pass pass
security.declarePrivate('manage_normalize_paths')
def manage_normalize_paths(self, REQUEST, sql_catalog_id=None): def manage_normalize_paths(self, REQUEST, sql_catalog_id=None):
"""Ensure that all catalog paths are full physical paths """Ensure that all catalog paths are full physical paths
...@@ -1271,6 +1321,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1271,6 +1321,7 @@ class ZCatalog(Folder, Persistent, Implicit):
'%s unchanged.' % (len(fixed), len(removed), unchanged), '%s unchanged.' % (len(fixed), len(removed), unchanged),
action='./manage_main') action='./manage_main')
security.declarePrivate('getTableIds')
def getTableIds(self, sql_catalog_id=None): def getTableIds(self, sql_catalog_id=None):
"""Returns all tables of this catalog """Returns all tables of this catalog
""" """
...@@ -1279,6 +1330,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1279,6 +1330,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return catalog.getTableIds() return catalog.getTableIds()
return [] return []
security.declarePrivate('getCatalogSearchResultKeys')
def getCatalogSearchResultKeys(self, sql_catalog_id=None): def getCatalogSearchResultKeys(self, sql_catalog_id=None):
"""Return selected tables of catalog which are used in JOIN. """Return selected tables of catalog which are used in JOIN.
catalaog is always first catalaog is always first
...@@ -1288,6 +1340,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1288,6 +1340,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return catalog.sql_search_result_keys return catalog.sql_search_result_keys
return [] return []
security.declarePrivate('getCatalogSearchTableIds')
def getCatalogSearchTableIds(self, sql_catalog_id=None): def getCatalogSearchTableIds(self, sql_catalog_id=None):
"""Return selected tables of catalog which are used in JOIN. """Return selected tables of catalog which are used in JOIN.
catalaog is always first catalaog is always first
...@@ -1297,6 +1350,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1297,6 +1350,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return catalog.getCatalogSearchTableIds() return catalog.getCatalogSearchTableIds()
return [] return []
security.declarePrivate('getResultColumnIds')
def getResultColumnIds(self, sql_catalog_id=None): def getResultColumnIds(self, sql_catalog_id=None):
"""Return selected tables of catalog which are used """Return selected tables of catalog which are used
as metadata as metadata
...@@ -1306,6 +1360,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1306,6 +1360,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return catalog.getResultColumnIds() return catalog.getResultColumnIds()
return [] return []
security.declarePrivate('getCatalogMethodIds')
def getCatalogMethodIds(self, sql_catalog_id=None): def getCatalogMethodIds(self, sql_catalog_id=None):
"""Find Z SQL methods in the current folder and above """Find Z SQL methods in the current folder and above
This function return a list of ids. This function return a list of ids.
...@@ -1315,6 +1370,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1315,6 +1370,7 @@ class ZCatalog(Folder, Persistent, Implicit):
return catalog.getCatalogMethodIds() return catalog.getCatalogMethodIds()
return {} return {}
security.declareProtected(manage_zcatalog_entries, 'manage_editFilter')
def manage_editFilter(self, REQUEST=None, RESPONSE=None, URL1=None, sql_catalog_id=None): def manage_editFilter(self, REQUEST=None, RESPONSE=None, URL1=None, sql_catalog_id=None):
""" """
This methods allows to set a filter on each zsql method called, This methods allows to set a filter on each zsql method called,
...@@ -1328,6 +1384,7 @@ class ZCatalog(Folder, Persistent, Implicit): ...@@ -1328,6 +1384,7 @@ class ZCatalog(Folder, Persistent, Implicit):
if catalog is not None: if catalog is not None:
catalog.manage_editFilter(REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL1) catalog.manage_editFilter(REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL1)
security.declarePrivate('getFilterableMethodList')
def getFilterableMethodList(self, sql_catalog_id=None): def getFilterableMethodList(self, sql_catalog_id=None):
""" """
Returns only zsql methods wich catalog or uncatalog objets Returns only zsql methods wich catalog or uncatalog objets
......
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