Beispiel #1
0
class UserValidator:
    """
    Series of tools to validate and process user info by application API
    """

    # Description of expected fields for Swagger documentation
    fields = api.model(
        'User', {
            'email':
            restplus_fields.String(description='User email', required=True),
            'password':
            restplus_fields.String(description='User password', required=True),
        })

    class RequestValidator(Schema):
        """ Validates request data for described fields
        """
        email = marshmallow_fields.Email(required=True)
        password = marshmallow_fields.String(required=True)

    class ModelSerializer(Schema):
        """ Serializes model data.

        Example of usage:
            users = User.get_all()
            users = UserSchema(many=True).dump(users)
            return jsonify(users)
        """
        class Meta:
            """ Describes exposed model fields
            """
            fields = ("id", "email", "created", "updated", "last_login",
                      "last_logout", "last_request")
Beispiel #2
0
class CretaUser(Resource):
    # @ns_user.response(201, '创建用户成功')
    # @ns_user.expect(user)
    user = api.model(
        'Model User', {
            'username': fields.String(required=True, description='用户名'),
            'nickname': fields.String(required=False, description='昵称'),
            'password': fields.String(required=True, description='密码'),
            'phone': fields.String(required=False, description='手机号码'),
            'email': fields.String(required=False, description=''),
            'is_children': fields.Integer(required=False, description=''),
            'parent_id': fields.String(required=False, description='')
        })

    @ns_user.expect(user)
    @auth.login_required
    def post(self):
        """
        创建用户
        """
        data = request.json
        if data.get('password') == '' or data.get('password') is None:
            # abort() 立即停止视图函数的执行,并且把相对应的信息返回到前端中
            # abort(Response("密码不能为空"))
            return jsonify(code=Ret.FAILURE, msg="密码不能为空")
        creata_user(data)

        # return None, 201
        return jsonify(code=Ret.SUCCESS, msg="创建成功")
Beispiel #3
0
class login(Resource):
    # 请求参数
    login = api.model(
        'Login', {
            'username': fields.String(required=True, description='用户名'),
            'password': fields.String(required=True, description='密码')
        })

    @ns_user.expect(login)
    def post(self):
        """
        登录,获取用户信息以及生成token
        :return:
        """
        data = request.json
        username = data.get('username')
        password = data.get('password')
        user = User.query.filter(User.username == username).first()
        if User.verify_password(user, password):
            # 生成token
            token = user.generate_auth_token()
            return jsonify(code=Ret.SUCCESS,
                           msg="登录成功",
                           data={
                               'token': token.decode('utf-8'),
                               'name': user.username
                           })
        else:
            return jsonify(code=Ret.FAILURE, msg="密码错误")
Beispiel #4
0
class UserDto:
    post_model = api.model(
        "UserPostModel", {
            "id": fields.Integer(required=False),
            "username": fields.String(description="用户名,必传", required=True),
            "password": fields.String(description="密码,必传", required=True)
        })

    delete_model = reqparse.RequestParser()
    delete_model.add_argument("user_id", type=int, required=True, help="用户id")
Beispiel #5
0
need_minimal = api.model(
    'Need Minimal', {
        'id':
        fields.String(required=True, description='Need unique ID'),
        'created_at':
        fields.DateTime(dt_format='iso8601',
                        required=False,
                        description='Need creation datetime'),
        'customer':
        fields.String(required=True,
                      description='Customer unique name',
                      min_length=3,
                      max_length=64),
        'customer_obj':
        fields.Nested(
            customer_minimal, required=True, description='Customer Object'),
        'contact':
        fields.String(required=True,
                      description='Customer contact name',
                      min_length=3,
                      max_length=64),
        'contact_obj':
        fields.Nested(
            contact_minimal, required=True, description='Customer Object'),
        'title':
        fields.String(required=True,
                      description='Need title',
                      min_length=3,
                      max_length=64),
        'start_at_latest':
        fields.String(required=False,
                      dt_format='iso8601',
                      description='Need start at latest date'),
        'status':
        fields.String(required=True,
                      description='Need status (open, win, lost)')
    })
Beispiel #6
0
from flask import jsonify, request
from app.api import api, ns
from flask_restplus import Resource, fields
from app.models.users import User, UserSchema, db


user_fields = api.model('User', {
    'name': fields.String,
    'email': fields.String
})

