The reduce(..., True) function kind of bothers me in this code. Python has the all(...) function to achieve that functionality.
for rule in self.rules:
if not rule.canPost:
return False
return True
That's the same number of lines of code, doesn't require two imports, and is way easier to follow. I love functional programming but Python (intentionally, see reduce in py3) is not a language for doing it. return all(rule.canPost for rule in self.rules)