Skip to content

Instantly share code, notes, and snippets.

View lukasgraf's full-sized avatar

Lukas Graf lukasgraf

  • 4teamwork AG
  • Bern, Switzerland
View GitHub Profile
@lukasgraf
lukasgraf / logging_sslsocket.py
Created October 24, 2014 20:54
LoggingSSLSocket
from http.server import BaseHTTPRequestHandler, HTTPServer
from socket import socket
from socketserver import ThreadingMixIn
from threading import Thread
import logging
import ssl
class LoggingSSLSocket(ssl.SSLSocket):
@lukasgraf
lukasgraf / trace_register.py
Created October 11, 2015 15:34
CSRF debug helper: Trace object registrations
"""Helper to trace ZODB object registrations in order to debug CSRF false
positives with plone.protect.
This helper is intended for DEBUGGING, not for use in production!
"""
from collections import namedtuple
from functools import partial
from threading import local
from ZODB.utils import u64
@lukasgraf
lukasgraf / com.py
Created March 11, 2016 18:48
Logging Demo
from log import setup_logger
class Communicator(object):
def __init__(self, logger=None):
if logger is None:
logger = setup_logger(__name__)
self.log = logger
@lukasgraf
lukasgraf / monkey.py
Created December 9, 2013 20:37
Patching Dexterity Container to use AddPortalContent for manage_pasteObjects
from plone.dexterity.content import Container
# Change permission for manage_pasteObjects to "Add portal content"
# See https://dev.plone.org/ticket/9177
# XXX Find a way to do this without patching __ac_permissions__ directly
def drop_protected_attr_from_ac_permissions(attribute, classobj):
new_mappings = []
for mapping in Container.__ac_permissions__:
perm, attrs = mapping
@lukasgraf
lukasgraf / upload_headers.pt
Last active December 19, 2015 11:39
UploadHeaders view
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
lang="en"
metal:use-macro="context/main_template/macros/master"
i18n:domain="opengever.maintenance">
<head>
<metal:head metal:fill-slot="head_slot">
<style>
@lukasgraf
lukasgraf / session_example.py
Created October 27, 2015 20:54
Using requests sessions
import requests
urls = ['https://en.wikipedia.org/wiki/%s' % n for n in range(100)]
# Code that creates a new connection for every request
for url in urls:
r = requests.get(url)
data = r.text
print len(data)
@lukasgraf
lukasgraf / configure.zcml
Created October 11, 2015 16:02
CSRF debug helper: Trigger CSRF protection
<configure
xmlns:browser="http://namespaces.zope.org/browser">
<browser:page
name="trigger-csrf"
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
class=".trigger.TriggerCSRFProtection"
permission="cmf.ManagePortal"
/>
@lukasgraf
lukasgraf / coldist.py
Created August 21, 2011 14:42
Distributing items across columns
from math import ceil
class ColumnDistributor(list):
"""Distributes a list of items across a given number of columns.
>>> items = list('ABCDEFGHIJKLM')
>>> columns = ColumnDistributor(items)
>>> columns.distribute(4)
>>> for c in columns:
@lukasgraf
lukasgraf / checkout.py
Created January 21, 2015 12:46
External Payment Processor example
# -*- coding: utf-8 -*-
from ftw.shop.interfaces import IPaymentProcessor
from ftw.shop.interfaces import IShoppingCart
from ftwshop.adminpay.interfaces import IAdminpayAccountConfig
from ftwshop.adminpay.interfaces import IGlobalAdminpaySettings
from plone.registry.interfaces import IRegistry
from Products.Five.browser import BrowserView
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from zope.component import adapts
from zope.component import getMultiAdapter
lukasgraf@helios ~/Plone/buildouts/opengever/og-core-4.x $ bin/buildout -vvvvvvv
Installing 'mr.developer', 'lovely.buildouthttp'.
We have the distribution that satisfies 'mr.developer==1.21'.
We have the best distribution that satisfies 'lovely.buildouthttp'.
Picked: lovely.buildouthttp = 0.5.0
mr.developer: Queued 'opengever.maintenance' for checkout.
mr.developer: Updated 'opengever.maintenance' with git.
lovely.buildouthttp: Added credentials 'foo', 'http://psc.4teamwork.ch'
lovely.buildouthttp: Added credentials 'bar', 'https://svn.4teamwork.ch'
Installing 'zc.buildout', 'setuptools'.