If you find yourself writing Shell scripts have a look at Google’s awesome style guide.
Tag: Programming
This Is Why You Shouldn’t Interrupt a Programmer
ADN: Python Development Has Nothing To Do With Zoology
https://alpha.app.net/riyad/post/12202500
Summing Booleans For Fun And Profit
I came up with a IMHO nice piece of code while working with and getting to know Python.
incomplete_items = [
item.quantity_ordered > item.quantity_delivered for item in order.items
]
if any(incomplete_items):
do_something()
This feels clean and obvious. It might not be very efficient though. :/
has_incomplete_items = sum(
item.quantity_ordered > item.quantity_delivered for item in order.items
)
if has_incomplete_items:
do_something()
Doing it this way can be more efficient, since it can leverage generators and doesn’t need to go through the list again with
any
. But using
sum
over booleans feels hackish and non-obvious … 🙁
MagicMock With Spec
Thanks to @immoralist I’ve learned a new Python testing trick. I didn’t know about the “spec” argument for MagicMock. m(
Let’s see an example:
from mock import MagicMock
class SomeModel(object):
foo = "f**"
bar = "b**"
m = MagicMock(spec=SomeModel)
Here we create a mock object which mimics the interface of
SomeModel
as we would expect, returning mock values for things we access.
>>> m.foo <MagicMock name='mock.foo' id='4506756880'> >>> m.bar <MagicMock name='mock.bar' id='4506754192'>
Let’s see what happens if we call something else:
>>> m.baz
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../env/lib/python2.7/site-packages/mock.py", line 658, in __getattr__
raise AttributeError("Mock object has no attribute %r" % name)
AttributeError: Mock object has no attribute 'baz'
It will fail loudly while a mock object without a spec would have returned a mock value as it did in the previous example.
But the magic doesn’t end there. You can still set additional attributes/methods “by hand” and have them not fail even if they aren’t part of the original spec.
>>> m.baz = "bazzzzz" >>> m.baz 'bazzzzz'
Learning new things makes me happy. 😀
Tripping Over Property Setters in Python
In Python there is a simple way to make methods behave like properties using the @property decorator. But this only covers the getter side of things. What if you want to have a setter function for this “property”? Well there is a way. 🙂
Consider the following example:
import json
class SomeModel(object):
_foo = '{"foo":["bar", "baz"]}'
@property
def foo(self):
return json.loads(self._foo)
@foo.setter
def foo_setter(self, new_value):
self._foo = json.dumps(new_value)
m = SomeModel()
Now you can use the
foo()
method like a property.
>>> m.foo
{u'foo': [u'bar', u'baz']}
This is a simple way to have a property contain a JSON string but access it as a Python dict, doing (de-)serialization on the fly.
So what if you want to set the value using a dict?
>>> m.foo = ["foo", "bar"] Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: can't set attribute
This is can easily trip up even seasoned Python developers. I’ve read code that did exactly this and I (as a novice) had to find out why the code failed. m(
The solution is quite simple … but “non-obvious” (as in: I wouldn’t have thought of that without consulting the docs) 🙁
@foo.setter
def foo(self, new_value)
self._foo = json.dumps(new_value)
Notice the method name? The setter and the getter methods have to have the same name!
API Response Fail
If you must use XML in your APIs … OK, I can handle that. But if your responses look like this … I hate you!

WHY?!?!
ADN: Lonely Coder in the Rain
https://alpha.app.net/riyad/post/9406239
Transforming Code into Beautiful, Idiomatic Python
Raymond Hettinger gives a great, concise and immediately useful examples of idiomatic Python.
Reporting 1.2k crashes
Interesting proposition: how do you report 1.2k crashes at once?
