Skip to content

Instantly share code, notes, and snippets.

View davidwtbuxton's full-sized avatar

David Buxton davidwtbuxton

View GitHub Profile
@davidwtbuxton
davidwtbuxton / requirements.txt
Created January 29, 2018 16:35
Specify Python source dependencies for pip with an archive instead of a checkout
# If you are pip installing from a repo instead of pypi, archives are faster than git checkouts.
# Fast.
https://github.com/potatolondon/djangae/archive/6e23d264badd1c7a46a5dc64ef99ea9dc77b20ff.zip
# Slow.
# git+https://github.com/potatolondon/djangae.git@6e23d264badd1c7a46a5dc64ef99ea9dc77b20ff
@davidwtbuxton
davidwtbuxton / example.sh
Created January 9, 2018 18:00
you can't sub-class cStringIO.StringIO on Python 2.7
$ python
Python 2.7.14 (default, Sep 22 2017, 00:06:07)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cStringIO, StringIO, io
>>> class Foo(io.StringIO): pass
...
>>> class Bar(StringIO.StringIO): pass
...
>>> class Baz(cStringIO.StringIO): pass
@davidwtbuxton
davidwtbuxton / chunker.py
Created January 8, 2018 18:52
Recipe for chunking an iterable
import itertools
def chunker(iterable, n):
"""Collect data into chunks.
This is different to the grouper recipe in itertools in that the final
chunk may be shorter.
>>> chunks = chunker('abcde', 2)
>>> list(chunks)
@davidwtbuxton
davidwtbuxton / testing.sh
Last active December 21, 2017 01:01
Testing a variable matches 1 of 2 values (Python 2.7)
$ python -m timeit -s "v = 'foo'" "v == 'foo' or v == 'bar'"
10000000 loops, best of 3: 0.163 usec per loop
$ python -m timeit -s "v = 'bar'" "v == 'foo' or v == 'bar'"
1000000 loops, best of 3: 0.233 usec per loop
$ python -m timeit -s "v = 'baz'" "v == 'foo' or v == 'bar'"
1000000 loops, best of 3: 0.241 usec per loop
$ python -m timeit -s "v = 'foo'" "v in ('foo', 'bar')"
10000000 loops, best of 3: 0.145 usec per loop
$ python -m timeit -s "v = 'bar'" "v in ('foo', 'bar')"
10000000 loops, best of 3: 0.155 usec per loop
@davidwtbuxton
davidwtbuxton / copying.sh
Created December 15, 2017 19:39
Ways of copying a list in Python 2.7
$ python -m timeit -s 'seq = list(range(10))' '[o for o in seq]'
1000000 loops, best of 3: 1.75 usec per loop
$ python -m timeit -s 'seq = list(range(100))' '[o for o in seq]'
100000 loops, best of 3: 13.2 usec per loop
$ python -m timeit -s 'seq = list(range(1000))' '[o for o in seq]'
10000 loops, best of 3: 115 usec per loop
$ python -m timeit -s 'seq = list(range(10))' 'list(seq)'
1000000 loops, best of 3: 0.372 usec per loop
$ python -m timeit -s 'seq = list(range(100))' 'list(seq)'
1000000 loops, best of 3: 0.609 usec per loop
@davidwtbuxton
davidwtbuxton / gist:9af0250ce66ccb64eee4214ab4ab070e
Last active December 14, 2017 18:50
Profiling different ways for testing if there's an empty string value
$ python -m timeit -s "a, b, c, d, e, f = 'abcdef'" "any(v for v in (a, b, c, d, e, f) if v == '')"
1000000 loops, best of 3: 1.51 usec per loop
$ python -m timeit -s "a, b, c, d, e, f = 'abcdef'" "'' in (a, b, c, d, e, f)"
1000000 loops, best of 3: 0.36 usec per loop
$ python -m timeit -s "a, b, c, d, e, f = ' bcdef'" "any(v for v in (a, b, c, d, e, f) if v == '')"
1000000 loops, best of 3: 1.52 usec per loop
$ python -m timeit -s "a, b, c, d, e, f = ' bcdef'" "'' in (a, b, c, d, e, f)"
1000000 loops, best of 3: 0.354 usec per loop
$ python -m timeit -s "a, b, c, d, e, f = 'abcde '" "any(v for v in (a, b, c, d, e, f) if v == '')"
1000000 loops, best of 3: 1.49 usec per loop
@davidwtbuxton
davidwtbuxton / memory_vs_disk.py
Last active December 7, 2017 19:50
Seeing how reading an image file from disk compares to constructing it in memory
import io
import os
import tempfile
import timeit
# A valid PNG file.
png_bytes = (
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08'
'\x06\x00\x00\x00\x1f\x15\xc4\x89\x00\x00\x00\nIDATx\x9cc\x00\x01\x00\x00'
@davidwtbuxton
davidwtbuxton / example.py
Created December 5, 2017 19:48
python 2 string formatting fun
$ python2.7
Python 2.7.14 (default, Sep 22 2017, 00:06:07)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> value = u'\u0141uk\u0105\u015b\u017a'
>>> '%s' % value
u'\u0141uk\u0105\u015b\u017a'
>>> '{}'.format(value)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
@davidwtbuxton
davidwtbuxton / gist:5eb20ae04c33012b2452b4d225952888
Created November 9, 2017 17:33
More test output for 958-computed-field-pagination
(djangae) $ git log HEAD~1..
commit 74bee22fc276276af6dc82db9dc6b933a0d2e6b0 (HEAD -> 958-computed-field-pagination, upstream/958-computed-field-pagination)
Author: Phil Tysoe
Date: Thu Nov 9 17:11:29 2017 +0000
Fix 16 bit max signed int value
(djangae) $ ./runtests.sh
Not running install_deps. Pass --install_deps if you want to install dependencies.
Creating test database for alias 'default'...
@davidwtbuxton
davidwtbuxton / gist:d27c6d8f58e400ddac5e81974c39b0b5
Created November 9, 2017 16:46
Test output for djangae branch 958-computed-field-pagination
(djangae) $ git show
commit 0523c70eba0f7bc7b36933fbbf002e4611086720 (HEAD -> 958-computed-field-pagination, upstream/958-computed-field-pagination)
Merge: 010a6cd1 b96d2284
Author: Phil Tysoe <phil@potatolondon.com>
Date: Thu Nov 9 16:05:51 2017 +0000
Merge branch 'master' into 958-computed-field-pagination
diff --cc CHANGELOG.md
index 4d961159,cb652b0c..0d7ae63e