appy.gen: added method wrapper.search1 that returns a single result (which is the only difference with wrapper.search); bugfix while getting objects from the catalog (bypass security when called from code).

This commit is contained in:
Gaetan Delannay 2012-02-09 16:36:50 +01:00
parent cb53c6b9b2
commit 0b6d2d2165
5 changed files with 17 additions and 11 deletions

View file

@ -206,7 +206,7 @@ class ToolMixin(BaseMixin):
if not res: return
res = res[0]
if brain: return res
res = res.getObject()
res = res._unrestrictedGetObject()
if not appy: return res
return res.appy()

View file

@ -846,9 +846,9 @@ class BaseMixin:
self.appy().sort(fieldName, sortKey=sortKey, reverse=reverse)
def notifyWorkflowCreated(self):
'''This method is called by Zope/CMF every time an object is created,
be it temp or not. The objective here is to initialise workflow-
related data on the object.'''
'''This method is called every time an object is created, be it temp or
not. The objective here is to initialise workflow-related data on
the object.'''
wf = self.getWorkflow()
# Get the initial workflow state
initialState = self.State(name=False)

View file

@ -12,13 +12,14 @@ acronym {cursor: help;}
input[type=image] { border: 0; background: none; }
input[type=checkbox] { border: 0; background: none; cursor: pointer;}
input[type=radio] { border: 0; background: none; cursor: pointer;}
input[type=file] { border: 0px solid #cccccc; background-color: #f8f8f8;
cursor: pointer;}
input[type=button] { border: 1px solid #cccccc; background-color: #f8f8f8;
cursor: pointer;}
input[type=file] { border: 0px solid #cccccc;
background-color: #f8f8f8; cursor: pointer;}
input[type=button] { border: 1px solid #cccccc;
background-color: #f8f8f8; cursor: pointer;}
input[type=submit] { border: 1px solid #cccccc; background-color: #f8f8f8;
cursor: pointer; }
input[type=password] { border: 1px solid #cccccc; background-color: #f8f8f8;}
input[type=password] { border: 1px solid #cccccc; background-color: #f8f8f8;
font-family: Lucida,Helvetica,Arial,sans-serif;}
input[type=text] { border: 1px solid #cccccc; background-color: #f8f8f8;
font-family: Lucida,Helvetica,Arial,sans-serif;
margin-bottom: 1px}

View file

@ -99,9 +99,9 @@
<input type="hidden" name="pwd_empty" id="pwd_empty" value="0"/>
<span>Login</span>&nbsp;
<input type="text" size="15" name="__ac_name" id="__ac_name" value=""/>&nbsp;
<input type="text" size="25" name="__ac_name" id="__ac_name" value=""/>&nbsp;
<span>Password</span>&nbsp;
<input type="password" size="15" name="__ac_password" id="__ac_password"/>
<input type="password" size="25" name="__ac_password" id="__ac_password"/>
<input type="submit" name="submit" onclick="setLoginVars()"
tal:define="label python: _('Login');" tal:attributes="value label; alt label;"/>
</form>

View file

@ -244,6 +244,11 @@ class AbstractWrapper(object):
maxResults=maxResults, noSecurity=noSecurity)
return [o.appy() for o in res['objects']]
def search1(self, *args, **kwargs):
'''Identical to m_search above, but returns a single result (if any).'''
res = self.search(*args, **kwargs)
if res: return res[0]
def count(self, klass, noSecurity=False, **fields):
'''Identical to m_search above, but returns the number of objects that
match the search instead of returning the objects themselves. Use