Achtergrond
Validatie en conversie van de gegevens.
Het probleem van de desinfecterende gegevens (controle juistheid en transformeren naar een bruikbare vorm) is algemeen verspreid in de programmering:
- Hoe kan ik controleren input van de gebruiker correct is?
- Hoe kan ik stoeien gegevens van een spreadsheet in data en getallen?
- Hoe kan ik rauwe databasevelden te zetten in een programmatische object?
Ian Bicking kwam met een verstandige idioom voor dit probleem, belichaamd in zijn FormEncode bibliotheek [FormEncode]: validatie en conversie zijn één en hetzelfde, en kan door het passeren van de ruwe gegevens via een keten van validators worden behandeld. Elke validator cheques en / of omzetting van data en geeft deze door naar de volgende.
In deze geest, konval is een pakket dat luidt als volgt:
- Een rijke bibliotheek van validering objecten
- Base classes voor het eenvoudig produceren aangepaste validators
- Functies gemakkelijk met behulp validators op verschillende manieren
Status
konval is in een verkennend staat, die is geproduceerd om een ander pakket te ondersteunen en te zien of het gebruik kan worden opgehaald uit de veralgemening van de conversie. Zoals. Het is nog steeds een spoedige vrijlating en de API kan veranderen. Comment wordt uitgenodigd.
installatie
De eenvoudigste manier om konval installeren is via easy_install [setuptools] of een equivalent programma:
easy_install konval
Als alternatief kan de tarball kan worden gedownload, uitgepakt en setup.py run:
tar zxvf konval.tgz
& Nbsp; cd konval
& Nbsp; python set.py installeren
konval is een module die geen vereisten heeft en zou moeten werken met zowat elke versie van Python.
konval Gebruik
Een volledige API is bij de brondistributie.
Voorbeelden
Meestal zal konval worden gebruikt om te controleren of schone waarden. Storingen resulteren in uitzonderingen gegooid:
# Converteren gebruikersinvoer een werkelijke integer
>>> Van konval import *
>>> Sanitize ('1.0', ToInt ())
1
>>> Sanitize ('één', ToInt ())
Traceback (meest recente oproep vorige)
...
ValueError: kan niet converteren '1.0' om integer
Een enkele validator of een lijst kan worden doorgegeven aan ontsmetten. Niet in alle zal resulteren in een uitzondering:
# Controleren een lijst heeft niet meer dan 3 leden
>>> Sanitize (['a', 'b', 'c'], [ToLength (), IsEqualOrLess (3)])
3
# Controleren van een wachtwoord is lang genoeg
>>> Sanitize ('mypass', [ToLength (), IsEqualOrMore (8)])
Traceback (meest recente oproep vorige)
...
ValueError: 6 is lager dan 8
Elk opvraagbare object met een enkele waarde ontvangen en retourneert kan worden gebruikt als een validator:
>>> Van string import *
>>> Sanitize ("mijn titel", [strip, kapitaliseren])
"Mijn titel '
Een rijke bibliotheek van vooraf gedefinieerde validators wordt geleverd:
>>> Sanitize ('abcde', IsNonblank ())
'Abcde'
>>> Sanitize (5, IsInRange (1,6))
5
>>> Sanitize ('foo', synoniemen ({'foo': 'bar', 'baz': 'Quux'}))
'Bar'
Custom validators kan gemakkelijk worden subklassen van een meegeleverde basisklasse:
klasse IsFoo (BaseValidator):
& Nbsp; def validate_value (zelf, waarde):
! & Nbsp; als value = 'foo':
& Nbsp; self.raise_validation_error (waarde)
& Nbsp; terugkeren True
Wat is nieuw in deze release:
- Hernoemd een paar validators om meer consistente regeling. Namen moeten nu worden vastgesteld.
Eisen
- Python
Beperkingen
- konval is gericht op een one-way transformatie van data, het draaien van input van de gebruiker of opgeslagen gegevens in Python objecten. Natuurlijk kan het worden gebruikt in de omgekeerde richting, maar dit is geen belangrijkste gebruik. FormEncode is gebaseerd op twee richtingen (heen en terug) conversie van gegevens, zodat een bruikbaar alternatief kan zijn.
- De naam konval werd gekozen omdat:
- Er is al een Python bibliotheek genaamd & quot; sanity & quot;
- van & quot; Valcon & quot ;, & quot; Valkon & quot ;, & quot; Conval & quot; etc. Het was degene met de minste hits op Google
Reacties niet gevonden