text: from geopy.geocoders import Nominatim
  from Classe_pai import Acessar_bd
  
  class Cliente(Acessar_bd):
      def __init__(self,nome,cpf,email,senha):
          self.codigo = self.numero_serial('t_cliente',1)
          self.nome = nome
          self.cpf = cpf
          self.email = email
          self.senha = senha
          
      def retornar_cliente(self):
          lista = (int(self.codigo),str(self.nome),str(self.cpf),str(self.email),str(self.senha))
          return [lista]
  
      def chamar_db(self):
          cnxn,cursor = super().chamar_db()
          return cnxn,cursor 
  
      def acessar_dados(self):
          return super().acessar_dados('t_cliente')
  
      def atualizar_dado(self,coluna,codigo,mudanca,identificador):
          super().atualizar_dado('t_cliente',coluna,codigo,mudanca,identificador)
  
      def excluir_dado(self, codigo, identificador):
          super().excluir_dado('t_cliente',codigo, identificador)
  
      def numero_serial(self,  baseNumerica):
          return super().numero_serial('t_cliente', baseNumerica)
  
  
  class Endereco(Acessar_bd):
      def __init__(self,rua,cep,numero,complemento,uf,cidade):
          self.codigo = self.numero_serial()
          self.rua = rua
          self.cep = cep
          self.numero = numero
          self.complemento = complemento
          self.estado = uf
          self.cidade = cidade
  
      def retornarEnd(self,codigoCliente):
          lista = (int(self.chave),str(self.rua),str(self.cep),str(self.numero),str(self.complemento),str(codigoCliente),str(self.estado),str(self.cidade))
          return [lista]
  
      def chamar_db(self):
          cnxn,cursor = super().chamar_db()
          return cnxn,cursor 
  
      def acessar_dados(self):
          return super().acessar_dados('t_endereco')
  
      def atualizar_dado(self,coluna,codigo,mudanca,identificador):
          super().atualizar_dado('t_endereco',coluna,codigo,mudanca,identificador)
  
      def excluir_dado(self, codigo, identificador):
          super().excluir_dado('t_endereco',codigo, identificador)  
  
      def numero_serial(self):
          return super().numero_serial('t_endereco', 1)
  
      def buscarEndereco(self,endereco,complemento):
          enderecoCompleto = []
          geolocator = Nominatim(user_agent="wazeyes") 
          numero = endereco.split(',')
          resultado = str(geolocator.geocode(endereco)).split(",")
          if complemento.upper() == "N":
              complemento = False
          if resultado[0]!='None' and len(resultado) == 12:
              itens = [10,8,4]
              for dados in itens:
                  enderecoCompleto.append(resultado[dados])
          elif resultado[0]!='None' and len(resultado) == 11:
              itens = [9,7,3]
              for dados in itens:
                  enderecoCompleto.append(resultado[dados])
          enderecoCompleto.insert(1,numero[1])
          enderecoCompleto.insert(0,numero[0])
          enderecoCompleto.insert(3,complemento)
          return enderecoCompleto
          # Ordem dados: rua, cep, numero, complemento, estado, cidade
  
  
  class Funcionario(Acessar_bd):
      def __init__(self,nome,cargo,senha):
          self.codigo = self.numero_serial()
          self.nome = nome
          self.cargo = cargo
          self.senha = senha
      
      def retornarFuncionario(self):
          funcionario = (int(self.chave),str(self.nome),int(self.cargo),str(self.senha))
          return [funcionario]
  
      def acessar_dados(self):
          return super().acessar_dados('t_funcionario')
  
      def atualizar_dado(self,coluna,codigo,mudanca,identificador):
          super().atualizar_dado('t_funcionario',coluna,codigo,mudanca,identificador)
  
      def excluir_dado(self, codigo, identificador):
          super().excluir_dado('t_funcionario',codigo, identificador)
  
      def numero_serial(self):
          return super().numero_serial('t_funcionario', 1)
  
  
  class Admin(Funcionario):
      def __init__(self, nome, cargo, senha):
          super().__init__(nome, cargo, senha)
  
  
  class Pedido(Acessar_bd):
      def __init__(self):
          self.codigo = self.numero_serial()
          self.data = self.data_hoje()
  
      def data_hoje(self):
          return super().data_hoje()
  
      def retornarPedido(self,cliente,produto):
          pedido = (self.codigo,produto,cliente,self.data)
          return [pedido]
  
      def chamar_db(self):
          cnxn,cursor = super().chamar_db()
          return cnxn,cursor 
  
      def acessar_dados(self) :
          return super().acessar_dados('t_pedido')
  
      def atualizar_dado(self,coluna,codigo,mudanca,identificador):
          super().atualizar_dado('t_pedido',coluna,codigo,mudanca,identificador)
  
      def excluir_dado(self, codigo, identificador):
          super().excluir_dado('t_pedido',codigo, identificador)
  
      def numero_serial(self):
          return super().numero_serial('t_pedido', 1)
  
  
  class Produto(Acessar_bd):
      def __init__(self,produto,valor,tipo,quantidade,data):
          self.codigo = self.numero_serial()
          self.produto = produto
          self.valor = float(valor)
          self.tipo = tipo
          self.quantidade = quantidade
          self.data = data
  
      def retornarProduto(self):
          produto = (int(self.codigo),str(self.produto),float(self.valor),str(self.tipo),int(self.quantidade),self.data)
          return [produto]
  
      def chamar_db(self):
          cnxn,cursor = super().chamar_db()
          return cnxn,cursor 
  
      def acessar_dados(self):
          return super().acessar_dados('t_produto')
  
      def atualizar_dado(self, coluna,codigo,mudanca,identificador):
          super().atualizar_dado('t_produto',coluna,codigo,mudanca,identificador)
  
      def excluir_dado(self,codigo, identificador):
          super().excluir_dado('t_produto',codigo, identificador)
  
      def numero_serial(self):
          return super().numero_serial('t_produto', 1)
  
  
  class Telefone(Acessar_bd):
      def __init__(self,ddd,numero):
          validacao = True
          while validacao:
              if len(ddd) == 2 and len(numero) == 9:
                  self.codigo = self.numero_serial()
                  self.ddd = ddd
                  self.numero = numero
                  break
              else:
                  print('ERRO\nTente digitar novamente...')
      
      def retornarTel(self,codigoCliente):
          telefone = (self.chave,self.ddd,self.numero,codigoCliente)
          return [telefone]
  
      def chamar_db(self):
          cnxn,cursor = super().chamar_db()
          return cnxn,cursor 
  
      def acessar_dados(self):
          return super().acessar_dados('t_telefone')
          
      def atualizar_dado(self,coluna,codigo,mudanca,identificador):
          super().atualizar_dado('t_telefone',coluna,codigo,mudanca,identificador)
  
      def excluir_dado(self,codigo, identificador):
          super().excluir_dado('t_telefone',codigo, identificador)
  
      def numero_serial(self):
          return super().numero_serial('t_telefone', 1)