mirror of https://github.com/interlegis/sapl.git
Vinícius Cantuária
4 years ago
committed by
GitHub
3 changed files with 171 additions and 0 deletions
@ -0,0 +1,57 @@ |
|||||
|
from django.core.exceptions import ValidationError |
||||
|
from django.forms import ModelForm |
||||
|
from sapl.settings import PROJECT_DIR |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
|
||||
|
from io import StringIO |
||||
|
from lxml import etree |
||||
|
import os |
||||
|
import re |
||||
|
import xml.dom.minidom as dom |
||||
|
|
||||
|
from .models import LexmlProvedor |
||||
|
|
||||
|
|
||||
|
class LexmlProvedorForm(ModelForm): |
||||
|
class Meta: |
||||
|
model = LexmlProvedor |
||||
|
fields = [ |
||||
|
"id_provedor", |
||||
|
"nome", |
||||
|
"id_responsavel", |
||||
|
"nome_responsavel", |
||||
|
"email_responsavel", |
||||
|
"xml" |
||||
|
] |
||||
|
|
||||
|
def clean(self): |
||||
|
cd = super().clean() |
||||
|
|
||||
|
if not self.is_valid(): |
||||
|
return cd |
||||
|
|
||||
|
if cd["xml"]: |
||||
|
xml = re.sub("\n|\t", "", cd["xml"].strip()) |
||||
|
|
||||
|
validar_xml(xml) |
||||
|
validar_schema(xml) |
||||
|
|
||||
|
return cd |
||||
|
|
||||
|
|
||||
|
def validar_xml(xml): |
||||
|
xml = StringIO(xml) |
||||
|
try: |
||||
|
dom.parse(xml) |
||||
|
except Exception as e: |
||||
|
raise ValidationError(_(F"XML mal formatado. Error: {e}")) |
||||
|
|
||||
|
def validar_schema(xml): |
||||
|
xml_schema = open(os.path.join(PROJECT_DIR, 'sapl/templates/lexml/schema.xsd'), 'rb').read() |
||||
|
schema_root = etree.XML(xml_schema) |
||||
|
schema = etree.XMLSchema(schema_root) |
||||
|
parser = etree.XMLParser(schema=schema) |
||||
|
try: |
||||
|
root = etree.fromstring(xml.encode(), parser) |
||||
|
except Exception as e: |
||||
|
raise ValidationError(_(F"XML mal formatado. Error: {e}")) |
@ -0,0 +1,106 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:profile="http://www.lexml.gov.br/profile_lexml" xmlns:xml="http://www.w3.org/XML/1998/namespace" targetNamespace="http://www.lexml.gov.br/profile_lexml" elementFormDefault="qualified" attributeFormDefault="unqualified" xml:lang="PT"> |
||||
|
<import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/> |
||||
|
<element name="ConfiguracaoProvedor" type="profile:ConfiguracaoProvedorType"/> |
||||
|
<complexType name="ConfiguracaoProvedorType"> |
||||
|
<sequence> |
||||
|
<element name="Provedor" type="profile:ProvedorType" maxOccurs="unbounded"/> |
||||
|
</sequence> |
||||
|
<attribute name="dataGeracao" type="dateTime" use="required"/> |
||||
|
</complexType> |
||||
|
<complexType name="ProvedorType"> |
||||
|
<sequence> |
||||
|
<element name="Administrador" type="profile:ResponsavelType"/> |
||||
|
<element name="Publicador" type="profile:PublicadorType" minOccurs="0" maxOccurs="unbounded"/> |
||||
|
</sequence> |
||||
|
<attribute name="idProvedor" type="integer" use="required"/> |
||||
|
<attribute name="nome" use="optional"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<maxLength value="255"/> |
||||
|
<whiteSpace value="preserve"/> |
||||
|
<minLength value="1"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
<attribute name="tipo" use="optional" default="Provedor"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<enumeration value="Provedor"/> |
||||
|
<enumeration value="Agregador"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
<attribute name="baseURL" type="anyURI"/> |
||||
|
</complexType> |
||||
|
<complexType name="PublicadorType"> |
||||
|
<sequence> |
||||
|
<element name="Responsavel" type="profile:ResponsavelType"/> |
||||
|
<element name="Perfil" type="profile:PerfilType" maxOccurs="unbounded"/> |
||||
|
</sequence> |
||||
|
<attribute name="idPublicador" type="integer" use="required"/> |
||||
|
<attribute name="nome" use="required"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<maxLength value="255"/> |
||||
|
<whiteSpace value="preserve"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
<attribute name="sigla" use="optional"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<maxLength value="25"/> |
||||
|
<whiteSpace value="preserve"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
</complexType> |
||||
|
<complexType name="ResponsavelType"> |
||||
|
<attribute name="idResponsavel" type="integer" use="required"/> |
||||
|
<attribute name="email" use="optional"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<whiteSpace value="replace"/> |
||||
|
<pattern value="[^@]+@[^\.]+(\.[^@]+)+"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
<attribute name="senha" type="string" use="optional"/> |
||||
|
</complexType> |
||||
|
<complexType name="RepositorioOAILexMLType"> |
||||
|
<attribute name="baseURL" type="anyURI" use="required"/> |
||||
|
</complexType> |
||||
|
<complexType name="PerfilType"> |
||||
|
<attribute name="localidade" use="required"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<whiteSpace value="replace"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
<attribute name="autoridade" use="required"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<whiteSpace value="replace"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
<attribute name="tipoDocumento" use="required"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<whiteSpace value="replace"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
<attribute name="tipoPerfil" use="optional" default="T"> |
||||
|
<simpleType> |
||||
|
<restriction base="string"> |
||||
|
<enumeration value="T"/> |
||||
|
<enumeration value="R"/> |
||||
|
<enumeration value="D"/> |
||||
|
</restriction> |
||||
|
</simpleType> |
||||
|
</attribute> |
||||
|
</complexType> |
||||
|
</schema> |
Loading…
Reference in new issue