Skip to content

Instantly share code, notes, and snippets.

View EBNull's full-sized avatar

EBNull EBNull

  • New York, NY
View GitHub Profile
@EBNull
EBNull / iclassfactory2.py
Created November 19, 2012 21:53
Create an instance of a COM object with IClassFactory2 for objects that require licensing.
import pythoncom
import win32com.client
from uuid import UUID
from ctypes import OleDLL, WinDLL, c_long, c_ulong, byref, WINFUNCTYPE, POINTER, c_char_p, pointer
from ctypes.wintypes import HRESULT
IID_IClassFactory2 = "{B196B28F-BAB4-101A-B69C-00AA00341D07}"
def CoCreateInstanceLicenced(clsid_class, iid_interface=pythoncom.IID_IDispatch, key='', dwClsContext=pythoncom.CLSCTX_SERVER, pythoncom_iid_interface=pythoncom.IID_IDispatch, pythoncom_wrapdisp=True):
@EBNull
EBNull / tempdb.py
Created October 16, 2012 20:56
In django, create a database definition that only exists for the current session.
"""
Example:
import django.db
from cStringIO import StringIO
def inspect_mdb(filename):
db_dict = {'ENGINE': 'access.pyodbc', 'OPTIONS': {'driver': 'access'}, 'NAME': filename}
with temp_db(db_dict, 'test') as using:
django.db.connections[using].cursor() #Connect immediately
@EBNull
EBNull / reversem2m.py
Created September 28, 2012 17:43
Django reverse M2M field (for admin, etc)
#This class lets you add the 'other side' of a m2m to a django model.
#Why this is better than just using related_name:
# -Admin sees it as a real field, gives you the filter_horizontal widget if you ask
#
#Issues:
# -Probably breaks syncdb (table tries to be created twice)
#
#Non-issues:
# -Doesn't break south (custom introspection rule makes this field ignored)
@EBNull
EBNull / clipboard.py
Created September 4, 2012 21:03
Copy / Retreive text to / from windows clipboard
def clipcopy(z):
#http://stackoverflow.com/questions/579687
z = unicode(z)
try:
import win32clipboard
except ImportError:
from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
@EBNull
EBNull / qsettingswrap.py
Created April 4, 2012 18:15
Wrap a QSettings object with a more pythonic attribute based paradigm
from PyQt4 import QtCore
from config import get_data_path
class SettingsWrapper(object):
"""Wrapper for QSettings using attribute access with conversion functions"""
_known_settings = {
#'setting': (conversionFuncRead, conversionFuncReadAttr, default),
}
def __init__(self, settings, subtree=None):
self._settings = settings
from django.contrib import admin
#Allow lookup by any kwargs in admin
#Reverts https://docs.djangoproject.com/en/1.2/releases/1.2.4/#restricted-filters-in-admin-interface
admin.ModelAdmin.lookup_allowed = lambda i, k, v: True
@EBNull
EBNull / usergroups_win32.py
Created February 28, 2012 22:06
Get current user groups (win32)
import ctypes
import win32net
def getUsername(name_format=8):
#Only NameUserSamCompatable supported if not on a domain.
#'' is returned in that case.
#NameUserSamCompatable = 2
#NameUserPrincipal = 8,
bufsz = ctypes.c_ulong()
ctypes.windll.secur32.GetUserNameExW(name_format, None, ctypes.byref(bufsz))
@EBNull
EBNull / basicapp.py
Created February 16, 2012 19:08
Basis for a general PyQT app
import os
import sys
import ctypes
import traceback
import logging
log = logging.getLogger()
from QtBinding import QtCore, QtGui
def remove_window_context_help_button(qwindow):
@EBNull
EBNull / forcefocus.py
Created December 1, 2011 19:11
Force windows application focus (attempting to bypass SetForegroundWindow restrictions)
import platform
#wnd is a HWND
def forceFocus(wnd):
if platform.system() != 'Windows':
return
SPI_GETFOREGROUNDLOCKTIMEOUT = 0x2000
SPI_SETFOREGROUNDLOCKTIMEOUT = 0x2001
SW_RESTORE = 9
@EBNull
EBNull / AdminTemplateRedirector.py
Created September 27, 2011 17:04
Changes prefix for admin templates based on request path
"""
Before loading an admin template, it first modifies the template name based on the current thread's request url.
It will also fall back to the standard template name if themodified one is not found.
This uses a threadlocal hack.
settings.py:
MIDDLEWARE_CLASSES = (
...,
'AdminTemplateRedirector.AdminTemplateRedirectorMiddleware',
...