Mario Orlandi's Snippets

16/07/2009

Retrieve (optional) constant values from settings file

Filed under: snippets — Tags: — morlandi @ 10:31
def get_thumbnail(filename, arg=""):

    kwargs  = {\
        'prefix': '',
        'subdir': '_thumbs',
        'size': (80,80),
        'crop': False,
        'enlarge': False,
        'quality': 75,
    }

    for a in kwargs.keys():
        if hasattr(settings, 'THUMBNAIL_%s' % a.upper()):
            kwargs.update({a: getattr(settings, 'THUMBNAIL_%s' % a.upper())})

    kwargs.update(filename=filename)

    if arg.find('crop') != -1:
        kwargs.update(crop=True)
    if arg.find('enlarge') != -1:
        kwargs.update(enlarge=True)
    quality_pat = re.compile(r'q(\d+)')
    m = quality_pat.search(arg)
    if m:
        quality = int(m.group(1))
        if quality > 0 and quality <= 100:
            kwargs.update(quality=quality)
    size_pat = re.compile(r'(\d+)x(\d+)')
    m = size_pat.search(arg)
    if m:
        kwargs.update(size=(int(m.group(1)), int(m.group(2))))

    return Thumbnail(**kwargs)

10/07/2009

Simple horizontal list

Filed under: snippets — Tags: — morlandi @ 06:39

HTML
<div id=”navcontainer”>
<ul>
<li><a href=”#” id=”current”>Item one</a></li>
<li><a href=”#”>Item two</a></li>
<li><a href=”#”>Item three</a></li>
</ul>
</div>

CSS
#navlist li
{
display: inline;
list-style-type: none;
padding-right: 20px;
}

21/05/2009

newSecurityManager

Filed under: snippets — Tags: , — morlandi @ 17:43
from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager
...

user = self.context.getWrappedOwner()
newSecurityManager(self.request, user)

self.doProtectedMethod()

noSecurityManager()

createPortalObject()

Filed under: snippets — Tags: , — morlandi @ 17:42
    def createPortalObject(self,folder,type_name,title):
        """ Helper per a portal object of specific type in the given folder """
        objId = None
        try:
            id = self.context.plone_utils.normalizeString(title, relaxed=True)
            objId = folder.invokeFactory(id=id,type_name=type_name)
        except Exception, e:
            self.log(str(e))
            id = folder.generateUniqueId(type_name)
            objId = folder.invokeFactory(id=id,type_name=type_name)
        self.log( 'createPortalObject(): objId = \"%s\"' % (objId) )

        obj = getattr(folder,objId,None)
        obj.setTitle(title)
        obj.reindexObject()

        return obj

transaction savepoint

Filed under: snippets — Tags: , — morlandi @ 17:41
transaction.get().savepoint(optimistic=True)

Portal Catalog samples

Filed under: snippets — Tags: , — morlandi @ 17:40
from Products.CMFCore.utils import getToolByName
catalog = getToolByName(context, 'portal_catalog')
# available indexes:
print catalog.indexes()
# available metadata columns:
print catalog.schema()

(1)
basePath = '/'.join(self.getPhysicalPath())
query = filter
query['sort_on'] = 'getObjPositionInParent'
query['sort_order'] = 'reverse'
query['path'] = {'query' : basePath, 'depth' : levels}
query['portal_type'] = types
brains = catalog.searchResults(query)

(2)
purchaseBrains = context.portal_catalog.searchResults(portal_type='Purchase',getId=id)

(3)
query = {}
query['portal_type'] = 'Purchase'
query['purchaseId'] = purchaseId
purchaseBrains = context.portal_catalog.searchResults(query)

(4)
purchaseBrains = context.portal_catalog.searchResults( portal_type='Purchase', purchaseId = purchaseId )

(5)
t = (DateTime.now() - 1).Date()
folder = getattr(portal,'downloads')
folderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(folder)
query = {}
query['created'] = {'query': t, 'range': 'max'}
query['path'] = {'query' : folderPath, 'depth' : 1}
query['portal_type'] = ('Folder',)
brains = catalog.searchResults(query)

Move items between two folders

Filed under: snippets — Tags: , — morlandi @ 17:40
from Products.CMFCore.utils import getToolByName
catalog = getToolByName(context, 'portal_catalog')
urltool = getToolByName(context, "portal_url")
portal = urltool.getPortalObject()

sourceFolder = getattr(portal,'italia')
sourceFolderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(sourceFolder)

targetFolder = getattr(portal,'italia2')
targetFolderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(targetFolder)

print str(sourceFolder) + ' ' + sourceFolderPath
print str(targetFolder) + ' ' + targetFolderPath

query = {}
query['path'] = {'query' : sourceFolderPath, 'depth' : 2}
query['portal_type'] = ('SalesArea',)
brains = catalog.searchResults(query,sort_on='getId')
# for reverse sorting: sort_order='reverse'

for brain in brains:
    print brain.getId
    folder = brain.getObject().aq_parent
    print folder.getId
    cb = folder.manage_cutObjects(ids=[brain.getId])
    targetFolder.manage_pasteObjects(cb)

return printed

Retrieve and delete old items

Filed under: snippets — Tags: , — morlandi @ 17:39
import DateTime
from Products.CMFCore.utils import getToolByName
catalog = getToolByName(context, 'portal_catalog')
urltool = getToolByName(context, "portal_url")
portal = urltool.getPortalObject()

t = (DateTime.now() - 2).Date()
folder = getattr(portal,'downloads')
folderPath = urltool.getPortalPath() + '/' + urltool.getRelativeContentURL(folder)

print 'Deleting documents in "%s" created before %s ...' % (folderPath,t)

query = {}
query['path'] = {'query' : folderPath, 'depth' : 1}
query['created'] = {'query': t, 'range': 'max'}
query['portal_type'] = ('Folder',)
brains = catalog.searchResults(query)

ids=[]
for brain in brains:
    ids.append(brain.id)
print ids

folder.manage_delObjects(ids=ids)

return printed

Check Member Role in Context

Filed under: snippets — Tags: , — morlandi @ 17:38
# verifies if the member has expected roles in context

    def _checkMemberRole(self):
        authorized = False
        membership_tool = getToolByName(self.context, 'portal_membership')
        member = membership_tool.getAuthenticatedMember()
        if member is not None:
            roles = member.getRolesInContext(self.context)
            if 'Manager' in roles or 'UT' in roles:
                authorized = True
        return authorized

tal:on-error

Filed under: snippets — Tags: , — morlandi @ 17:37
    <tal:dontcrash tal:on-error="structure python:context.plone_log('Error %s on %s while rendering portlet %s'%(error.type, error.value, slot[0])) or
                                        '&lt;div class=\'error\'&gt;Error %s on %s: %s&lt;/div&gt;' % (error.type, slot[0], error.value)">

        ...

    </tal:dontcrash>
Older Posts »

Blog at WordPress.com.