PK!N^^pycorreios3/CEP.pyfrom .correios_webservice_client import CorreiosWSClient import requests import json import collections class CEP: client: CorreiosWSClient=None def __init__(self, cep: str): cep = "".join(filter(lambda x: x.isdigit(), cep)) assert len(cep) == 8 if len(cep) != 8: raise(RuntimeError('CEP {} inválido'.format(cep))) self.cep8 = cep self.cep3 = cep[-3:] self.cep5 = cep[:5] self.cep9 = self.cep5 + '-' + self.cep3 assert len(self.cep3) == 3 assert len(self.cep5) == 5 assert len(self.cep9) == 9 self.consulta = collections.OrderedDict() def consulta_sigep(self, client=None): if client is None: if self.client is None: self.client = CorreiosWSClient(load_api_sigep=True, producao=True) else: self.client = client self.client.load_api_sigep() self.consulta['sigep'] = self.client.api_sigep.service.consultaCEP(self.cep8) return self.consulta['sigep'] def consulta_viacep(self): url_api = ('http://www.viacep.com.br/ws/{}/json/unicode'.format(self.cep8)) req = requests.get(url_api) if req.status_code == 200: self.consulta['viacep'] = json.loads(req.text, strict=False) return self.consulta['viacep'] else: return None def consulta_postmon(self): url_api = 'https://api.postmon.com.br/v1/cep/{}'.format(self.cep8) req = requests.get(url_api) if req.status_code == 200: self.consulta['postmon'] = json.loads(req.text, strict=False) return self.consulta['postmon'] else: return None def consulta_cepaberto(self, token): url_api = 'http://www.cepaberto.com/api/v3/cep?cep={}'.format(self.cep8) req = requests.get(url_api, headers={'Authorization': 'Token token={}'.format(token)}) if req.status_code == 200: self.consulta['cepaberto'] = json.loads(req.text, strict=False) return self.consulta['cepaberto'] else: return None PK!zgpycorreios3/__init__.pyfrom .correios_webservice_client import CorreiosWSClient from .sro import SRO from .CEP import CEP from .credenciais import Credenciais from .cartao_postagem import CartaoPostagem from .sigepweb import SigepWeb PK!SSpycorreios3/calc_preco_prazo.pyfrom .correios_webservice_client import CorreiosWSClient from .CEP import CEP from .volume import Volume class CalcPrecoPrazo: def __init__(self, credenciais=None, cartao_postagem=None, nCdEmpresa: str=None, sDsSenha: str=None, nCdServico: list=None, sCepOrigem=None, sCdMaoPropria: bool=True, sCdAvisoRecebimento: bool=True, client=None): if sum(nCdEmpresa is None, sDsSenha is None) not in (0, 2): raise(RuntimeError('nCdEmpresa e sDsSenha precisam estar ambos definidos ou ambos indefinidos')) if sum((credenciais is None, cartao_postagem is None, (nCdEmpresa is None or sDsSenha is None))) != 2: raise(RuntimeError('E necessario definir um e apenas um dentre: \ credenciais, cartao_postagem e nCdEmpresa/sDsSenha')) if credenciais is None and cartao_postagem is not None: credenciais = cartao_postagem.get_credenciais() if credenciais is not None: self.nCdEmpresa, self.sDsSenha = credenciais.get_cred_calc() else: self.nCdEmpresa = nCdEmpresa self.sDsSenha = sDsSenha sCepOrigem = self.ajuste_cep(sCepOrigem) nCdServico = self.ajuste_nCdServico(nCdServico) if cartao_postagem is not None: self.nCdServico = nCdServico if nCdServico is not None else cartao_postagem.lista_codigo_servicos() self.sCepOrigem = sCepOrigem if sCepOrigem is not None else cartao_postagem.cep_origem_padrao.cep8 else: self.nCdServico = nCdServico self.sCepOrigem = sCepOrigem self.sCdMaoPropria = sCdMaoPropria self.sCdAvisoRecebimento = sCdAvisoRecebimento self.client = client if client is not None else CorreiosWSClient() self.client.load_api_preco_prazo() self.api = self.client.api_preco_prazo.service self.auth_dict = {'nCdEmpresa': self.nCdEmpresa, 'sDsSenha': self.sDsSenha} def CalcPrazo(self, sCepDestino, sCepOrigem=None, nCdServico=None): sCepOrigem = self.ajuste_cep(sCepOrigem, self.sCepOrigem) sCepDestino = self.ajuste_cep(sCepDestino) nCdServico = self.ajuste_nCdServico(nCdServico, self.nCdServico) return self.api.CalcPrazo(sCepOrigem=sCepOrigem, sCepDestino=sCepDestino, nCdServico=nCdServico) def CalcPrecoPrazo(self, volume, sCepDestino, sCepOrigem=None, nCdServico=None, sCdMaoPropria: bool=None, sCdAvisoRecebimento: bool=None, nValDeclarado = None): if not isinstance(volume, Volume): raise(RuntimeError('Calc: Parametro volume precisa ser um objeto Volume.')) if not volume.peso: raise (RuntimeError('Calc: Informacao de peso é obrigatória em um volume.')) nValDeclarado = nValDeclarado if nValDeclarado is not None else volume.valor_declarado sCepDestino = self.ajuste_cep(sCepDestino) sCepOrigem = self.ajuste_cep(sCepOrigem, self.sCepOrigem) nCdServico = self.ajuste_nCdServico(nCdServico, self.nCdServico) sCdMaoPropria = sCdMaoPropria if sCdMaoPropria is not None else self.sCdMaoPropria sCdAvisoRecebimento = sCdAvisoRecebimento if sCdAvisoRecebimento is not None else self.sCdAvisoRecebimento r = self.api.calcPrecoPrazo(nCdServico=nCdServico, sCepOrigem=sCepOrigem, sCepDestino=sCepDestino, sCdMaoPropria=sCdMaoPropria, sCdAvisoRecebimento=sCdAvisoRecebimento, nValDeclarado=nValDeclarado, StrRetorno='XML', nIndicaCalculo='3', **volume.params_calc(), **self.auth_dict) def get_client(self): return self.client @classmethod def ajuste_nCdServico(cls, nCdServico, value_if_none=None): if nCdServico is not None: if isinstance(nCdServico, str): nCdServico = [nCdServico] elif not isinstance(nCdServico, list): raise(RuntimeError('Parametro nCdServico invalido!')) else: nCdServico = value_if_none return nCdServico @classmethod def ajuste_cep(cls, cep, value_if_none=None): if cep is not None: if isinstance(cep, str): cep = CEP(cep).cep8 elif isinstance(sCepOrigem, CEP): cep = cep.cep8 else: raise(RuntimeError('Parametro sCepOrigem ou sCepDestino invalido!')) else: cep = value_if_none return cep PK!W F$[[pycorreios3/cartao_postagem.pyfrom .CEP import CEP from .credenciais import Credenciais class CartaoPostagem: def __init__(self, num_cartao: str, credenciais, nome: str = None, cep_origem_padrao = None): self.num_cartao = num_cartao self.credenciais = credenciais self.nome = nome self.cep_origem = cep_origem_padrao if not isinstance(credenciais, Credenciais): raise (RuntimeError('Parametro credenciais invalido!')) if cep_origem_padrao is not None: if isinstance(cep_origem_padrao, str): self.cep_origem = CEP(cep_origem_padrao) elif not isinstance(self.cep_origem, CEP): raise(RuntimeError('Parametro cep_origem_padrao invalido!')) def get_credenciais(self): return self.credenciais def cep_origem_padrao(self): return self.cep_origem PK!()pycorreios3/correios_webservice_client.pyimport zeep from zeep.cache import InMemoryCache URI_WSDL_CALC_PRECO_PRAZO = 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL' URI_WSDL_SRO = 'http://webservice.correios.com.br/service/rastro/Rastro.wsdl' URI_WSDL_SIGEP_HOMOLOGACAO = 'https://apphom.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl' URI_WSDL_SIGEP_PRODUCAO = 'https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl' class CorreiosWSClient(): api_preco_prazo: zeep.Client=None api_sro: zeep.Client=None api_sigep: zeep.Client=None api_sigep_homologacao: zeep.Client=None api_sigep_producao: zeep.Client=None cache: zeep.cache.InMemoryCache transport: zeep.Transport def __init__(self, load_api_preco_prazo: bool=False, load_api_sro: bool=False, load_api_sigep: bool=False, producao: bool=False): self.producao = producao self.cache = zeep.cache.InMemoryCache(timeout=86400) self.transport = zeep.Transport(cache=self.cache, timeout=20, operation_timeout=15) if load_api_preco_prazo: self.load_api_preco_prazo() if load_api_sro: self.load_api_sro() if load_api_sigep: self.load_api_sigep() def load_api_preco_prazo(self): if self.api_preco_prazo is None: self.api_preco_prazo = zeep.Client(URI_WSDL_CALC_PRECO_PRAZO, transport=self.transport) def load_api_sro(self): if self.api_sro is None: self.api_sro = zeep.Client(URI_WSDL_SRO, transport=self.transport) def load_api_sigep(self): if self.api_sigep is None: uri = URI_WSDL_SIGEP_PRODUCAO if self.producao else URI_WSDL_SIGEP_HOMOLOGACAO self.api_sigep = zeep.Client(uri, transport=self.transport) def load_api_sigep_homologacao(self): if self.api_sigep_homologacao is None: self.api_sigep_homologacao = zeep.Client(URI_WSDL_SIGEP_HOMOLOGACAO, transport=self.transport) PK!I/pycorreios3/credenciais.py class Credenciais: def __init__(self, cnpj: str = None, num_contrato: str = None, cod_adm: str = None, senha_sigep: str = None, senha_sro: str = None, senha_calc: str = None, usuario_sigep: str = None, usuario_sro: str = None, usuario_calc: str = None, usuario_idcorreios: str = None, senha_idcorreios: str = None): if cnpj is not None: cnpj = "".join(filter(lambda x: x.isdigit(), cnpj)) assert len(cnpj) == 14 if cnpj is not None and senha_calc is None: senha_calc = cnpj[:8] if senha_calc is not None and usuario_calc is None: usuario_calc = cod_adm if senha_sro is not None and usuario_sro is None: usuario_sro = num_contrato if senha_sigep is not None and usuario_sigep is None: usuario_sigep = cnpj self.cnpj = cnpj self.num_contrato = num_contrato self.cod_adm = cod_adm self.usuario_calc = usuario_calc self.senha_calc = senha_calc self.usuario_sro = usuario_sro self.senha_sro = senha_sro self.usuario_sigep = usuario_sigep self.senha_sigep = senha_sigep self.usuario_idcorreios = usuario_idcorreios self.senha_idcorreios = senha_idcorreios def get_cred_calc(self): if self.senha_calc is None or self.usuario_calc is None: raise(RuntimeError('Credenciais para serviço CalcPrecoPrazo não definidas.')) return self.usuario_calc, self.senha_calc def get_cred_sro(self): if self.senha_sro is None or self.usuario_sro is None: raise(RuntimeError('Credenciais para serviço SRO/Rastro não definidas.')) return self.usuario_sro, self.senha_sro def get_cred_sigep(self): #if self.senha_sigep is None or self.usuario_sigep is None or self.num_contrato is None: # raise (RuntimeError('Credenciais para serviço SIGEP não definidas.')) return self.usuario_sigep, self.senha_sigep, self.cnpj, self.num_contrato, self.cod_adm def get_cred_idcorreios(self): return self.usuario_idcorreios, self.senha_idcorreios PK!??pycorreios3/servicos.pyimport collections DISPONIVEL_CONTRATO = 1 DISPONIVEL_VAREJO = 2 SENTIDO_ENTREGA = 1 SENTIDO_REVERSO = 2 SENTIDO_ENTREGA_E_COLETA = 3 PAGTO_A_VISTA = 1 PAGTO_NA_ENTREGA = 2 PAGTO_FATURADO = 3 PAGO_DESTINATARIO = 1 PAGO_REMETENTE = 2 CATEGORIA_STANDARD = "standard" CATEGORIA_EXPRESSO = "expresso" CATEGORIA_PREMIUM = "premium" SERVICOS_VAREJO_A_VISTA =\ [{"codigo": "04510", "categoria": "standard", "familia": "PAC", "nome": "PAC à vista"}, {"codigo": "04014", "categoria": "expresso", "familia": "SEDEX", "nome": "SEDEX à vista"}, {"codigo": "40169", "categoria": "premium", "familia": "SEDEX 12", "nome": "SEDEX 12 à vista"}, {"codigo": "40215", "categoria": "premium", "familia": "SEDEX 10", "nome": "SEDEX 10 à vista"}, {"codigo": "40290", "categoria": "premium", "familia": "SEDEX Hoje", "nome": "SEDEX Hoje"}] SERVICOS_VAREJO_A_COBRAR =\ [{"codigo": "04707", "categoria": "standard", "familia": "PAC", "nome": "PAC à vista pagamento na entrega"}, {"codigo": "04065", "categoria": "expresso", "familia": "SEDEX", "nome": "SEDEX à vista pagamento na entrega"}] CODIGOS_SERVICOS_VAREJO = list(map(lambda x: x.codigo, SERVICOS_VAREJO_A_VISTA + SERVICOS_VAREJO_A_COBRAR)) class Servico: def __init__(self, codigo, nome, categoria, familia='', quem_paga=PAGO_REMETENTE, quando_paga=None, sentido=SENTIDO_ENTREGA, disponibilidade=None, id=None, cartoes_postagem=None): self.id = id self.cartoes_postagem = cartoes_postagem self.codigo = codigo self.categoria = categoria self.familia = familia self.nome = nome self.disponibilidade = disponibilidade self.sentido = sentido self.quem_paga = quem_paga self.quando_paga = quando_paga if not disponibilidade: if codigo in CODIGOS_SERVICOS_VAREJO: self.servico_varejo = True else: self.servico_contrato = True else: self.servico_varejo = (disponibilidade == DISPONIVEL_VAREJO) self.servico_contrato = (disponibilidade == DISPONIVEL_CONTRATO) if not (self.servico_contrato or self.servico_varejo): raise (RuntimeError('Parametro disponibilidade com valor invalido.')) self.entrega = (sentido == SENTIDO_ENTREGA) self.reverso = (sentido == SENTIDO_REVERSO) self.entrega_e_coleta = (sentido == SENTIDO_ENTREGA_E_COLETA) if not (self.entrega or self.reverso or self.entrega_e_coleta): raise (RuntimeError('Parametro sentido com valor invalido.')) self.remetente_paga = (quem_paga == PAGO_REMETENTE) self.destinatario_paga = (quem_paga == PAGO_DESTINATARIO) if not (self.remetente_paga or self.destinatario_paga): raise(RuntimeError('Parametro quem_e_cobrado com valor invalido.')) if not quando_paga: if self.servico_varejo: self.faturado = False self.a_vista = self.remetente_paga self.na_entrega = self.destinatario_paga if self.servico_contrato: self.a_vista = False self.na_entrega = self.destinatario_paga self.faturado = self.remetente_paga else: self.a_vista = (quando_paga == PAGTO_A_VISTA) self.na_entrega = (quando_paga == PAGTO_NA_ENTREGA) self.faturado = (quando_paga == PAGTO_FATURADO) if not (self.a_vista or self.na_entrega or self.faturado): raise (RuntimeError('Parametro quando_paga com valor inválido.')) @classmethod def new_servico_contrato(cls, codigo, nome, categoria, familia='', quem_paga=PAGO_REMETENTE, quando_paga=PAGTO_FATURADO, sentido=SENTIDO_ENTREGA): return cls(codigo=codigo, nome=nome, categoria=categoria, familia=familia, quem_paga=quem_paga, quando_paga=quando_paga, sentido=sentido, disponibilidade=DISPONIVEL_CONTRATO) @classmethod def new_servico_varejo(cls, codigo, nome, categoria, quem_paga, familia=''): if quem_paga == PAGO_REMETENTE: quando_paga = PAGTO_A_VISTA elif quem_paga == PAGO_DESTINATARIO: quando_paga = PAGTO_NA_ENTREGA else: raise(RuntimeError('Parametro quem_paga com valor invalido.')) return cls(codigo=codigo, nome=nome, categoria=categoria, familia=familia, quem_paga=quem_paga, quando_paga=quando_paga, sentido=SENTIDO_ENTREGA, disponibilidade=DISPONIVEL_VAREJO) @classmethod def servicos_varejo(cls): arr = [] for i in SERVICOS_VAREJO_A_VISTA: i['quem_paga'] = PAGO_REMETENTE arr.append(cls.new_servico_varejo(**i)) for i in SERVICOS_VAREJO_A_COBRAR: i['quem_paga'] = PAGO_DESTINATARIO arr.append(cls.new_servico_varejo(**i)) return arr class CarteiraServicos: def __init__(self, array_de_obj_servico=[]): self.servicos = collections.OrderedDict self.add(array_de_obj_servico) def new_from_sigepweb(self, sigepweb): sigepweb.servicos.buscaCliente() def add(self, servico): count = 0 if isinstance(servico, Servico): self.servicos[servico.codigo] = servico count = 1 else: for s in servico: self.servicos[s.codigo] = s count += 1 return count def codigos(self): return list(map(lambda x: x.codigo, self.servicos.items())) def filter(self, familias: list=None, categorias: list=None, ids: list = None, cartoes_postagem: list = None, nomes: list=None, contrato: bool=None, varejo: bool=None, entrega: bool=None, reverso: bool=None, entrega_e_coleta: bool=None, pago_destinatario: bool=None, pago_remetente: bool=None, pagto_a_vista: bool=None, pagto_na_entrega: bool=None, pagto_faturado: bool=None, arr_servicos: list=None): arr = self.servicos.items() if arr_servicos is None else arr_servicos if familias is not None: arr = filter((lambda x: x.familia in familias), arr) if categorias is not None: arr = filter((lambda x: x.categoria in categorias), arr) if ids is not None: arr = filter((lambda x: x.id in ids), arr) if cartoes_postagem is not None: arr = filter((lambda x: x.id in ids), arr) if nomes is not None: arr = filter((lambda x: x.nome in nomes), arr) if contrato is not None: arr = filter((lambda x: (x.servico_contrato == contrato)), arr) if varejo is not None: arr = filter((lambda x: (x.servico_varejo == varejo)), arr) if pago_destinatario is not None: arr = filter((lambda x: (x.destintario_paga == pago_destinatario)), arr) if pago_remetente is not None: arr = filter((lambda x: (x.remetente_paga == pago_remetente)), arr) if entrega is not None or reverso is not None or entrega_e_coleta is not None: arr = filter((lambda x: (x.entrega if entrega is not None else None, x.reverso if reverso is not None else None, x.entrega_e_coleta if entrega_e_coleta is not None else None) == (entrega. reverso. entrega_e_coleta)), arr) if pagto_a_vista is not None or pagto_na_entrega is not None or pagto_faturado is not None: arr = filter((lambda x: (x.a_vista if pagto_a_vista is not None else None, x.na_entrega if pagto_na_entrega is not None else None, x.faturado if pagto_faturado is not None else None) == (pagto_a_vista. pagto_na_entrega. pagto_faturado)), arr) return arr PK! դy y pycorreios3/sigepweb.pyfrom .correios_webservice_client import CorreiosWSClient from .credenciais import Credenciais from .cartao_postagem import CartaoPostagem HOMOLOGACAO_USUARIO = 'sigep' HOMOLOGACAO_SENHA = 'n5f9t8' HOMOLOGACAO_COD_ADM = '17000190' HOMOLOGACAO_CONTRATO = '9992157880' HOMOLOGACAO_CARTAO = ['0067599079'] HOMOLOGACAO_CNPJ = '34028316000103' class SigepWeb: def __init__(self, credenciais, lista_num_cartoes_postagem: list, producao: bool=False, client = None): if client is not None: if client.producao != producao: raise(RuntimeError("Cliente e Sigep com parametros 'producao' divergentes")) client.load_api_sigep() else: client = CorreiosWSClient(load_api_sigep=True, producao=producao) self.client = client self.api = self.client.api_sigep.service if not isinstance(credenciais, Credenciais): if producao: raise(RuntimeError("Paramentro 'credenciais' inválido!" )) else: credenciais = Credenciais(cnpj=HOMOLOGACAO_CNPJ, num_contrato=HOMOLOGACAO_CONTRATO, cod_adm=HOMOLOGACAO_COD_ADM, senha_sigep=HOMOLOGACAO_SENHA, usuario_sigep=HOMOLOGACAO_USUARIO) lista_num_cartoes_postagem = HOMOLOGACAO_CARTAO self.usuario, self.senha, self.cnpj, self.num_contrato, self.cod_adm = credenciais.get_cred_sigep() self.auth = {'usuario': self.usuario, 'senha': self.senha} self.cartoes_postagem = {} for c in lista_num_cartoes_postagem: self.add_cartao_postagem(c) def add_cartao_postagem(self, num_cartao: str): r = self.api.getStatusCartaoPostagem(numeroCartaoPostagem=num_cartao, **self.auth) resultado = r['return'] if resultado == 'Cancelado': return None elif resultado == 'Normal': r = self.buscaCliente(num_cartao) print(r) def getStatusCartaoPostagem(self, numero_cartao_postagem: str): r = self.api.getStatusCartaoPostagem(numeroCartaoPostagem=numero_cartao_postagem, **self.auth) resultado = r['return'] if resultado == 'Cancelado': return False elif resultado == 'Normal': return True else: raise(RuntimeError('Erro processando o retorno de getStatusCartaoPostagem.')) PK!p7h h pycorreios3/sro.pyfrom .correios_webservice_client import CorreiosWSClient from .credenciais import Credenciais TIPO_LISTA = 'L' TIPO_INTERVALO = 'F' RESULTADO_TODOS = 'T' RESULTADO_ULTIMO = 'U' LINGUA_PT = '101' LINGUA_EN = '102' class SRO: def __init__(self, credenciais=None, usuario: str=None, senha: str=None, tipo: str=TIPO_LISTA, resultado: str=RESULTADO_TODOS, lingua: str=LINGUA_PT, client = None): if credenciais is not None: if not isinstance(credenciais, Credenciais): raise(RuntimeError('SRO: Parametro credenciais de tipo invalido!')) if (credenciais.usuario_sro is not None and usuario is not None and credenciais.usuario_sro != usuario) or \ (credenciais.senha_sro is not None and senha is not None and credenciais.senha_sro != senha): raise(RuntimeError('SRO: Credenciais duplicadas e divergentes!')) self.usuario = usuario if usuario is not None else credenciais.usuario_sro self.senha = senha if senha is not None else credenciais.senha_sro elif usuario is None or senha is None: raise (RuntimeError('SRO: usuario e/ou senha não informados!')) else: self.usuario = usuario self.senha = senha self.client = client if client is not None else CorreiosWSClient() self.client.load_api_sro() self.api = self.client.api_sro.service self.tipo = tipo self.resultado = resultado self.lingua = lingua @classmethod def new_homologacao(cls): return cls(usuario="ECT", senha="SRO", resultado=RESULTADO_ULTIMO) def buscaEventosLista(self, objetos, tipo: str=None, resultado: str=None, lingua: str=None): tipo = tipo if tipo is not None else self.tipo resultado = resultado if resultado is not None else self.resultado lingua = lingua if lingua is not None else self.lingua if isinstance(objetos, str): objetos = [objetos] elif not isinstance(objetos, list): raise(RuntimeError('SRO: Parametro objetos de tipo invalido!')) elif len(objetos) == 0: return None r = self.api.buscaEventosLista(usuario=self.usuario, senha=self.senha, objetos=objetos, tipo=tipo, resultado=resultado, lingua=lingua) return r PK!VZ( ( pycorreios3/volume.pyFORMATO_CAIXA_OU_PACOTE = 1 FORMATO_ROLO_OU_PRISMA = 2 FORMATO_ENVELOPE = 3 class Volume: def __init__(self, formato, comprimento, altura, largura, diametro, peso, valor_declarado): self.formato = formato self.comprimento = comprimento self.altura = altura self.largura = largura self.diametro = diametro self.peso = peso self.valor_declarado = valor_declarado self.caixa_pacote = False self.rolo_prisma = False self.envelope = False if formato == FORMATO_CAIXA_OU_PACOTE: self.caixa_pacote = True if self.diametro: raise(RuntimeError('Diâmetro não deve ser especificado para uma caixa/pacote.')) elif formato == FORMATO_ROLO_OU_PRISMA: self.rolo_prisma = True if self.altura: raise (RuntimeError('Altura não deve ser especificada para um rolo ou prisma.')) if self.largura: raise (RuntimeError('Largura não deve ser especificada para uma caixa/pacote.')) elif formato == FORMATO_ENVELOPE: self.envelope = True if self.altura: raise (RuntimeError('Altura não deve ser especificada para um envelope.')) if self.diametro: raise (RuntimeError('Diâmetro não deve ser especificado para um envelope.')) else: raise(RuntimeError('Tipo inválido')) def params_calc(self, inclui_val_declarado: bool=False): d = {'nCdFormato': self.formato, 'nVlPeso': self.peso, 'nVlComprimento': self.comprimento, 'nVlAltura': self.altura, 'nVlLargura': self.largura, 'nVlDiametro': self.diametro} if inclui_val_declarado: d['nVlDeclarado'] = self.valor_declarado return d @classmethod def new_caixa_ou_pacote(cls, comprimento=20, altura=20, largura=20, peso=0, valor_declarado=0): return cls(formato=FORMATO_CAIXA_OU_PACOTE, comprimento=comprimento, altura=altura, largura=largura, peso=peso, valor_declarado=valor_declarado) @classmethod def new_envelope(cls, comprimento=20, largura=20, peso=0, valor_declarado=0): return cls(formato=FORMATO_CAIXA_OU_PACOTE, comprimento=comprimento, largura=largura, peso=peso, valor_declarado=valor_declarado) @classmethod def new_rolo_ou_prisma(cls, comprimento=20, diametro=20, peso=0, valor_declarado=0): return cls(tipo=FORMATO_CAIXA_OU_PACOTE, comprimento=comprimento, diametro=diametro, peso=peso, valor_declarado=valor_declarado) PK!>#pycorreios3-1.2.2.dist-info/LICENSECC0 LICENSE =========== To the extent possible under law, Marcelo Bello has waived all copyright and related or neighboring rights to pycorreios3. This work is published from: Brasil. PK!Hu)GTU!pycorreios3-1.2.2.dist-info/WHEEL HM K-*ϳR03rOK-J,/R(O-)$qzd&Y)r$UV&UrPK!HW|$pycorreios3-1.2.2.dist-info/METADATARn0+J dVm gǙf 'Nt X{7OsI7:3h+Xȹ*GC!Xs q;t+1;!bxSü-+lS*֦PKC]jGW,˙B|nm,$>QVig ~"q5-:t'C5N[`cD)`FTl`|=rGsyQʳ;>Xd}Pp3YCC%%6đŵuַҾ8ƉxoaxƤ cpry6;/9QO(9Sb_Ѥ~RM?WiOĻߍ=V !~PK!H ܳ?j"pycorreios3-1.2.2.dist-info/RECORDɎH{? t/9` Mql/%dK 16~a4SCR _ 0g7S8Q+ h+fvdʱ=Nʜ&yh ܏nE!j+/' pD'*`o3?K: &x X3N)8pP=Ĩ/dsksfK6%";bb2F9lV+'kﵶ ?`V./aoU\ԉ|%uP &0lunAH;%qP*W$Gȧ_}YF{adFz0 Yss ^;JӆρpjY۞LXyoP\)\ޫE={M"ݳ0XvHdUC9d\ lJwDxulQDtbwB 8/R+fxs5iN=YZV?٨U/Q \i.BЂ!}h4}aeQ??mxڇi4 Zg_v鷞Ms vc]6?h 9}PԏPK!N^^pycorreios3/CEP.pyPK!zgpycorreios3/__init__.pyPK!SS pycorreios3/calc_preco_prazo.pyPK!W F$[[pycorreios3/cartao_postagem.pyPK!()2pycorreios3/correios_webservice_client.pyPK!I/O'pycorreios3/credenciais.pyPK!??0pycorreios3/servicos.pyPK! դy y Opycorreios3/sigepweb.pyPK!p7h h 6Ypycorreios3/sro.pyPK!VZ( ( bpycorreios3/volume.pyPK!>#)mpycorreios3-1.2.2.dist-info/LICENSEPK!Hu)GTU!#npycorreios3-1.2.2.dist-info/WHEELPK!HW|$npycorreios3-1.2.2.dist-info/METADATAPK!H ܳ?j"ppycorreios3-1.2.2.dist-info/RECORDPK }s