Skip to content

Instantly share code, notes, and snippets.

@lonetwin
lonetwin / text_transforms.py
Created August 17, 2021 10:16
Transform a piece of text by appling an ordered list of string transformations to input text
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
from itertools import chain
from functools import reduce, partial
def apply_substitutions(text, substitutions):
"""Apply an ordered list of string transformations to input text
@lonetwin
lonetwin / tracer.py
Created April 14, 2018 20:41
tracer.py - Quick and dirty python 'strace'
#!/usr/bin/python
""" tracer.py: Quick and dirty python 'strace'
"""
import os
import os.path
import sys
import linecache
from functools import wraps
@lonetwin
lonetwin / simple_test.py
Created September 6, 2017 22:47
Difference in parameterized tests with nose and nose2
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# With nose, this test will (incorrectly) pass
# With nose2, this test will (correctly) fail
import unittest
class TestSomething(unittest.TestCase):
def validate(self, x, y):
@lonetwin
lonetwin / pip_meta_path_finder.py
Created May 16, 2016 13:15
Auto-install missing python modules
import sys
import pip
from importlib import import_module
from importlib.abc import MetaPathFinder
class PipMetaPathFinder(MetaPathFinder):
"""A importlib.abc.MetaPathFinder to auto-install missing modules using pip
"""
def find_spec(fullname, path, target=None):
@lonetwin
lonetwin / random_functions.sh
Last active April 26, 2016 13:59
Collection of bashrc functions (and their bash completions) I find useful
# execute an interactive python shell on a remote machine,
# over ssh, after coping my local pythonrc to that machine
# (my pythonrc available here: https://gist.github.com/lonetwin/5902720)
function rpython {
DEST='/tmp/.pythonrc.py'
scp -q $PYTHONSTARTUP $1:$DEST
ssh -t $1 -- "PYTHONSTARTUP=$DEST python"
ssh $1 "rm $DEST"
}
# - setup completion for rpython
@lonetwin
lonetwin / dlt-log-app.py
Last active March 11, 2016 09:23
Minimal python ctypes based example of logging to GENIVI Diagnostic Log and Trace Daemon
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Minimal example of writing logs to a dlt-daemon from a python app. The
# message will look like this when printed out using
# "dlt-receive -a localhost":
# 2016/03/10 10:24:42.772153 290716359 016 ECU1 DLTD INTM log info V 1 [ApplicationID 'APPY' registered for PID 29, Description=APPY service]
# 2016/03/10 10:24:42.772178 290716360 017 ECU1 DLTD INTM log info V 1 [ContextID 'APPY' registered for ApplicationID 'APPY', Description=Context for APPY]
# 2016/03/10 10:24:42.772182 290716359 000 ECU1 APPY APPY log info V 1 [This is a log message]
# 2016/03/10 10:24:42.772185 290716360 018 ECU1 DLTD INTM log info V 1 [Unregistered ContextID 'APPY' for ApplicationID 'APPY']
# 2016/03/10 10:24:42.772190 290716360 019 ECU1 DLTD INTM log info V 1 [Unregistered ApplicationID 'APPY']
@lonetwin
lonetwin / locked_open.py
Last active December 8, 2022 08:05
Simple python file locking context manager example on linux using python stdlib's `fcntl.flock`
import logging
import fcntl
from contextlib import contextmanager
@contextmanager
def locked_open(filename, mode='r'):
"""locked_open(filename, mode='r') -> <open file object>
Context manager that on entry opens the path `filename`, using `mode`
(default: `r`), and applies an advisory write lock on the file which
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def page_category_filter(bid_request, config):
if config["mode"] == "whitelist":
return bool(
bid_request["categories"] & set(config["categories"])
)
else:
return bool(
config["categories"] and not
@lonetwin
lonetwin / custom_sftp.py
Last active January 14, 2023 14:36
Replacing openssh's external sftp server with a custom sftp server based on paramiko [DEPRECATED -- please see comment]
#!/usr/bin/env python
# A more detailed explaination will come as a blog post soon, but in brief,
# here is the problem that led to this:
#
# For various reasons we have a requirement to implement an 'sftp' like
# abstraction/interface for a service that we provide. Basically we need to
# present objects in our application as a filesystem accessible over sftp.
#
# The way we have decided to go about this is to replace the 'standard' openssh
# sftp subsystem command entry in /etc/ssh/sshd_config on our servers with our
@lonetwin
lonetwin / Git dot files management
Last active October 2, 2023 13:38
A simple way to manage dotfiles with git without silly symlinks and special tools. Just use negative matches in your .gitignore !
I like to manage dotfiles without having to mess with silly symlinks or having
to install/configure specific dotfile managament tools. So here's what I did:
$ cd ~
$ git init .
$ echo '*' > .gitignore # ignore all files by default
$ echo '!.bashrc' >> .gitignore # ...and then tell git what files not to *not* ignore
$ # ...add other files you may want to track to *not* ignore
$ git add .bashrc # now actually add the files to git
$ git add .gitignore # add the .gitignore to git