Skip to content

Instantly share code, notes, and snippets.

@davisagli
davisagli / gist:2317969
Created April 6, 2012 07:42
Marmoset patching
import inspect
def marmoset_patch(func, s, r):
source = inspect.getsource(func).replace(s, r)
exec source in func.func_globals
func.func_code = func.func_globals[func.__name__].func_code
def foo():
print 1
print 2
<browser:view
for="plone.portlets.interfaces.IPortletAssignmentMapping"
name="+"
class=".adding.PortletAdding"
allowed_interface="plone.app.portlets.browser.interfaces.IPortletAdding"
permission="plone.app.portlets.ManagePortlets"
/>
<browser:view
for="plone.app.portlets.interfaces.IUserPortletAssignmentMapping"
@davisagli
davisagli / gist:5668242
Created May 29, 2013 05:59
Celery & Zope transactions

Let's test integration between Zope transactions and celery tasks.

First let's turn off celery's asynchronous behavior so it's easier to check when tasks have been queued:

>>> from celery import Celery
>>> celery = Celery('example.celery')
>>> celery.conf.CELERY_ALWAYS_EAGER = True
>>> celery.conf.BROKER_BACKEND = 'memory'
@davisagli
davisagli / gist:5824662
Last active April 24, 2022 11:19
Running Zope code as a celery task
from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import noSecurityManager
from Testing.makerequest import makerequest
from ZODB.POSException import ConflictError
from celery import Celery, Task
from email.Header import Header
from zope.app.publication.interfaces import BeforeTraverseEvent
from zope.component.hooks import setSite
from zope.event import notify
import email
@davisagli
davisagli / gist:5824709
Last active December 18, 2015 18:19
Calling Salesforce as a celery task, from within a Zope transaction
from celery import Celery, Task
from requests.exceptions import ConnectionError
from simple_salesforce import Salesforce
import transaction
celery = Celery(
'path.to.this.module',
broker='amqp://localhost//',
backend='amqp://localhost//',
)
@davisagli
davisagli / gist:5961329
Created July 9, 2013 21:11
Plone dependencies on CMFDefault
$ grep --exclude-dir=CMFDefault --exclude-dir=.svn --exclude='*.pyc' --exclude='*.pyo' --exclude='*.zexp' -r 'Products.CMFDefault' *
Products/Archetypes/ExtensibleMetadata.py:from Products.CMFDefault.utils import _dtmldir
Products/Archetypes/interfaces/base.py: Products.CMFDefault.SkinnedFolder.SkinnedFolder
Products/Archetypes/tests/layer.py: import Products.CMFDefault
Products/Archetypes/tests/layer.py: zcml.load_config('configure.zcml', Products.CMFDefault)
Products/ATContentTypes/content/document.py:from Products.CMFDefault.utils import SimpleHTMLParser
Products/CMFCalendar/browser/calendartool.py:from Products.CMFDefault.browser.utils import decode
Products/CMFCalendar/browser/calendartool.py:from Products.CMFDefault.browser.utils import memoize
Products/CMFCalendar/browser/calendartool.py:from Products.CMFDefault.browser.utils import ViewBase
Products/CMFCalendar/browser/configure.zcml: layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
from .models import appmaker
from OFS.Application import install_products
from pyramid.config import Configurator
from pyramid_zodbconn import get_connection
from zope.configuration import xmlconfig
from zope.configuration.config import ConfigurationMachine
import os
def root_factory(request):
@davisagli
davisagli / gist:7047450
Created October 18, 2013 20:06
Here's what configuring Plone would look like if ZCML were Python. Wonder if we can cut some of this out.
# --------------------------------------------------
# site.zcml
# --------------------------------------------------
def includeme(config):
zope = config.get_namespace('http://namespaces.zope.org/zope')
meta = config.get_namespace('http://namespaces.zope.org/meta')
five = config.get_namespace('http://namespaces.zope.org/five')
zope.include(package='Products.Five')
@davisagli
davisagli / ram.ipynb
Last active August 8, 2023 16:10
Experiments with Plone object RAM use (ipython notebook viewer: http://nbviewer.ipython.org/7407505)
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
from Products.Five import BrowserView
from zope.interface import implementer
from zope.publisher.interfaces.browser import IPublishTraverse
@implementer(IPublishTraverse)
class AuthorView(BrowserView):
user_id = None
def publishTraverse(self, request, name):