Commit d5f2c3c5 authored by Ayush Tiwari's avatar Ayush Tiwari Committed by Ayush Tiwari

Products.ERP5.Document: Add SQLMethod class

Create the SQLMethod class based on ZSQLMethods.SQL
class and XMLObject. Also, move attributes to
property in 'SQL Method' property sheets.
parent ad0595d3
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2016 Nexedi SARL and Contributors. All Rights Reserved.
# Ayush Tiwari <ayush.tiwari@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Globals import InitializeClass
from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5Type.XMLObject import XMLObject
from Products.PythonScripts.PythonScript import \
PythonScript as ZopePythonScript
from Products.ZSQLMethods.SQL import SQL as ZSQL
# New ZSQLMethod addition function
def manage_addSQLMethod(self, id, title='',
connection_id = '',
arguments = '',
template = '',
REQUEST=None,
*args,
**kw):
"""
Add ERP5 SQL Method to the folder
"""
id = str(id)
title = str(title)
# Create SQLMethod object container
c = SQLMethod(id, title, connection_id, arguments, template, self)
self._setObject(id, c)
c = self._getOb(id)
if REQUEST is not None:
REQUEST['RESPONSE'].redirect( 'manage_main' )
return c
class SQLMethod(XMLObject, ZSQL):
"""SQLMethod for ERP5.
"""
meta_type = 'ERP5 SQL Method'
portal_type = 'SQL Method'
icon = None
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
# Add constructor methods
constructors = (manage_addSQLMethod,)
# Override manage and manage_main with ZSQL manage and manage_main respectively
manage = manage_main = ZSQL.manage
# View content list, Force /view, Standard option in SQLMethod
manage_options = ({'icon':'', 'label':'View','action':'view'},) \
+ ZSQL.manage_options
# Declarative properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.DublinCore
, PropertySheet.SQLMethod
, PropertySheet.CatalogFilter
)
# Inheritence conflicts solved
__call__ = ZSQL.__call__
__getitem__ = ZSQL.__getitem__
PUT = ZSQL.PUT
index_html = ZSQL.index_html
manage_FTPget = ZSQL.manage_FTPget
dav__init = ZSQL.dav__init
def __init__(self, id, title='',
connection_id = '',
arguments = '',
template = ''
):
"""
Assign attributes to this class and override ZSQL init method to have
consistency with manage_edit(as ZSQL init also creates manage_edit)
"""
# Add the properties as the attributes for the SQL Method objects
# Useful while migrating data from ZSQLMethods to ERP5 SQLMethod objects
self.id = id
# Initializing ZSQL class object is important as this will call manage_edit
# which will change database method properties
ZSQL.__init__(self, id, title, connection_id, arguments, template)
def _setArgumentsSrc(self, value):
"""
We need to override this so as to generate _arg attribute for SQL Method.
'manage_edit' function for ZSQL Method is responsible for creating '_arg'
attribute from arguments_src property. That's why it is required to
call it everytime we edit arguments_src separately.
"""
self._baseSetArgumentsSrc(value)
title = self.getTitle()
arguments = self.getArgumentsSrc()
src = self.getSrc()
connection_id = self.getConnectionId()
self.manage_edit(title, connection_id, arguments, src)
def _edit(self, **kw):
"""
'manange_edit' function for ZSQLMethod needs to be called everytime after
editing SQLMethod object. This would insure the update of _arg and
template attribute for SQLMethod which are used while creating query.
https://github.com/zopefoundation/Products.ZSQLMethods/blob/master/src/Shared/DC/ZRDB/DA.py#L353
"""
XMLObject._edit(self, **kw)
src = self.getSrc()
title = self.title
if title is None:
title = ''
connection_id = self.getConnectionId()
self.manage_edit(title, connection_id, self.arguments_src, src)
InitializeClass(SQLMethod)
......@@ -53,9 +53,10 @@ from Tool import CategoryTool, SimulationTool, RuleTool, IdTool, TemplateTool,\
ConversionTool, RoundingTool, UrlRegistryTool, InterfaceTool,\
CertificateAuthorityTool, InotifyTool, TaskDistributionTool
import ERP5Site
from Document import PythonScript
from Document import PythonScript, SQLMethod
object_classes = ( ERP5Site.ERP5Site,
PythonScript.PythonScriptThroughZMI,
SQLMethod.SQLMethod,
)
portal_tools = ( CategoryTool.CategoryTool,
SimulationTool.SimulationTool,
......
......@@ -2828,7 +2828,7 @@ class Catalog(Folder,
If 'deferred' is True, then returns the deferred connection
"""
for method in self.objectValues():
if method.meta_type == 'Z SQL Method':
if method.meta_type in ('Z SQL Method', 'ERP5 SQL Method',):
if 'deferred' in method.connection_id != deferred:
return method.connection_id
......
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