Source code for prometeo.curp.client

from enum import Enum
from datetime import datetime

from prometeo import base_client
from .models import QueryResult, DocumentData, PersonalData
from .exceptions import CurpError

TESTING_URL = 'https://test.curp-api.qualia.uy'
PRODUCTION_URL = 'https://api.curp-api.qualia.uy'


[docs]class Gender(Enum): """A person's gender""" MALE = 'H' FEMALE = 'M'
[docs]class State(Enum): """ The state a person is registered """ AGUASCALIENTES = 'AS' BAJA_CALIFORNIA = 'BC' BAJA_CALIFORNIA_SUR = 'BS' CAMPECHE = 'CC' COAHUILA = 'CL' COLIMA = 'CM' CHIAPAS = 'CS' CHIHUAHUA = 'CH' CIUDAD_DE_MEXICO = 'DF' DURANGO = 'DG' GUANAJUATO = 'GT' GUERRERO = 'GR' HIDALGO = 'HG' JALISCO = 'JC' ESTADO_DE_MEXICO = 'MC' MICHOACAN = 'MN' MORELOS = 'MS' NAYARIT = 'NT' NUEVO_LEON = 'NL' OAXACA = 'OC' PUEBLA = 'PL' QUERETARO = 'QT' QUINTANA_ROO = 'QR' SAN_LUIS_POTOSI = 'SP' SINALOA = 'SL' SONORA = 'SR' TABASCO = 'TC' TAMAULIPAS = 'TS' TLAXCALA = 'TL' VERACRUZ = 'VZ' YUCATAN = 'YN' ZACATECA = 'ZS' NACIDO_EN_EL_EXTRANJERO = 'NE'
[docs]class CurpAPIClient(base_client.BaseClient): """ API Client for CURP queries """ ENVIRONMENTS = { 'testing': TESTING_URL, 'production': PRODUCTION_URL, } def _make_result(self, response_data): document_data = response_data['document_data'] personal_data = response_data['personal_data'] return QueryResult( document_data=DocumentData( foja=document_data['foja'], clave_entidad_registro=document_data['claveEntidadRegistro'], num_acta=document_data['numActa'], tomo=document_data['tomo'], anio_reg=document_data['anioReg'], municipio_registro=document_data['municipioRegistro'], libro=document_data['libro'], entidad_registro=document_data['entidadRegistro'], clave_municipio_registro=document_data['claveMunicipioRegistro'], ), personal_data=PersonalData( sexo=personal_data['sexo'], entidad=personal_data['entidad'], nacionalidad=personal_data['nacionalidad'], status_curp=personal_data['statusCurp'], nombres=personal_data['nombres'], segundo_apellido=personal_data['segundoApellido'], clave_entidad=personal_data['claveEntidad'], doc_probatorio=personal_data['docProbatorio'], fecha_nacimiento=datetime.strptime( personal_data['fechaNacimiento'], "%d/%m/%Y" ), primer_apellido=personal_data['primerApellido'], curp=personal_data['curp'], ), pdf_url=response_data['pdf_url'], pdf=base_client.Download(self, response_data['pdf_url']), )
[docs] def query(self, curp): """ Find the personal data associated with a CURP :param curp: The CURP of the person to query :type curp: str :rtype: :class:`~prometeo.curp.models.QueryResult` """ response = self.call_api('POST', '/query', data={ 'curp': curp, }) if response['errors'] is not None: raise CurpError(response['errors']['detail']) return self._make_result(response['data'])
[docs] def reverse_query( self, state, birthdate, name, first_surname, last_surname, gender ): """ Search for a person by their personal information. :param state: The state where the person is registered :type state: :class:`State` :param birthdate: The person's birthdate :type birthdate: :class:`~datetime.datetime` :param name: The person's name :type name: str :param first_surname: The person's first surname :type first_surname: str :param last_surname: The person's last surname :type last_surname: str :param gender: The person's gender :type gender: :class:`Gender` :rtype: :class:`~prometeo.curp.models.QueryResult` """ response = self.call_api('POST', '/reverse-query', data={ 'state': state.value, 'birthdate': birthdate.strftime('%d/%m/%Y'), 'name': name, 'first_surname': first_surname, 'last_surname': last_surname, 'gender': gender.value, }) if response['errors'] is not None: raise CurpError(response['errors']['detail']) return self._make_result(response['data'])