user_schema = UserSchema(many=True)


@ns.route('/user')
class UserListAPI(Resource):
    def get(self):
        page_param = request.args.get('page')
        if not page_param:
            page_param = 1

        paginate = User.query.paginate(page=int(page_param), per_page=2)
        queryset = User.query.all()
        queryset = user_schema.dump(paginate.items).data
        endpoint = request.url_rule

        return jsonify({
            'data': queryset,
            'message': 'data have been successfully fetched',
            'error': False,
            'meta': {
Beispiel #7
0
	date_created  = db.Column(db.DateTime,  default=db.func.current_timestamp())
	date_modified = db.Column(db.DateTime,  default=db.func.current_timestamp(),
											onupdate=db.func.current_timestamp())

# Model Class for sqlAlchemy
class Developer(Base):
	id = db.Column(db.Integer, primary_key=True)
	name = db.Column(db.String(20))
	focus = db.Column(db.String(50))

	def __init__(self, name, focus):
		self.name = name
		self.focus = focus

# Model Class for marshmallows
class DeveloperSchema(ma.SQLAlchemyAutoSchema):
	class Meta:
		model = Developer

class DeveloperReturnSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = Developer
        # Exclude date_created because we're aliasing it below
        exclude = ("name", "focus")		

# Model for restplus
DeveloperRestSchema=api.model('Developer',{
	'name': fields.String(),
	'focus': fields.String(),
})
Beispiel #8
0
from app.database.models import User
from app.database.db import db
from app.api.errors import error_response
from app.api import subscribe_ns, api, unsubscribe_ns
from app.api.access_control import auth_required

parser = reqparse.RequestParser()
parser.add_argument('Authorization',
                    location='headers',
                    help='Bearer token',
                    required=True)

subscribe_response = api.model(
    'Subscribe', {
        'message':
        fields.String(description='Subscription status',
                      example="Subscribed successfully")
    })

unsubscribe_response = api.model(
    'Unsubscribe', {
        'message':
        fields.String(description='Subscription status',
                      example="Unsubscribed successfully")
    })


@subscribe_ns.route('')
class SubscribeApi(Resource):
    @api.response(201, 'Success', model=subscribe_response)
    @api.response(400, 'Invalid authentication header')
Beispiel #9
0
# coding=utf-8
import logging
from flask_restplus import fields

from app.api import api

__author__ = 'LongHB'
_logger = logging.getLogger(__name__)

_keyword_recommenders_data = api.model(
    'keyword_recommenders_data', {
        'query': fields.String(attribute='keyword'),
    })

keyword_recommenders_response = api.model(
    'keyword_recommenders_response',
    {'keywords': fields.Nested(_keyword_recommenders_data)})

_category_choosable_data = api.model('category_choosable_data', {
    'code': fields.String(),
    'id': fields.Integer(),
    'name': fields.String(),
})

category_choosable_response = api.model(
    'category_choosable_response',
    {'categories': fields.Nested(_category_choosable_data)})

_brand_choosable_data = api.model(
    'brand_choosable_data', {
        'code': fields.String(),
Beispiel #10
0
# coding=utf-8
import logging
from flask_restplus import fields

from app.api import api

__author__ = 'LongHB'
_logger = logging.getLogger(__name__)

_order_price = api.model(
    'order_price', {
        'sku': fields.String(),
        'price': fields.Float(),
        'promotion_price': fields.Float()
    })

order_checking_response = api.model(
    'order_checking_response', {
        'prices':
        fields.Nested(_order_price),
        'total_price':
        fields.Float(),
        'failed_sku':
        fields.List(fields.String(), description='List of sku out of stocks'),
    })

order_creating_response = api.model(
    'order_response', {
        'status':
        fields.String(description='status of this action (ok or failed)'),
        'failed_sku':
Beispiel #11
0

def getConnection():
    return pymysql.connect(host='localhost',
                           user='******',
                           password='******',
                           db='jumble',
                           charset='utf8mb4',
                           cursorclass=pymysql.cursors.DictCursor)


user_model = api.model(
    'User', {
        'id': fields.Integer,
        'name': fields.String,
        'email': fields.String,
        'major': fields.String,
        'slack': fields.String,
        'first_hack': fields.Boolean,
        'image': fields.String
    })

user_id_model = api.model('User', {'id': fields.Integer})

user_model_post = api.model(
    'User', {
        'name': fields.String,
        'email': fields.String,
        'major': fields.String,
        'slack': fields.String,
        'first_hack': fields.Boolean,
        'image': fields.String
Beispiel #12
0
from app.api import api
from flask_restx import fields

id_model = api.model('ID', {'id': fields.Integer(description='ID.')})

login_model = api.model(
    'Login', {
        'email':
        fields.String(description='Email address for account.', required=True),
        'password':
        fields.String(description='Password for account.', required=True)
    })

tokens_model = api.model(
    'Token', {
        'access_token': fields.String(description='Access Token.',
                                      required=True),
        'refresh_token': fields.String(description='Refresh Token.',
                                       required=True)
    })

create_user_modal = api.model(
    'New User', {
        'email':
        fields.String(description='Email address of new user.', required=True),
        'group':
        fields.Integer(
            description=
            'Optional ID of the group for the user to be added to, can be omitted.'
        )
    })
Beispiel #13
0
def Mod(*args, **kwargs):
    name = args[0]
    if not isinstance(name, str):
        name = __gen_mod_name()
        return api.model(name, *args, **kwargs)
    return api.model(*args, **kwargs)
# -*- coding: utf-8 -*-

from flask_restplus import fields
from app.api import api

customer_minimal = api.model(
    'Customer Minimal', {
        'id':
        fields.String(required=True, description='Customer unique ID'),
        'name':
        fields.String(required=True,
                      description='Customer name',
                      min_length=3,
                      max_length=64),
    })

contact_minimal = api.model(
    'Contact Minimal', {
        'id':
        fields.String(required=True, description='Contact unique ID'),
        'name':
        fields.String(required=True,
                      description='Contact name',
                      min_length=3,
                      max_length=64)
    })

customer_data_container = api.model(
    'Customer DataContainer',
    {'customers': fields.List(fields.Nested(customer_minimal))})
Beispiel #15
0
from app.message import Message
from app.queue import L2_DATASOURCES
from app.api import api

ns = api.namespace(
    'message',
    description='Operations to add messages to be displayed on the clock')

message = api.model(
    'Message', {
        'text':
        fields.String(description='The text of the messae'),
        'icon':
        fields.String(description='Optional URL to an icon to include'),
        'repeat':
        fields.Integer(description='Number times to display the message'),
        'interval_sec':
        fields.Integer(
            description='Minimum number of seconds between message repeats'),
        'display_sec':
        fields.Integer(
            description='Minimum number of seconds the messaage is visible')
    })


@ns.route('/')
@api.expect(message)
@api.response(404, 'Message was not added.')
class MessageEP(Resource):
    """
    Enqueue a message in the botton line of the clock display.
Beispiel #16
0
from flask import jsonify, request, Blueprint
from app.api import api, ns
from flask_restplus import Resource, fields
from app.tables.models import Born, BornSchema, db
from app.api.custom_response import custom_response

born_fields = api.model('Born', {

})

born_schema = BornSchema(many=True)

@ns.route('/born', methods=['GET', 'POST'])
class ListBorn(Resource):
    def get(self):
        queryset = Born.query.all()
        queryset = born_schema.dump(queryset).data
        return jsonify({
            'data' : queryset,
            'message' : 'Query OK',
            'error' : False
        }) 

    @api.doc(body=born_fields)
    def post(self):
        data = request.get_json(force=True)
        if data:
            try:
                queryset = Born()
                queryset.nama_bayi = data['nama_bayi']
                queryset.tempat_lahir = data['tempat_lahir']
Beispiel #17
0
# -*- coding: utf-8 -*-

from flask_restplus import fields
from app.api import api


auth_token = api.model('Auth Token', {
    'token': fields.String(required=True, description='Auth token')
})
Beispiel #18
0
from flask_restx import fields
from app.api import api

message = api.model("Message", {
    "message": fields.String(max_length=255)
    })

token = api.model("Token", {
    "token": fields.String(max_length=40),
    "exp": fields.DateTime()
    })

user_register = api.model("Registration", {
    "username": fields.String(min_length=6, max_length=20),
    "password": fields.String(min_length=8, max_length=20),
    "email": fields.String(max_length=120)
    })

user_update = api.inherit("Update user", user_register, {
    "image": fields.String(max_length=80, desctiption="Profile picture path on the server")
    })

user_info = api.inherit("Full user info", user_update, {
    "last_login": fields.DateTime()
    })
Beispiel #19
0
                        help='Bearer token',
                        required=True)
del_parser.add_argument('filter',
                        type=str,
                        required=False,
                        help='Supported operators >,<,=,!=,AND,OR',
                        location='args')

meta_data = api.model(
    'meta', {
        'total_items':
        fields.Integer(required=True, description='Total users', example=5),
        'page':
        fields.Integer(required=True,
                       description='Current page number',
                       example=2,
                       default=1),
        'total_pages':
        fields.Integer(required=True, description='Total pages', example=4),
        'per_page':
        fields.Integer(
            required=True, description='Users per page', example=10, min=1)
    })

user_info = api.model(
    'user', {
        'id':
        fields.Integer(required=True, description='User id', example=5),
        'username':
        fields.String(required=True, description='Username',
                      example='athlete'),
Beispiel #20
0
# -*- coding: utf-8 -*-

from flask_restplus import fields
from marshmallow import fields as f, Schema

from app.api import api


class MetaSchema(Schema):
    id = f.Int()
    descricao = f.Str()
    tipo = f.Int()


schema = MetaSchema()

model = api.model('meta', {
    'id': fields.Integer,
    'descricao': fields.String,
    'tipo': fields.Integer
})
Beispiel #21
0
from app.api import api
from flask_restplus import fields

UserModel = api.model(
    'User', {
        'Username': fields.String(),
        'Email Address': fields.String(),
        'Password': fields.String()
    })

TodoModel = api.model('Todo', {'Body': fields.String()})
Beispiel #22
0
from flask_restplus import fields
from app.api import api

blog_post = api.model(
    'Blog post', {
        'id':
        fields.String(readOnly=True,
                      description='The unique identifier of a blog post'),
        'slug':
        fields.String(readOnly=True, description='slug of the article title'),
        'title':
        fields.String(required=True, description='Article title'),
        'body':
        fields.String(required=True, description='Article content'),
        'pub_date':
        fields.DateTime,
        'created_date':
        fields.DateTime(readOnly=True),
        'categories':
        fields.List(fields.String),
    })

pagination = api.model(
    'A page of results', {
        'page':
        fields.Integer(description='Number of this page of results'),
        'pages':
        fields.Integer(description='Total number of pages of results'),
        'per_page':
        fields.Integer(description='Number of items per page of results'),
        'total':
Beispiel #23
0
# @Author : Guohao 
# @Time : 2019-07-19 14:46

# 接口输入输出
from flask_restplus import fields
from app.api import api

user = api.model('Model User', {
    'id': fields.String(readOnly=False, description='用户id'),
    'username': fields.String(required=False, description='用户名'),
    'nickname': fields.String(required=False, description='昵称'),
    'password': fields.String(required=False, description='密码'),
    'phone': fields.String(required=False, description='手机号码'),
    'email': fields.String(required=False, description=''),
    'is_children': fields.Integer(required=False, description=''),
    'parent_id': fields.String(required=False, description=''),
    'status': fields.String(required=False, description=''),
    'founder': fields.String(required=False, description=''),
    'founder_name': fields.String(required=False, description=''),
    'foundtime': fields.DateTime(required=False, description=''),
    'updater': fields.String(required=False, description=''),
    'updater_name': fields.String(required=False, description=''),
    'updatetime': fields.DateTime(required=False, description='')
})

pagination = api.model('A page of results', {
    'page': fields.Integer(description='Number of this page of results'),
    'pages': fields.Integer(description='Total number of pages of results'),
    'per_page': fields.Integer(description='Number of items per page of results'),
    'total': fields.Integer(description='Total number of results'),
})
from flask import jsonify, request, Blueprint
from app.api import api, ns
from flask_restplus import Resource, fields
from app.tables.models import GroupHasRole, GroupHasRoleSchema, db

grouphasrole_fields = api.model('GroupHasrole', {
    'id_group': fields.Integer,
    'id_role': fields.Integer
})


@ns.route('/grouphasrole')
class ListGrouphasRole(Resource):
    def get(self):
        """Returns list of Group Has Role."""
Beispiel #25
0
from flask import jsonify, make_response, request
from flask_restplus import Resource, fields
from flask_jwt_extended import create_access_token

from app.database.models import User
from app.api.errors import error_response
from app.api import auth_ns, api

auth_fields = api.model('Auth', {
	'password': fields.String(required=True, description='Password', example='secure_password'),
    'username': fields.String(required=True, description='Username', example='athlete')
})

auth_response = api.model('Acess Token', {
    'access_token': fields.String(description='Bearer acess Token', example="secure_access_token")
})

@auth_ns.route('')
class AuthApi(Resource):

	@api.expect(auth_fields)
	@api.response(201, 'Success', model=auth_response)
	@api.response(400, 'Bad request')
	@api.response(401, 'Incorrect username or password')
	def post(self):
		""" Authorise user and provide access token"""
		username = request.json.get('username')
		password = request.json.get('password')
		user = User.find_by_username(username)
		if not user:
			return error_response('Username does not exist', 401)
Beispiel #26
0
from flask_restx import fields

from app.api import api


TicketSerializer = api.model('Ticket', {
    'id': fields.Integer(required=False, description='ticket identification number.'),
    'number': fields.String(required=False, description='ticket number.'),
    'timestamp': fields.DateTime(required=False, description='date and time of ticket generation.'),
    'date': fields.DateTime(required=False, description='date of ticket generation.'),
    'name': fields.String(required=False, description='registered ticket stored value.'),
    'n': fields.Boolean(required=False, description='ticket is registered.'),
    'p': fields.Boolean(required=False, description='ticket is processed.'),
    'pdt': fields.DateTime(required=False, description='ticket pulled date and time.'),
    'pulledBy': fields.Integer(required=False, description='user id or token id that pulled ticket.'),
    'on_hold': fields.Boolean(required=False, description='ticket is put on hold.'),
    'status': fields.String(required=False, description='ticket processing status.'),
    'office_id': fields.Integer(required=False, description='office ticket belongs to.'),
    'task_id': fields.Integer(required=False, description='task ticket belongs to.'),
})


TaskSerializer = api.model('Task', {
    'id': fields.Integer(required=False, description='task identification number.'),
    'name': fields.String(required=False, description='task name.'),
    'timestamp': fields.DateTime(required=False, description='date and time of task creation.'),
    'hidden': fields.Boolean(required=False, description='task is is hidden in the touch screen.'),
})
Beispiel #27
0
# -*- coding: utf-8 -*-

from flask_restplus import fields
from app.api import api

consultant_minimal = api.model(
    'Consultant Minimal', {
        'id':
        fields.String(required=True, description='Consultant unique ID'),
        'name':
        fields.String(required=True,
                      description='Consultant name',
                      min_length=3,
                      max_length=64),
    })

consultant_data_container = api.model(
    'Consultant DataContainer',
    {'consultants': fields.List(fields.Nested(consultant_minimal))})
Beispiel #28
0
from flask import request
from flask_restplus import Resource, abort, fields, reqparse
from app import db
from app.api import api
from app.models import Customer


customer_model = api.model(
    'Customer',
    {
        'id': fields.String(readonly=True),
        'name': fields.String(required=True, example='John'),
    }
)

pagination = api.model(
    'Page Model', {
        'page': fields.Integer(
            description='Number of this page of results'
        ),
        'per_page': fields.Integer(
            description='Number of items per page of results'
        ),
        'total_pages': fields.Integer(
            description='Total number of pages of results'
        ),
        'total_items': fields.Integer(description='Total number of results'),
        'next_page': fields.String(),
        'prev_page': fields.String()
    }
)
Beispiel #29
0
                          required=True)

del_parser = reqparse.RequestParser()
del_parser.add_argument('Authorization',
                        location='headers',
                        help='Bearer token',
                        required=True)
del_parser.add_argument('filter',
                        type=str,
                        required=False,
                        help='Supported operators >,<,=,!=,AND,OR',
                        location='args')

del_info = api.model(
    'Del', {
        'count':
        fields.Integer(
            required=True, description='Number of users deleted', example=3)
    })

meta_data = api.model(
    'meta', {
        'total_items':
        fields.Integer(required=True, description='Total users', example=5),
        'page':
        fields.Integer(required=True,
                       description='Current page number',
                       example=2,
                       default=1),
        'total_pages':
        fields.Integer(required=True, description='Total pages', example=4),
        'per_page':