Не могу проверить список значений для дубликатов, используя Python и Цербер - PullRequest
0 голосов
/ 05 апреля 2020

Я довольно плохо знаком с Python и Цербером. У меня есть требование, где мне нужно проверить список для любых пустых строк или дубликатов. Ниже я сделал то, что я сделал:

import cerberus

myschema = {'uid': {'type': 'list', 'schema': {'type': 'string', 'required' : True}}}

cerberus.rules_set_registry.add('myschema', myschema)
newval = Validator(myschema)

test = {'uid' : {'10000', '10001', '10002', '10003', '10004', '10005'}}
newval.validate(test)

По какой-то причине вывод всегда «Ложь».
В качестве альтернативы я попробовал «одно из» правил и предложил следующее:

from cerberus import Validator
document = {'column_name' : ['BLAH', 'SEX', 'DOMAIN', 'DOMAIN']}

schema = {'column_name' : {'oneof' : [{'type': 'list', 'contains' : ['DOMAIN']}]} }
v = Validator(schema)
v.validate(document, schema)

Выше всегда возвращают True. Я надеялся, что «oneof» может проверить дубликаты, и вышеупомянутое - правильный путь. Может кто-нибудь здесь, пожалуйста, поправьте меня, если я ошибаюсь. Заранее спасибо, Nix

1 Ответ

0 голосов
/ 20 апреля 2020

Хорошо. Я не смог найти ответ с помощью валидатора Cerberus, чтобы проверить дубликаты в списке. Я проверил Json схему, где это действительно легко. Ниже приведен код:

from jsonschema import validate

schema = { "type": "array", "uniqueItems": True}

mylist  = ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']

# Returns None if validated; else a validation error
validate(instance = mylist, schema = schema)

В Цербере валидация возвращает True, если подтверждено право; иначе Ложь. Принимая во внимание, что Json Схема возвращает None (в Python), если проверено, в противном случае выдает ошибку проверки, как указано ниже:

---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
<ipython-input-1-efa3c7f0da39> in <module>
      5 mylist  = ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']
      6 
----> 7 ans = validate(instance = mylist, schema = schema)
      8 if(ans == None): print('Validated as True')

~/Library/Python/3.8/lib/python/site-packages/jsonschema/validators.py in validate(instance, schema, cls, *args, **kwargs)
    932     error = exceptions.best_match(validator.iter_errors(instance))
    933     if error is not None:
--> 934         raise error
    935 
    936 

ValidationError: ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000'] has non-unique elements

Failed validating 'uniqueItems' in schema:
    {'type': 'array', 'uniqueItems': True}

On instance:
    ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']
...