Skip to content

Instantly share code, notes, and snippets.

View dvarrazzo's full-sized avatar

Daniele Varrazzo dvarrazzo

View GitHub Profile
#!/usr/bin/env python3
"""
Apply database patches.
Applied patches are recorded in the schema_patch table of the database.
The dsn to connect to defaults to a local one (empty connection string). It can
be chosen using the command line or an environment variable. Patches
application is interactive by default.
@dvarrazzo
dvarrazzo / dicttuple.py
Last active September 7, 2022 16:08
DictCursor for psycopg 3
class DictTuple(tuple):
"""Tuple class with added item getting by name.
"""
def __new__(cls, d):
rv = super().__new__(cls, d.values())
rv._map = d
return rv
def __repr__(self):
return f"{type(self).__qualname__}({self._map!r})"
@dvarrazzo
dvarrazzo / ditaa_rst.py
Last active June 8, 2022 04:05
ditaa ascii art diagrams in reStructuredText
#!/usr/bin/env python
"""Custom reST_ directive for ditaa_ integration.
.. _reST: http://docutils.sourceforge.net/rst.html
.. _ditaa: http://ditaa.sourceforge.net/
"""
import os
import tempfile
from zlib import adler32
@dvarrazzo
dvarrazzo / stream.mermaid
Created May 1, 2022 19:41
Flow diagram of a cursor.stream() iteration in psycopg 3
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@dvarrazzo
dvarrazzo / prepare.py
Created September 28, 2012 01:19
An example of psycopg2 cursor supporting prepared statements
#!/usr/bin/env python
"""An example of cursor dealing with prepared statements.
A cursor can be used as a regular one, but has also a prepare() statement. If
prepare() is called, execute() and executemany() can be used without query: in
this case the parameters are passed to the prepared statement. The functions
also execute the prepared statement if the query is the same prepared before.
Prepared statements aren't automatically deallocated when the cursor is
deleted, but are when the cursor is closed. For long-running sessions creating
@dvarrazzo
dvarrazzo / tests.yaml
Created March 1, 2021 00:13
Sketch of psycopg3 test action
name: Tests
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
tests-python:
@dvarrazzo
dvarrazzo / dchost
Last active January 27, 2021 16:21
#!/bin/bash
# Return the ip address for a container in docker-compose
set -euo pipefail
# set -x
if [[ "${1:-}" == "" ]]; then
echo "usage: $0 container
@dvarrazzo
dvarrazzo / ministan.py
Last active April 19, 2020 01:00
A simple way to generate valid xhtml in Python (circa 2007)
r"""Implementation of a `stan`_\ -like XML description language.
.. _stan: http://www.kieranholland.com/code/documentation/nevow-stan/
An example XHTML page can be generated by:
.. python::
def items():
return [ T.li['foo'], T.li['bar'], T.li['baz'] ]
@dvarrazzo
dvarrazzo / test_anyio.py
Created April 1, 2020 11:02
A test to use psycopg3 with anyio
"""
A quick test to try and run psycopg3 with anyio
"""
import anyio
from psycopg3 import exceptions as exc
from psycopg3.waiting import Wait, Ready
from psycopg3.connection import AsyncConnection
import logging
#!/bin/bash
# A backup solution based on rsync with hard links and no deletion of old images
# Deletion would be delegated to a script such as weeder
# https://pypi.org/project/weeder/
set -euo pipefail
set -x
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"