Commit 30ab2e11 by Roman Krejcik

fixed queries with User as query argument

eg Subscription.Query.get(user=User(objectId='foo'))
parent efb00e40
......@@ -45,19 +45,19 @@ class ParseType(object):
@staticmethod
def convert_to_parse(python_object, as_pointer=False):
is_object = isinstance(python_object, Object)
is_object = isinstance(python_object, ParseResource) #User is derived from ParseResouce not Object, check against ParseResource
if is_object and not as_pointer:
return dict([(k, ParseType.convert_to_parse(v, as_pointer=True))
for k, v in python_object._editable_attrs.items()
])
python_type = Object if is_object else type(python_object)
python_type = ParseResource if is_object else type(python_object)
# classes that need to be cast to a different type before serialization
transformation_map = {
datetime.datetime: Date,
Object: Pointer
ParseResource: Pointer
}
if python_type in transformation_map:
......
......@@ -222,7 +222,7 @@ class TestQuery(unittest.TestCase):
ParseBatcher().batch_delete(GameScore.Query.all())
ParseBatcher().batch_delete(Game.Query.all())
cls.game = Game(title="Candyland")
cls.game = Game(title="Candyland", creator=None)
cls.game.save()
cls.scores = [GameScore(score=s, player_name='John Doe', game=cls.game) for s in range(1, 6)]
......@@ -415,6 +415,7 @@ class TestUser(unittest.TestCase):
def setUp(self):
self.username = TestUser.USERNAME
self.password = TestUser.PASSWORD
self.game = None
try:
u = User.login(self.USERNAME, self.PASSWORD)
......@@ -425,6 +426,9 @@ class TestUser(unittest.TestCase):
def tearDown(self):
self._destroy_user()
if self.game:
self.game.delete()
self.game = None
def testCanSignUp(self):
self._destroy_user()
......@@ -463,6 +467,12 @@ class TestUser(unittest.TestCase):
self.assertNotEqual(user.updatedAt, original_updatedAt,
'Failed to batch update user data: updatedAt not changed')
def testUserAsQueryArg(self):
user = self._get_user()
g = self.game = Game(title='G1', creator=user)
g.save()
self.assertEqual(1, len(Game.Query.filter(creator=user)))
class TestPush(unittest.TestCase):
"""
......
......@@ -12,7 +12,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from parse_rest.core import ResourceRequestLoginRequired
from parse_rest.core import ResourceRequestLoginRequired, ParseError
from parse_rest.connection import API_ROOT
from parse_rest.datatypes import ParseResource, ParseType
from parse_rest.query import QueryManager
......@@ -60,8 +60,7 @@ class User(ParseResource):
url = self._absolute_url
data = self._to_native()
response = self.__class__.PUT(url, extra_headers=session_header,
batch=batch, **data)
response = User.PUT(url, extra_headers=session_header, batch=batch, **data)
def call_back(response_dict):
self.updatedAt = response_dict['updatedAt']
......@@ -74,7 +73,7 @@ class User(ParseResource):
@login_required
def delete(self):
session_header = {'X-Parse-Session-Token': self.sessionToken}
return self.DELETE(self._absolute_url, extra_headers=session_header)
return User.DELETE(self._absolute_url, extra_headers=session_header)
@staticmethod
def signup(username, password, **kw):
......@@ -101,7 +100,7 @@ class User(ParseResource):
try:
User.POST(url, email=email)
return True
except:
except ParseError:
return False
def _to_native(self):
......@@ -113,7 +112,7 @@ class User(ParseResource):
return '_User'
def __repr__(self):
return '<User:%s (Id %s)>' % (self.username, self.objectId)
return '<User:%s (Id %s)>' % (getattr(self, 'username', None), self.objectId)
User.Query = QueryManager(User)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment