def test_url_field_with_description(self): prop = field_to_property( fields.Url('endpoint', description='A description')) self.assertEqual(prop, { 'type': 'string', 'description': 'A description' })
def test_without_endpoint_invalid_object(self, app): app.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) field = fields.Url() with app.test_request_context('/foo'): with pytest.raises(fields.MarshallingError): field.output('foo', None)
def test_without_endpoint_absolute_scheme(self, app, mocker): app.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) field = fields.Url(absolute=True, scheme='https') obj = mocker.Mock(foo=42) with app.test_request_context('/foo', base_url='http://localhost'): assert 'https://localhost/42' == field.output('foo', obj)
def test_without_endpoint(self, app, mocker): app.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) field = fields.Url() obj = mocker.Mock(foo=42) with app.test_request_context('/foo'): assert '/42' == field.output('foo', obj)
def test_without_endpoint_absolute(self): self.app.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) field = fields.Url(absolute=True) obj = Mock(foo=42) with self.app.test_request_context('/foo'): assert_equal('http://localhost/42', field.output('foo', obj))
def test_without_endpoint(self): self.app.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) field = fields.Url() obj = Mock(foo=42) with self.app.test_request_context('/foo'): assert_equal('/42', field.output('foo', obj))
def test_invalid_object(self): self.app.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) field = fields.Url('foobar') with self.app.test_request_context('/'): with assert_raises(fields.MarshallingError): field.output('foo', None)
def test_absolute(self, app, mocker): app.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) field = fields.Url('foobar', absolute=True) obj = mocker.Mock(foo=42) with app.test_request_context('/'): assert 'http://localhost/42' == field.output('foo', obj)
def test_absolute_scheme(self, app, mocker): '''Url.scheme should override current_request.scheme''' app.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) field = fields.Url('foobar', absolute=True, scheme='https') obj = mocker.Mock(foo=42) with app.test_request_context('/', base_url='http://localhost'): assert 'https://localhost/42' == field.output('foo', obj)
def test_with_blueprint_invalid_object(self, app): bp = Blueprint('foo', __name__, url_prefix='/foo') bp.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) app.register_blueprint(bp) field = fields.Url() with app.test_request_context('/foo/foo'): with pytest.raises(fields.MarshallingError): field.output('foo', None)
def test_with_blueprint(self, app, mocker): bp = Blueprint('foo', __name__, url_prefix='/foo') bp.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) app.register_blueprint(bp) field = fields.Url() obj = mocker.Mock(foo=42) with app.test_request_context('/foo/foo'): assert '/foo/42' == field.output('foo', obj)
def test_with_blueprint_absolute_scheme(self, app, mocker): bp = Blueprint('foo', __name__, url_prefix='/foo') bp.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) app.register_blueprint(bp) field = fields.Url(absolute=True, scheme='https') obj = mocker.Mock(foo=42) with app.test_request_context('/foo/foo', base_url='http://localhost'): assert 'https://localhost/foo/42' == field.output('foo', obj)
def test_with_blueprint_absolute(self): bp = Blueprint('foo', __name__, url_prefix='/foo') bp.add_url_rule('/<foo>', 'foobar', view_func=lambda x: x) self.app.register_blueprint(bp) field = fields.Url(absolute=True) obj = Mock(foo=42) with self.app.test_request_context('/foo/foo'): assert_equal('http://localhost/foo/42', field.output('foo', obj))
class BuildDto: api = Namespace('build', description='building docker images') git_context = api.model('git_build_context', { 'dir_name': fields.String(required=True, description='name of dir, where build context content will be saved, ' 'relative to Dockerfile'), 'url': fields.String(required=True, description='Git url'), 'username': fields.String(required=False, description='username for git'), 'password': fields.String(required=False, description='password for git') }) build_params = api.model('build_params', { 'source_type': fields.String(required=True, description='"Dockerfile" or "tar"'), 'source_url': fields.Url(required=True, description='url of Dockerfile or tar'), 'source_username': fields.Url(required=False, description='username for Dockerfile or tar'), 'source_password': fields.Url(required=False, description='password for Dockerfile or tar'), 'build_context': fields.List(required=False, description='Build context, if building from Dockerfile', cls_or_instance=fields.Nested(git_context)), 'target_image_name': fields.String(required=True, description='desired docker image name'), 'target_image_tag': fields.String(required=False, default='latest', description='desired docker image tag') })
def create_many_response_model(self): """Creates the single response model. Returns: A `flask_resplus.Namespace.model` for a multuple entity's response body. """ return self._api.model( self.__name__ + 'ManyResponse', dict( items=restplus_fields.List(restplus_fields.Nested(self.model)), count=restplus_fields.Integer, current=restplus_fields.Url( example= "https://api/example/?page=2&per_page=10&order_by=id&order_dir=asc" ), prev=restplus_fields.Url( example= "https://api/example/?page=1&per_page=10&order_by=id&order_dir=asc" ), next=restplus_fields.Url( example= "https://api/example/?page=3&per_page=10&order_by=id&order_dir=asc" )))
class GetDatabases(Resource): dbres = api.model( 'Source', { 'uuid': fields.String(description='UUID of source'), 'description': fields.String(description='Description of source'), 'name': fields.String(description='Name of source'), 'numberOfNetworks': fields.Integer(description='Number of networks in source'), 'status': fields.String(description='ok if service is up, or error if down'), 'endPoint': fields.Url(description='REST endpoint for service'), 'version': fields.String(description='Version of service') }) dblist = api.model('Sources', { 'results': fields.List(fields.Nested(dbres)), }) @api.doc('Gets ') @api.response(200, 'Success', dblist) @api.response(429, 'Too many requests', TOO_MANY_REQUESTS) @api.response(500, 'Internal server error', ERROR_RESP) def get(self): """ Gets list of sources that can be queried Result in JSON which is a list of objects with uuid and display name for source that can be queried. """ dr = InputSourceResults() if dr.status_code is 500: er = ErrorResponse() er.message = 'Internal server error' er.description = 'something good' return marshal(er, ERROR_RESP), dr.status_code return marshal(dr, GetDatabases.dblist), dr.status_code
class TodoD(Resource): class RandomNumber(fields.Raw): def output(self, key, obj): r = random.Random() r = r.random() print(r) return r test_model = api.model( 'Model', { 'counter': fields.String, 'todos': fields.List(fields.Nested(TodoList.model_todo)), 'uri': fields.Url("dao") }) @api.marshal_with(test_model) def get(self): return DAO, 201
from flask import Flask, request from flask_restplus import Resource, Api, fields, reqparse import resources import s3 from error import _error app = Flask(__name__) api = Api(app, version='1.0', title='Dog Breed API') dogSchema = api.model('dogSchema', {'imagePath': fields.Url('image_path')}) @api.route('/getDogBreed', methods=['POST']) class Crowd(Resource): @api.expect(dogSchema) def post(self): parser = reqparse.RequestParser() parser.add_argument('imagePath', required=True, help="URL cannot be blank") args = parser.parse_args() inputrequest = args['imagePath'] if (len(inputrequest)) != 0: filename = inputrequest.split("/")[-1] saveFile = s3.getImage(filename) if (saveFile == 200): print("file: " + filename) check = resources.run("s3_images/" + filename) return check
def test_defaults(self): field = fields.Url('endpoint') assert not field.required assert field.__schema__ == {'type': 'string'}
# -*- coding: utf-8 -*- from flask_restplus import fields from . import api user_post = api.model('User post', { 'username': fields.String(required=True, min_length=3, max_length=32, description='User unique name'), 'password': fields.String(required=True, min_length=3, max_length=16, description='User password'), 'email': fields.String(required=False, min_length=3, max_length=32, description='User email'), }) user_patch = api.model('User patch', { 'password': fields.String(required=False, min_length=3, max_length=16, description='User password'), 'email': fields.String(required=False, min_length=3, max_length=32, description='User email'), }) user_minimal = api.model('User minimal', { 'id': fields.Integer(required=True, description='User unique id'), 'username': fields.String(required=True, description='User username'), 'created_at': fields.DateTime(required=True, description='User creation datetime'), 'uri': fields.Url('admin.users_user_item') }) user_detail = api.inherit('User details', user_minimal, { 'email': fields.String(required=False, description='User emal') }) user_data_container = api.model('User DataContainer', { 'users': fields.List(fields.Nested(user_minimal)) })
from .. import api deal_post = api.model('Deal post', { 'label': fields.String(required=True, min_length=3, max_length=32, description='Deal label'), 'description': fields.String(required=False, min_length=3, max_length=32, description='Deal description'), 'start_at': fields.DateTime(required=True, dt_format='iso8601', description='Deal start datetime'), 'end_at': fields.DateTime(required=True, dt_format='iso8601', description='Deal start datetime'), }) deal_patch = api.model('Deal patch', { 'label': fields.String(required=False, min_length=3, max_length=32, description='Deal label'), 'description': fields.String(required=False, min_length=3, max_length=32, description='Deal description'), 'start_at': fields.DateTime(required=False, dt_format='iso8601', description='Deal start datetime'), 'end_at': fields.DateTime(required=False, dt_format='iso8601', description='Deal start datetime'), }) deal_minimal = api.model('Deal minimal', { 'id': fields.String(required=True, description='Deal unique id'), 'uri': fields.Url('api.deals_deal_item'), 'label': fields.String(required=True, description='Deal label'), 'start_at': fields.DateTime(required=True, dt_format='iso8601', description='Deal start datetime'), 'end_at': fields.DateTime(required=True, dt_format='iso8601', description='Deal start datetime') }) deal_detail = api.inherit('Deal', deal_minimal, { 'description': fields.String(required=True, description='Deal description') }) deal_data_container = api.inherit('Deal data container', { 'deals': fields.List(fields.Nested(deal_minimal)) })
payload_artifact = ns.model( "Testing Farm results artifact", { "commit-sha": fields.String(required=True, example="08bfc38f15082bdf9ba964c3bbd04878666d1d56"), "copr-chroot": fields.String(required=True, example="fedora-30-x86_64"), "copr-repo-name": fields.String(required=True, example="packit/packit-service-hello-world-14"), "git-ref": fields.String(required=True, example="08bfc38f15082bdf9ba964c3bbd04878666d1d56"), "git-url": fields.Url(required=True, example="https://github.com/packit-service/hello-world"), "repo-name": fields.String(required=True, example="hello-world"), "repo-namespace": fields.String(required=True, example="packit-service"), }, ) payload_pipeline = ns.model( "Testing Farm results pipeline", { "id": fields.String(required=True, example="614d240a-1e27-4758-ad6a-ed3d34281924") }, ) payload = ns.model(
def href(endpoint, description="URL to this resource"): """ Create a reference to another API resource. """ return base.Url(endpoint=endpoint, absolute=False, description=description)
from flask_restplus import Namespace, Resource, fields from flask import jsonify import requests from app import app import json import time api = Namespace('home', description='JENKINS') parser = api.parser() Jenkins_configuration = api.model( 'Jenkins Configuration', { 'Github URL': fields.Url('github_url'), 'github username': fields.String('github_username'), 'github password': fields.String('github_password') }) Build_configuration = api.model( 'Build Configuration', { 'Job_name': fields.String('Job Name'), 'Github_URL': fields.Url('Github_URL'), 'Github_branch': fields.String('Github_branch'), 'command': fields.String('commands') }) @api.route('/build') class build(Resource): @api.expect(Build_configuration) def post(self): params = (
from .namespaces import api from flask_restplus import fields from copy import deepcopy # nested provider marshaller provider_fields = {} provider_fields['id'] = fields.Integer(description='Provider id', example=14) provider_fields['name'] = fields.String(description='Provider Name', example='Snakeoil Ltd') provider_fields['uri'] = fields.Url('providers_provider') provider_marsh = api.model('AreaProvider', provider_fields) # area get marshaller area_fields = {} area_fields['id'] = fields.Integer(required=True, description='Area id', example=14) area_fields['name'] = fields.String(required=True, description='Area Name', example='Tele District') area_fields['price'] = fields.Float(required=True, description='Area Price', example=10.54) area_fields['geom'] = fields.String(required=True, description='Area Geometry', example='POLYGON ((11 50,11 51,' '12 51,12 50,11 50))') area_fields['provider'] = fields.Nested(provider_marsh) area_get_marsh = api.model('AreaGet', area_fields) # area edit marshaller
help="Data file to perform inference.", type=werkzeug.FileStorage, location="files", dest='files', required=False) data_parser.add_argument('url', help="URL to retrieve data to perform inference.", type=str, dest='urls', required=False, action="append") model_links = api.model('Location', { "rel": fields.String(required=True), "href": fields.Url(required=True) }) model_meta = api.model( 'ModelMetadata', { 'id': fields.String(required=True, description='Model identifier'), 'name': fields.String(required=True, description='Model name'), 'description': fields.String(required=True, description='Model description'), 'license': fields.String(required=False, description='Model license'), 'author': fields.String(required=False, description='Model author'), 'version':
fields.String(required=True, description='Product group', example='product_group'), 'product': fields.String( required=True, description='Product name', example='prod1'), 'args': CustomField.Json(required=True, description='Product arguments in JSON format', example={"foo": "bar"}), 'request_origin': fields.String( required=True, description='Request Origin', example='127.0.0.1'), 'request_callback': fields.Url(required=True, description='Request callback url', example='http://origin.com/callback_uri'), 'created_at': fields.DateTime(readOnly=True, description='Product creation date'), 'updated_at': fields.DateTime(readOnly=True, description='product last update date'), }) 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'),
from collections import OrderedDict from flask import Flask from flask_restplus import fields, Api, Resource app = Flask(__name__) api = Api(app) model = api.model('Model', { 'task': fields.String, 'uri': fields.Url('todo_ep') }) class TodoDao(object): def __init__(self, todo_id, task): self.todo_id = todo_id self.task = task # This field will not be sent in the response self.status = 'active' @api.route('/todo') class Todo(Resource): @api.marshal_with(model) def get(self, **kwargs): return TodoDao(todo_id='my_todo', task='Remember the milk') if __name__ == '__main__':
class UserDto: api = Namespace('user', description='User operations including create, edit, view and delete') upload_parser = api.parser() upload_parser.add_argument('avatarBlob', location='files', type=FileStorage, required=True) parser = api.parser() parser.add_argument('x-access-token', required=True, location='headers') #parser = api.parser() #parser.add_argument('file', type=FileStorage, location='files', required=True) signup = api.model('signup details', { 'email': fields.String(required=True, description='user email address'), 'firstname': fields.String(required=True, description='user firstname'), 'lastname': fields.String(required=True, description='user last name'), 'user_type': fields.String(required=True, description='user type'), 'country': fields.String(required=True, description='user type'), 'company_name': fields.String(required=False, description='user type'), 'state': fields.String(required=True, description='user type'), 'password': fields.String(required=True, description='user password'), }) email_confirmation = api.model('email_confirmation', { 'firstname': fields.String(required=True, description='recipient firstname'), 'lastname': fields.String(required=True, description='recipient lastname'), 'email': fields.String(required=True, description='recipient email address'), 'userId': fields.String(required=True, description='recipient userId'), }) profile = api.model('Minimal profile', { 'userId': fields.String(required=True, description='recipient userId'), 'expertise': fields.List(fields.String,required=True, description="List of users expertise"), 'linkedin': fields.Url(required=True, description='User linkedin profile link'), 'github': fields.Url(required=True, description='User github profile link'), 'website': fields.Url(description="User's personal website url"), 'experience': fields.String(required=True,description=''), 'tzone': fields.String(required=True,description='timezone'), 'availability': fields.String(required=True, description='user availability to work'), 'pastprojects': fields.String(description="User's past project"), 'about': fields.String(required=True,description=""), 'avatarBlob': fields.String(required=True,description=""), 'professional_title': fields.String(required=True, description='User professional title'), 'calling_code': fields.String(description=''), 'postal': fields.String(required=True,description=''), 'geoLoc': fields.Raw(description='Geo location'), 'phone': fields.String(required=True, description='Phone number'), 'experience_Level': fields.String(required=True, description='Experience level'), 'project_type': fields.String(required=True, description=''), 'primary_skills': fields.List(fields.Raw, required=True, description='List of primary skills'), 'secondary_skills': fields.List(fields.Raw, required=True, description='List of secondary skills'), 'updated_on': fields.String(required=True, description='Time updated'), }) emp_contact = api.model('employer contact', { '_id': fields.String(required=True, description='user id'), 'firstname': fields.String(required=True, description='employer firstname'), 'lastname': fields.String(required=True, description='employer last name'), 'phone': fields.String(required=True, description='employer phone'), 'address': fields.String(required=True, description='address'), 'website': fields.String(required=True, description='website'), 'about_us': fields.String(required=True, description='about employer'), }) change_pass = api.model('chnage password', { '_id': fields.String(required=True, description='user id'), 'old_password': fields.String(required=True, description='old password'), 'new_password': fields.String(required=True, description='new password'), }) fileupload = api.model('Upload file', { 'avatarBlob': fields.String(required=True,description=""), })
from ping.restplus import api from flask_restplus import fields ping_json = api.model( 'Ping', {'url': fields.Url( required=True, description='Url to ping', )}, )