示例#1
0
def test_require_all_override_by_required():
    schema = {'foo': {'type': 'string', 'required': False}}
    validator = Validator(require_all=True)
    assert_success({}, schema, validator)
    assert_success({'foo': 'bar'}, schema, validator)
    validator.require_all = False
    assert_success({}, schema, validator)
    assert_success({'foo': 'bar'}, schema, validator)

    schema = {'foo': {'type': 'string', 'required': True}}
    validator.require_all = True
    assert_fail(
        {},
        schema,
        validator,
        error=('foo', ('foo', 'required'), errors.REQUIRED_FIELD, True),
    )
    assert_success({'foo': 'bar'}, schema, validator)
    validator.require_all = False
    assert_fail(
        {},
        schema,
        validator,
        error=('foo', ('foo', 'required'), errors.REQUIRED_FIELD, True),
    )
    assert_success({'foo': 'bar'}, schema, validator)
示例#2
0
def test_require_all_and_exclude():
    schema = {
        'foo': {
            'type': 'string',
            'excludes': 'bar'
        },
        'bar': {
            'type': 'string',
            'excludes': 'foo'
        },
    }
    validator = Validator(require_all=True)
    assert_fail(
        {},
        schema,
        validator,
        errors=[
            ('foo', '__require_all__', errors.REQUIRED_FIELD, True),
            ('bar', '__require_all__', errors.REQUIRED_FIELD, True),
        ],
    )
    assert_success({'foo': 'value'}, schema, validator)
    assert_success({'bar': 'value'}, schema, validator)
    assert_fail({'foo': 'value', 'bar': 'value'}, schema, validator)
    validator.require_all = False
    assert_success({}, schema, validator)
    assert_success({'foo': 'value'}, schema, validator)
    assert_success({'bar': 'value'}, schema, validator)
    assert_fail({'foo': 'value', 'bar': 'value'}, schema, validator)
示例#3
0
def test_require_all_simple():
    schema = {'foo': {'type': 'string'}}
    validator = Validator(require_all=True)
    assert_fail(
        {},
        schema,
        validator,
        error=('foo', '__require_all__', errors.REQUIRED_FIELD, True),
    )
    assert_success({'foo': 'bar'}, schema, validator)
    validator.require_all = False
    assert_success({}, schema, validator)
    assert_success({'foo': 'bar'}, schema, validator)
示例#4
0
            "type": "list",
            "schema": {
                "type": "string"
            }
        },
        "capital": {
            "type": "string",
        },
        "stateflower": {
            "type": "string"
        },
    },
}

v = Validator()
v.require_all = True
v.schema = {
    "states": {
        "type": "dict",
        "schema": {
            "utah": state_schema,
            "texas": state_schema,
            "illinois": state_schema,
            "missouri": state_schema,
        },
    },
}

with open("cities.yaml") as f:

    data = yaml.load(f, Loader=yaml.FullLoader)
示例#5
0
import os

from cerberus import Validator
from flask import Flask
from flask_cors import CORS
from flask_jwt_extended import JWTManager

from visualize.models import db, bcrypt, blacklist

jwt = JWTManager()
validator = Validator()
validator.require_all = True


@jwt.token_in_blacklist_loader
def check_if_token_in_blacklist(decrypted_token):
	jti = decrypted_token['jti']
	return blacklist.is_jti_in_blacklist(jti)


def create_app(test_config=None):
	# create and configure the app
	app = Flask(__name__, instance_relative_config=True)

	# load the the standard configuartion depending on environment
	if app.config["ENV"] == "production":
		app.config.from_object("config.ProductionConfig")
	elif app.config["ENV"] == "development":
		app.config.from_object("config.DevelopmentConfig")
	elif app.config["ENV"] == "testing":
		app.config.from_object("config.TestingConfig")
示例#6
0
    def put(self, request, slug, pk):
        if slug == "Song":
            print(request.data)
            try:
                song = Song.objects.get(pk=pk)
            except ObjectDoesNotExist:
                return Response(
                    {"errors": "Song with that id does not exists"},
                    status.HTTP_500_INTERNAL_SERVER_ERROR)
            v = Validator(self.schema1)
            v.require_all = True
            if not v.validate(request.data):
                return Response({"errors": v.errors},
                                status.HTTP_400_BAD_REQUEST)
            name = request.data["name"]
            duration = request.data['duration']
            song = Song.objects.get(pk=pk)
            song.name = name
            song.duration_in_number_of_seconds = duration
            song.save()
            return Response({"status": "success", "data": model_to_dict(song)})

        elif slug == "Audiobook":
            try:
                audiobook = Audiobook.objects.get(pk=pk)
            except ObjectDoesNotExist:
                return Response(
                    {"errors": "Audiobook with that id does not exists"},
                    status.HTTP_500_INTERNAL_SERVER_ERROR)
            v = Validator(self.schema3)
            v.require_all = True
            if not v.validate(request.data):
                return Response({"errors": v.errors},
                                status.HTTP_400_BAD_REQUEST)
            title = request.data["title"]
            author = request.data["author"]
            narrator = request.data["narrator"]
            duration = request.data['duration']
            audiobook = Audiobook.objects.get(pk=pk)
            audiobook.title = title
            audiobook.author = author
            audiobook.narrator = narrator
            audiobook.duration_in_number_of_seconds = duration
            audiobook.save()
            return Response({
                "status": "success",
                "data": model_to_dict(audiobook)
            })

        elif slug == "Podcast":
            try:
                podcast = Podcast.objects.get(pk=pk)
            except ObjectDoesNotExist:
                return Response(
                    {"errors": "Podcast with that id does not exists"},
                    status.HTTP_500_INTERNAL_SERVER_ERROR)
            v = Validator(self.schema2)
            v.require_all = True
            if not v.validate(request.data):
                return Response({"errors": v.errors},
                                status.HTTP_400_BAD_REQUEST)
            name = request.data["name"]
            duration = request.data['duration']
            host = request.data['host']
            if "participant" in request.data:
                participant = request.data['participant']
            podcast = Podcast.objects.get(pk=pk)
            podcast.name = name
            podcast.duration_in_number_of_seconds = duration
            podcast.host = host
            if "participant" in request.data:
                podcast.participant = participant
            podcast.save()
            return Response({
                "status": "success",
                "data": model_to_dict(podcast)
            })
        else:
            return Response(
                {
                    "errors":
                    "Invalid   audioFileType. audioFileType can either be Song,Podcast or Audiobook "
                }, status.HTTP_400_BAD_REQUEST)
