Skip to content

Instantly share code, notes, and snippets.

View mgd020's full-sized avatar

mgd020 mgd020

View GitHub Profile
@mgd020
mgd020 / strip_image.py
Created March 7, 2020 10:34
Strip info from Pillow image, correcting rotation
from PIL import Image
EXIF_ORIENTATION = 274
EXIF_ORIENTATION_TRANSPOSE = [
None,
None,
Image.FLIP_LEFT_RIGHT,
@mgd020
mgd020 / progress.py
Created December 6, 2019 00:32
terminal progress bar in python
import sys, re
class TerminalController:
"""
A class that can be used to portably generate formatted output to
a terminal.
`TerminalController` defines a set of instance variables whose
values are initialized to the control sequence necessary to
perform a given action. These can be simply included in normal
@mgd020
mgd020 / force-replace-print.js
Created December 6, 2019 00:29
Override print dialog
function forceOpen() {
var url = "http://www.google.com";
window.open(url) ? location.reload() : (location.href = url);
}
window.addEventListener("beforeprint", function (e) { e.preventDefault(), forceOpen() })
window.matchMedia("print").addListener(function (e) { e.matches && forceOpen() })
@mgd020
mgd020 / xml_sax_parse_string.py
Last active December 2, 2019 05:18
Parse an XML snippet with regular expressions only.
import re
from xml.sax.saxutils import unescape
tags_pattern = re.compile(r"</(?P<close>\S+)>|<(?P<open>[^>!?/\s]+)(\s+(?P<attrs>.*?))?(?P<empty>/)?\s*>|<!--(?P<comment>.*?)-->|(?P<cdata><!\[CDATA\[)")
attrs_pattern = re.compile(r"\s*(?P<name>\S+)\s*=\s*(?P<quote>\"|')(?P<value>.*?)(?P=quote)")
cdata_close_pattern = re.compile(r"\]\]>")
escaped_entities = {"&quot;": '"', "&apos;": "'"}
@mgd020
mgd020 / jira2es.py
Created October 30, 2019 04:17
parse JIRA api and put it into ES for analysis
"""
requirements:
jira<3
elasticsearch<7
elasticsearch-dsl<7
raven<7
python-dateutil<3
jsonpointer<3
"""
import re
import sys
from collections import Mapping, Container
from itertools import chain
from array import array
def deep_getsizeof(o):
seen = set()
todo = {id(o): o}
import sys, re
class TerminalController:
"""
A class that can be used to portably generate formatted output to
a terminal.
`TerminalController` defines a set of instance variables whose
values are initialized to the control sequence necessary to
perform a given action. These can be simply included in normal
function forceOpen() {
var url = "http://www.google.com";
window.open(url) ? location.reload() : (location.href = url);
}
window.addEventListener("beforeprint", function (e) { e.preventDefault(), forceOpen() })
window.matchMedia('print').addListener(function (e) { e.matches && forceOpen() })
fnv1a_128_prime = 309485009821345068724781371
fnv1a_128_offset = 144066263297769815596495629667062367629
fnv1a_128_mask = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
def fnv1a_128(bs):
h = fnv1a_offset
for b in bs:
h ^= b
h *= fnv1a_prime
def base26_encode(n, max_len=6):
# base-26 alphabet (A-Z)
value = ''
digits = n
while digits > 0:
if len(value) == max_len:
raise ValueError(n)
value += chr((digits % 26) + A)
digits /= 26
value += 'A' * max(max_len - len(value), 0)