models: use Marshmallow for serializing/deserializing
This commit is contained in:
parent
e8cd368e38
commit
96e12c33da
@ -14,6 +14,8 @@ iniconfig==2.0.0
|
|||||||
itsdangerous==2.1.2
|
itsdangerous==2.1.2
|
||||||
Jinja2==3.1.2
|
Jinja2==3.1.2
|
||||||
MarkupSafe==2.1.2
|
MarkupSafe==2.1.2
|
||||||
|
marshmallow==3.19.0
|
||||||
|
marshmallow-sqlalchemy==0.29.0
|
||||||
packaging==23.0
|
packaging==23.0
|
||||||
pluggy==1.0.0
|
pluggy==1.0.0
|
||||||
PyJWT==2.6.0
|
PyJWT==2.6.0
|
||||||
|
@ -2,6 +2,7 @@ import os
|
|||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
from flask_marshmallow import Marshmallow
|
||||||
from flask_bcrypt import Bcrypt
|
from flask_bcrypt import Bcrypt
|
||||||
from .config import DevelopmentConfig, ProductionConfig, TestingConfig, overlay_config
|
from .config import DevelopmentConfig, ProductionConfig, TestingConfig, overlay_config
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ else:
|
|||||||
|
|
||||||
bcrypt = Bcrypt(app)
|
bcrypt = Bcrypt(app)
|
||||||
db = SQLAlchemy(app)
|
db = SQLAlchemy(app)
|
||||||
|
ma = Marshmallow()
|
||||||
|
|
||||||
import sachet.server.commands
|
import sachet.server.commands
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from sachet.server import app, db, bcrypt
|
from sachet.server import app, db, ma, bcrypt
|
||||||
from flask import request, jsonify
|
from flask import request, jsonify
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import datetime
|
import datetime
|
||||||
@ -35,6 +35,15 @@ class User(db.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class UserSchema(ma.SQLAlchemySchema):
|
||||||
|
class Meta:
|
||||||
|
model = User
|
||||||
|
|
||||||
|
username = ma.auto_field()
|
||||||
|
register_date = ma.auto_field()
|
||||||
|
admin = ma.auto_field()
|
||||||
|
|
||||||
|
|
||||||
class BlacklistToken(db.Model):
|
class BlacklistToken(db.Model):
|
||||||
"""Token that has been revoked (but has not expired yet.)
|
"""Token that has been revoked (but has not expired yet.)
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import jwt
|
import jwt
|
||||||
from flask import Blueprint, request, jsonify
|
from flask import Blueprint, request, jsonify
|
||||||
from flask.views import MethodView
|
from flask.views import MethodView
|
||||||
from sachet.server.models import auth_required, read_token, User, BlacklistToken
|
from sachet.server.models import auth_required, read_token, User, UserSchema, BlacklistToken
|
||||||
from sachet.server import bcrypt, db
|
from sachet.server import bcrypt, db
|
||||||
|
|
||||||
|
user_schema = UserSchema()
|
||||||
|
|
||||||
users_blueprint = Blueprint("users_blueprint", __name__)
|
users_blueprint = Blueprint("users_blueprint", __name__)
|
||||||
|
|
||||||
class LoginAPI(MethodView):
|
class LoginAPI(MethodView):
|
||||||
@ -114,10 +116,7 @@ class UserAPI(MethodView):
|
|||||||
}
|
}
|
||||||
return jsonify(resp), 403
|
return jsonify(resp), 403
|
||||||
|
|
||||||
return jsonify({
|
return jsonify(user_schema.dump(info_user))
|
||||||
"username": info_user.username,
|
|
||||||
"admin": info_user.admin,
|
|
||||||
})
|
|
||||||
|
|
||||||
users_blueprint.add_url_rule(
|
users_blueprint.add_url_rule(
|
||||||
"/users/<username>",
|
"/users/<username>",
|
||||||
|
@ -57,9 +57,15 @@ def users(client):
|
|||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def validate_info(users):
|
def validate_info(users):
|
||||||
"""Given a dictionary, validate the information against a given user's info."""
|
"""Given a dictionary, validate the information against a given user's info."""
|
||||||
|
|
||||||
|
verify_fields = [
|
||||||
|
"username",
|
||||||
|
"admin",
|
||||||
|
]
|
||||||
|
|
||||||
def _validate(user, info):
|
def _validate(user, info):
|
||||||
for k, v in info.items():
|
for k in verify_fields:
|
||||||
assert users[user][k] == v
|
assert users[user][k] == info[k]
|
||||||
|
|
||||||
return _validate
|
return _validate
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user