示例#7
0
    def post(self, request):
        file_type = request.data["audioFileType"]
        if file_type == "Song":
            v = Validator(self.schema1)
            v.require_all = True
            if not v.validate(request.data):
                return Response({"errors": v.errors},
                                status.HTTP_400_BAD_REQUEST)
            name = request.data["name"]
            duration = request.data['duration']
            song = Song.objects.create(name=name,
                                       duration_in_number_of_seconds=duration)
            return Response({"status": "success", "data": model_to_dict(song)})

        elif file_type == "Podcast":
            v = Validator(self.schema2)
            v.require_all = True
            if not v.validate(request.data):
                return Response({"errors": v.errors},
                                status.HTTP_400_BAD_REQUEST)
            name = request.data["name"]
            duration = request.data['duration']
            host = request.data['host']
            if "participant" in request.data:
                participant = request.data['participant']
                podcast = Podcast.objects.create(
                    name=name,
                    duration_in_number_of_seconds=duration,
                    host=host,
                    participant=participant)
            else:
                podcast = Podcast.objects.create(
                    name=name,
                    duration_in_number_of_seconds=duration,
                    host=host)

            return Response({
                "status": "success",
                "data": model_to_dict(podcast)
            })
        elif file_type == "Audiobook":
            v = Validator(self.schema3)
            v.require_all = True
            if not v.validate(request.data):
                return Response({"errors": v.errors},
                                status.HTTP_400_BAD_REQUEST)
            title = request.data["title"]
            author = request.data["author"]
            narrator = request.data["narrator"]
            duration = request.data['duration']
            audiobook = Audiobook.objects.create(
                title=title,
                duration_in_number_of_seconds=duration,
                author=author,
                narrator=narrator)
            return Response({
                "status": "success",
                "data": model_to_dict(audiobook)
            })

        else:
            return Response(
                {
                    "errors":
                    "Invalid   audioFileType. audioFileType can either be Song,Podcast or Audiobook "
                }, status.HTTP_400_BAD_REQUEST)
def lambda_handler(event, context):
    ''' 
    This function validates input raw dataset against schema specified in the env variable
    '''

    print(event)
    result = {}
    s3_resource = boto3.resource('s3')
    #to_date = lambda s: datetime.strptime(s, os.environ['dateformat'])
    bucket_name = event['bucket_name']
    key_name = event['key_name']
    source_file_name = event['file_name']
    #source_file_name_to_copy = bucket_name + "/" + key_name
    #error_file_name="error/" + source_file_name

    schema = {}
    schema = json.loads(os.environ['schema'])

    for keys in schema:
        if 'format' in schema[keys]:
            date_format_provided = schema[keys]['format']
            to_date = lambda s: datetime.strptime(s, date_format_provided)
            schema[keys].pop("format")
            schema[keys]['coerce'] = to_date

    v = Validator(schema)
    v.allow_unknown = False
    v.require_all = True
    source_file_path = "s3://" + bucket_name + "/" + key_name
    try:
        df = pd.read_csv(source_file_path)
        print("Successfuly read : " + source_file_path)
    except:
        result['Validation'] = "FAILURE"
        result['Reason'] = "Errro while reading csv"
        result['Location'] = os.environ['source_folder_name']
        print("Error while reading csv")
        return (result)
    result['Validation'] = "SUCCESS"
    result['Location'] = os.environ['source_folder_name']
    df_dict = df.to_dict(orient='records')
    transformed_file_name = "s3://" + bucket_name + "/" + str(
        os.environ['stage_folder_name']) + "/" + source_file_name

    if len(df_dict) == 0:
        result['Validation'] = "FAILURE"
        result['Reason'] = "NO RECORD FOUND"
        result['Location'] = os.environ['source_folder_name']
        print("Moving file to error folder")
        return (result)
    for idx, record in enumerate(df_dict):
        if not v.validate(record):
            result['Validation'] = "FAILURE"
            result['Reason'] = str(v.errors) + " in record number " + str(idx)
            result['Location'] = os.environ['source_folder_name']
            print("Moving file to error folder")
            return (result)
            break

    df['Month'] = df['Date'].astype(str).str[0:2]
    df['Day'] = df['Date'].astype(str).str[3:5]
    df['Year'] = df['Date'].astype(str).str[6:10]
    df.to_csv(transformed_file_name, index=False)
    s3_resource.Object(bucket_name, key_name).delete()
    print("Successfuly moved file to  : " + transformed_file_name)
    return (result)