Skip to content
This repository has been archived by the owner on Jul 14, 2020. It is now read-only.

Commit

Permalink
Merge pull request #198 from idiot1347/master
Browse files Browse the repository at this point in the history
fix OR operator and NOT operator
  • Loading branch information
gulbinas committed Nov 23, 2014
2 parents a53ebc7 + 7a6f4a7 commit f8422f0
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 11 deletions.
8 changes: 2 additions & 6 deletions mongokit/operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,7 @@ def __str__(self):
return '<'+repr.join([i.__name__ for i in self._operands]) + '>'

def validate(self, value):
if type(value) in self._operands:
return True
return False
return isinstance(value, tuple(self._operands))


class NOT(SchemaOperator):
Expand All @@ -74,9 +72,7 @@ def __str__(self):
return '<not '+repr.join([i.__name__ for i in self._operands]) + '>'

def validate(self, value):
if type(value) in self._operands:
return False
return True
return not isinstance(value, tuple(self._operands))


class IS(SchemaOperator):
Expand Down
26 changes: 21 additions & 5 deletions tests/test_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,13 +366,15 @@ class BadMyDoc(SchemaDocument):
class MyDoc(SchemaDocument):
structure = {
"foo":OR(unicode,int),
"bar":OR(unicode, datetime)
"bar":OR(unicode, datetime),
"foobar": OR(basestring, int),
}

mydoc = MyDoc()
assert str(mydoc.structure['foo']) == '<unicode or int>'
assert str(mydoc.structure['bar']) == '<unicode or datetime>'
assert mydoc == {'foo': None, 'bar': None}
assert str(mydoc.structure['foobar']) == '<basestring or int>'
assert mydoc == {'foo': None, 'bar': None, 'foobar': None}
mydoc['foo'] = 3.0
self.assertRaises(SchemaTypeError, mydoc.validate)
mydoc['foo'] = u"foo"
Expand All @@ -381,7 +383,6 @@ class MyDoc(SchemaDocument):
mydoc.validate()
mydoc['foo'] = 'bar'
self.assertRaises(SchemaTypeError, mydoc.validate)

mydoc['foo'] = datetime.now()
self.assertRaises(SchemaTypeError, mydoc.validate)
mydoc['foo'] = u"foo"
Expand All @@ -391,6 +392,14 @@ class MyDoc(SchemaDocument):
mydoc.validate()
mydoc['bar'] = 25
self.assertRaises(SchemaTypeError, mydoc.validate)
mydoc['bar'] = u"bar"
mydoc["foo"] = u"foo"
mydoc["foobar"] = "foobar"
mydoc.validate()
mydoc["foobar"] = datetime.now()
self.assertRaises(SchemaTypeError, mydoc.validate)
mydoc["foobar"] = 3
mydoc.validate()

def test_not_operator(self):
from mongokit import NOT
Expand All @@ -407,15 +416,18 @@ class BadMyDoc(SchemaDocument):
class MyDoc(SchemaDocument):
structure = {
"foo":NOT(unicode,int),
"bar":NOT(datetime)
"bar":NOT(datetime),
"foobar": NOT(basestring)
}

mydoc = MyDoc()
assert str(mydoc.structure['foo']) == '<not unicode, not int>', str(mydoc.structure['foo'])
assert str(mydoc.structure['bar']) == '<not datetime>'
assert mydoc == {'foo': None, 'bar': None}
assert str(mydoc.structure['foobar']) == '<not basestring>'
assert mydoc == {'foo': None, 'bar': None, 'foobar': None}
assert mydoc['foo'] is None
assert mydoc['bar'] is None
assert mydoc['foobar'] is None
mydoc['foo'] = 3
self.assertRaises(SchemaTypeError, mydoc.validate)
mydoc['foo'] = u"foo"
Expand All @@ -431,6 +443,10 @@ class MyDoc(SchemaDocument):
mydoc.validate()
mydoc['bar'] = 25
mydoc.validate()
mydoc['foobar'] = 'abc'
self.assertRaises(SchemaTypeError, mydoc.validate)
mydoc['foobar'] = 1
mydoc.validate()

def test_is_operator(self):
from mongokit import IS
Expand Down

0 comments on commit f8422f0

Please sign in to comment.