Document Actions

Funções úteis em Python

by Tânia Andrea last modified 2007-11-23 18:56
  • Criar id no Plone
        """
        Cria id no Plone
    
        Exemplo: return plone_utils.normalizeString('Documento das Aplicações Financeiras')
        retorna documento-das-aplicacoes-financeiras
    
        """
        plone_utils = context.plone_utils
        return plone_utils.normalizeString(id)
    
  • Método que coloca pontos de três em três casas
    Obs: Muito utilizado para formatar matrículas ou até valores monetários sem casas decimais.
    
        def setRegistrationFormat(self, numero):
            """
            Retorna numero no formato 123.456.789, ao receber 123456789.
            """
    
            lista=[]
            cont=0
            tamanho=0
            numero_formatado=''
    
            if numero is not None:
                tamanho = len(numero)
                # transforma em lista
                while cont < tamanho:
                    lista.insert(cont,numero[cont])
                    cont+=1
                # coloca pontos
                while tamanho > 0:
                    tamanho = tamanho - 3
                    if tamanho > 0:
                        lista.insert(tamanho,'.')
                # transforma lista em string
                for item in lista:
                    numero_formatado = numero_formatado + str(item)
                return numero_formatado
            return numero
    
    
  • Método que muda encode de latin1 para utf-8
        security.declarePublic('setlatin2utf8')
        def setlatin2utf8(self, string):
            """
            Método que muda encode de latin1 para utf-8
            """
            return string.decode("latin1").encode("utf-8")
    
  • Método que retorna data em formatos variados
        security.declarePublic('getDateTimeFormat')
        def getDateTimeFormat(self, formato):
            """
            Este método retorna a data do sistema em formatos variados.
    
            Formatos:
    
            1: dd/mm/yyyy
            2: dd/mm/yy
            3: yyyy/mm/dd
            4: yy/mm/dd
            5: data para log
            6: ano corrente
            7: hash de data
            8: hash de data menor
            9: data modificada = 15/06/2006 16:00
            10: 2006/06/16 21:49:21.957
    
            Ex: getDateTimeFormat(1)
            retorna 12/01/2006
    
            """
    
            if formato == 1:
                data = self.ZopeTime().strftime("%d/%m/%Y")
            if formato == 2:
                data = self.ZopeTime().strftime("%d/%m/%y")
            if formato == 3:
                data = self.ZopeTime().strftime("%Y/%m/%d")
            if formato == 4:
                data = self.ZopeTime().strftime("%y/%m/%d")
            if formato == 5:
                data = self.ZopeTime()
            if formato == 6:
                data = self.ZopeTime().strftime("%Y")
            if formato == 7:
                data = self.ZopeTime().strftime("%d%m%Y%H%M")
            if formato == 8:
                segundos = self.ZopeTime().strftime("%s")
                data = str(self.ZopeTime().strftime("%d%m%M")) +segundos[-2:]
            if formato == 9:
                data = self.ZopeTime().strftime("%d/%m/%Y %H:%M")
            if formato == 10:
                data = str(self.ZopeTime())
                data = data.replace('GMT-3','')
                data = data[:23]
                data = data.strip()
    
            return data
    
  • Método que muda o formato de uma data
        security.declarePublic('setDateFormat')
        def setDateFormat(self, data, entrada, saida):
            """
            Este método muda o formato da data nos seguintes formatos:
    
            entrada/saida
            1: dd/mm/yyyy
            2: dd/mm/yy
            3: yyyy/mm/dd
            4: yy/mm/dd
    
            Parâmetros somente de Saída:
            5: yyyy
            6: mm
            7: dd
            8: 1 ou 2 (semestre)
    
            Ex: setDateFormat('2006/12/01',3,1)
            irá retornar: 01/12/2006
    
            Ex: setDateFormat('01/12/2006',1,3)
            irá retornar: 2006/12/01
    
            """
    
            ##TODO: Incluir validação de tamanho de campo :-(
    
            if entrada == 1:
                """Formato: dd/mm/yyyy"""
                ano = data[6:]
                mes = data[3:5]
                dia = data[:2]
    
            if entrada == 2:
                """Formato: dd/mm/yy"""
                ano = data[8:]
                mes = data[3:5]
                dia = data[:2]
    
            if entrada == 3:
                """Formato: yyyy/mm/dd"""
                ano = data[:4]
                mes = data[5:7]
                dia = data[8:]
    
            if entrada == 4:
                """Formato: yy/mm/dd"""
                ano = data[:2]
                mes = data[3:5]
                dia = data[6:]
    
            if saida == 1:
                """Formato: dd/mm/yyyy"""
                return dia + '/' + mes + '/' + ano
    
            if saida == 2:
                """Formato: dd/mm/yy"""
                return dia + '/' + mes + '/' + ano
    
            if saida == 3:
                """Formato: yyyy/mm/dd"""
                return ano + '/' + mes + '/' + dia
    
            if saida == 4:
                """Formato: yy/mm/dd"""
                return ano + '/' + mes + '/' + dia
    
            if saida == 5:
                """Formato: yyyy"""
                return ano
    
            if saida == 6:
                """Formato: mm"""
                return mes
    
            if saida == 7:
                """Formato: dd"""
                return dia
    
            if saida == 8:
                """Retorna semestre"""
                if mes <= 6:
                    return 1
                else:
                    return 2
    
            return string.decode("latin1").encode("utf-8")
    
  • Método que converte valores monetários em formatos variados
        security.declarePublic('setMoneyFormat')
        def setMoneyFormat(self, valor, formato):
            """
            Formatos:
    
            1: nnn.nnn.nnn,nn (Real) p/ nnnnnnnnn.nn (Dólar - gravar no banco ou float do python)
               ou
               nnnnnnnnn,nn (Real) p/ nnnnnnnnn.nn (Dólar - gravar no banco ou float do python)
    
            2: nnn.nnn.nnn,nn (Real com pontos) p/ nnnnnnnnn,nn (Real)
    
            3: nnn,nnn,nnn.nn (Dólar com vírgulas) p/ nnnnnnnnn.nn (Dólar)
    
            4: nnnnnnnnn.nn (Dólar - formato do banco) p/ nnn.nnn.nnn,nn (Real com pontos)
    
    
            Ex: setMoneyFormat('12.000.100,50',1)
            retornará: 12000100.50
    
            Ex: setMoneyFormat('12000100,50',1)
            retornará: 12000100.50
    
            Ex: setMoneyFormat('12.000.100,50',2)
            retornará: 12000100,50
    
            Ex: setMoneyFormat('12,000,100.50',3)
            retornará: 12000100.50
    
            Ex: setMoneyFormat('12000100.5',4)
            retornará: 12.000.100,50
    
            """
    
            if formato == 1:
                """Formato: nnn.nnn.nnn,nn (Real) p/ nnnnnnnnn.nn (Dólar - gravar no banco ou float do python)"""
                """ ou """
                """Formato: nnnnnnnnn,nn (Real) p/ nnnnnnnnn.nn (Dólar - gravar no banco ou float do python)"""
                valor = valor.replace('.','')
                valor = valor.replace(',','.')
                return valor
    
            if formato == 2:
                """Formato: nnn.nnn.nnn,nn (Real com pontos) p/ nnnnnnnnn,nn (Real)"""
                valor = valor.replace('.','')
                return valor
    
            if formato == 3:
                """Formato: nnn,nnn,nnn.nn (Dólar com vírgulas) p/ nnnnnnnnn.nn (Dólar)"""
                valor = valor.replace(',','')
                return valor
    
            if formato == 4:
                """Formato: nnnnnnnnn.nn (Dólar - formato do banco) p/ nnn.nnn.nnn,nn (Real com pontos)"""
                lista = []
                cont = 0
                tamanho = 0
                # Preenche com zero no final
                if len(valor.split('.')[1]) < 2:
                    valor = valor + '0'
                # Troca ponto por vírgula
                valor = valor.replace('.',',')
                # Transforma o valor em uma lista
                tamanho = len(valor)
                while cont < tamanho:
                    lista.insert(cont,valor[cont])
                    cont+=1
                # Coloca pontos na lista
                tamanho = tamanho - 3
                while tamanho > 0:
                    tamanho = tamanho - 3
                    if tamanho > 0:
                        lista.insert(tamanho,'.')
                # Transforma lista em string
                numero_formatado=''
                for item in lista:
                    numero_formatado = numero_formatado + str(item)
    
                return numero_formatado