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