Add GET /user/ implementation that works

Previously my GET was just a placeholder so I could build URIs against
it. Now it actually works and returns information on a user
This commit is contained in:
Eli Ribble 2016-05-04 07:16:05 -06:00
parent 69228f21ca
commit 6a2cb087fc
3 changed files with 32 additions and 3 deletions

View File

@ -2,6 +2,8 @@ import json
import pytest
import vanth.platform.user
@pytest.mark.usefixtures('db')
def test_post(client):
@ -13,3 +15,13 @@ def test_post(client):
response = client.post('/user/', data=json.dumps(data))
assert response.status_code == 204
assert response.headers['Location']
@pytest.mark.usefixtures('db')
def test_get(client):
location = vanth.platform.user.create('Blue Stahli', 'blue@stahli.com', 'metamorphosis')
response = client.get(location)
assert response.status_code == 200
assert response.json == {
'name' : 'Blue Stahli',
'username' : 'blue@stahli.com',
}

View File

@ -1,4 +1,5 @@
import sepiida.endpoints
import sepiida.errors
import sepiida.fields
import vanth.platform.user
@ -8,7 +9,7 @@ class User(sepiida.endpoints.APIEndpoint):
ENDPOINT = '/user/'
SIGNATURE = sepiida.fields.JSONObject(s={
'name' : sepiida.fields.String(),
'password' : sepiida.fields.String(),
'password' : sepiida.fields.String(methods=['POST', 'PUT']),
'username' : sepiida.fields.String(),
})
@ -19,5 +20,8 @@ class User(sepiida.endpoints.APIEndpoint):
return None, 204, {'Location': uri}
@staticmethod
def get(uuid): # pylint: disable=unused-argument
return {}
def get(uuid):
users = vanth.platform.user.by_filter({'uuid': [str(uuid)]})
if not users:
raise sepiida.errors.ResourceNotFound()
return users[0]

View File

@ -1,12 +1,25 @@
import uuid
import chryso.connection
import chryso.queryadapter
import passlib.apps
import sepiida.routing
import vanth.tables
def by_filter(filters):
engine = chryso.connection.get()
query = vanth.tables.User.select()
query = chryso.queryadapter.map_and_filter(vanth.tables.User, filters, query)
results = engine.execute(query).fetchall()
return [{
'username' : result[vanth.tables.User.c.username],
'password' : result[vanth.tables.User.c.password],
'name' : result[vanth.tables.User.c.name],
} for result in results]
def create(name, username, password):
engine = chryso.connection.get()