예제 #1
0
 def test_email_validate(self):
     validator = Validators(self.df)
     result = validator._email_validate(self.df.loc[0])
     if result:
         self.assertIs(type(result), dict)
     else:
         self.assertIsNone(result)
예제 #2
0
 def test_validate_errors(self):
     validator = Validators(self.df)
     result = validator._validate_errors(self.df.loc[2])
     if result:
         self.assertIs(type(result), list)
     else:
         valid = validator_validate(self.df.loc[2])
         self.assertTrue(valid)
예제 #3
0
    def __init__(self,
                 xml_node="carrinho",
                 namespace="http://connect.akatus.com/"):
        """Metodo construtor que recebe o nome do node pai do XML de envio
        e o namespace para a validacao no XML Schema"""

        self.validators = Validators()

        if xml_node:
            self.xml_node = etree.Element(xml_node, xmlns=namespace)
예제 #4
0
def file_saver(file):
    '''
    Saves uploaded file as a json file, in a SQL database, and creates a
    pandas dataframe to run validation test
  '''
    # check filename uniqueness
    filename = file_exists(file.filename)

    # saves original uploaded file to files directory
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

    #creates pandas dataframe from the csv file
    df = pd.read_csv('files/' + filename, sep='|')

    # run validation rules
    validate = Validators(df=df)
    data = validate.clean_orders()

    #create a dictionary from pandas dataframe
    d = [
        dict([(colname, row[i]) for i, colname in enumerate(data.columns)])
        for row in data.values
    ]

    # seeds database with order information
    Orders.query.delete()
    for order_row in d:
        order_id = order_row['id']
        name = order_row['name']
        state = order_row['state']
        email = order_row['email']
        zipcode = order_row['zipcode']
        birthday = order_row['birthday']
        valid = str(order_row['valid'])
        errors = str(order_row['errors'])
        save_order = Orders(order_id=order_id,
                            name=name,
                            state=state,
                            email=email,
                            zipcode=zipcode,
                            birthday=birthday,
                            valid=valid,
                            errors=errors)
        db.session.add(save_order)
    db.session.commit()

    # create json file
    with open('files/' + filename.rsplit('.', 1)[0] + '.json', 'w') as outfile:
        json.dump(d, outfile)
    return outfile
예제 #5
0
 def __init__(self, xml_node = "carrinho", namespace = "http://connect.akatus.com/"):
     """Metodo construtor que recebe o nome do node pai do XML de envio
     e o namespace para a validacao no XML Schema"""
     
     self.validators = Validators()
     
     if xml_node:
         self.xml_node = etree.Element(xml_node, xmlns=namespace)
예제 #6
0
def mongo_write():
    
    data = request.json
    
    if data == None or data == {} or 'document' not in data:
        return Response(response=json.dumps({'Error': 'Invalid data request format'}),
                        status=400,
                        mimetype='application/json')
    
    if 'email' in data['document'].keys():
        if Validators.validateEmail(data['document']['email']):
            pass
        else:
            return Response(response=json.dumps({'Error': 'Invalid data request format'}),
                            status=400,
                            mimetype='application/json')
    
    obj1 = MongoAPI(data)
    response = obj1.write()
    return Response(response=json.dumps(response),
                    status=200,
                    mimetype='application/json')        
예제 #7
0
            #print('Genesis',json.dumps(near_blockchain.genesis, indent=4, sort_keys=True))
            print('Epoch t     seat price', near_blockchain.get_seat_price(epoch='current'))
            print('Epoch t + 1 seat price', near_blockchain.get_seat_price(epoch='next'))
            print('Epoch t + 2 seat price', near_blockchain.get_seat_price(epoch='proposals'))
            print('Percentage current epoch ', epoch_percentage)

        # Make sure bot runs only once per epoch to avoid spamming       
        if epoch_percentage > 95 and bot_has_been_executed:
            bot_has_been_executed = False
        elif epoch_percentage <= 95:
            bot_has_been_executed = True

        # if in debug mode always run
        if not bot_has_been_executed:
            # create master account
            validators_node = Validators(CONTRACT_NAME, PATH_TO_JSON_PRIVATE_KEY_FILE_MASTER_ACCOUNT, ENDPOINT_URL)
            estimated_seat_price_nextnext_epoch = near_blockchain.get_seat_price(epoch='proposals')
            amount_master_account_unlocked = int(validators_node.get_master_account().state['amount'])

            # ping contract before proceding
            # near call my_validator ping '{}' --accountId user1
            
            validators_node.get_master_account().function_call(
                contract_id = CONTRACT_NAME, 
                method_name = 'ping', 
                args = None, 
                gas = DEFAULT_ATTACHED_GAS)
            

            # if master account has more that 1 NEAR deposit it to contract
            if amount_master_account_unlocked > YOCTO_CONSTANT and DEPOSIT_ALL_TOKENS_FROM_MASTERACCOUNT_INTO_CONTRACT:
예제 #8
0
class Akatus():
    """Classe que trata toda a coleta de dados e envio para a API"""
    def __init__(self,
                 xml_node="carrinho",
                 namespace="http://connect.akatus.com/"):
        """Metodo construtor que recebe o nome do node pai do XML de envio
        e o namespace para a validacao no XML Schema"""

        self.validators = Validators()

        if xml_node:
            self.xml_node = etree.Element(xml_node, xmlns=namespace)

    def _monta_xml(self, parent, unique=False, **kwargs):
        """Metodo interno que monta o XML utilizando os parametros passados
        por outros metodos."""

        if isinstance(parent, etree._Element):
            node_parent = parent
        else:
            node_parent = etree.Element(parent)

        for k, v in kwargs.items():
            if unique and node_parent.find(k) is not None:
                node = node_parent.find(k)
            else:
                node = etree.SubElement(node_parent, k)

            if isinstance(v, dict):
                self._monta_xml(node, **v)
            else:
                node.text = v

        return node_parent

    @check_parameters
    def set_ambiente(self, ambiente):
        """Metodo que define qual o ambiente sera usado, as opcoes
        sao: 'sandbox' ou 'producao' """

        ambientes = dict(sandbox="dev", producao="www")

        try:
            self.url = "https://%s.akatus.com/api/v1/carrinho.xml" % ambientes[
                ambiente]
        except KeyError:
            raise ValueError("O ambiente escolhido é inválido")

    @check_parameters
    def set_recebedor(self, token, email):
        """Metodo que insere no XML as informacoes do recebedor que constam na
        conta cadastrada na Akatus"""

        self.validators.email(email)

        self._monta_xml(self.xml_node,
                        recebedor=dict(api_key=token, email=email))

        return self

    @check_parameters
    def set_pagador(self, nome, email, tipo_tel, num_tel):
        """Metodo que insere no XML as informacoes obrigatorias da pessoa que efetuara o pagamento"""

        self.validators.email(email)

        self._monta_xml(
            self.xml_node,
            pagador=dict(
                nome=nome,
                email=email,
                telefones=dict(telefone=dict(tipo=tipo_tel, numero=num_tel))))

        return self

    @check_parameters
    def set_produto(self, codigo, descricao, quantidade, preco, peso, frete,
                    desconto):
        """Metodo que insere no XML as informacoes do produto comprado. A cada nova iteracao
        deste metodo, um produto novo é adicionado ao XML"""

        self._monta_xml(self.xml_node,
                        unique=True,
                        produtos=dict(produto=dict(codigo=codigo,
                                                   descricao=descricao,
                                                   quantidade=quantidade,
                                                   preco=preco,
                                                   peso=peso,
                                                   frete=frete,
                                                   desconto=desconto)))

        return self

    @check_parameters
    def set_transacao(self, desconto_total, peso_total, frete_total, moeda,
                      referencia, meio_de_pagamento):
        """Metodo que insere no XML as informacoes a respeito da transacao"""

        self._monta_xml(self.xml_node,
                        transacao=dict(desconto_total=desconto_total,
                                       peso_total=peso_total,
                                       frete_total=frete_total,
                                       moeda=moeda,
                                       referencia=referencia,
                                       meio_de_pagamento=meio_de_pagamento))

        return self

    def _get_xml(self):
        """Metodo interno que retorna o objeto etree em formato string"""

        return etree.tostring(self.xml_node)

    def envia(self):
        """Metodo que faz a validacao do XML usando um XML Schema e envia os dados para 
        o sistema Akatus."""

        xmlbase = urlopen(
            "https://raw.github.com/Akatus/AkatusXMLSchema/master/cart.xsd")

        xmlparser = etree.parse(xmlbase)
        xmlschema = etree.XMLSchema(xmlparser)

        xml_enviado = etree.fromstring(self._get_xml())

        if not xmlschema.validate(xml_enviado):
            raise ValueError(xmlschema.error_log)

        resposta = RespostaAkatus()

        curl = pycurl.Curl()
        curl.setopt(pycurl.URL, self.url)
        curl.setopt(pycurl.USERAGENT, "Mozilla/4.0")
        curl.setopt(pycurl.POST, True)
        curl.setopt(pycurl.SSL_VERIFYPEER, False)
        curl.setopt(pycurl.POSTFIELDS, self._get_xml())
        curl.setopt(pycurl.WRITEFUNCTION, resposta._callback)
        curl.perform()
        curl.close

        self.retorno = resposta.conteudo
        return self

    def get_resposta(self):
        """Metodo que retorna a resposta da API Akatus depois do envio dos dados."""

        resposta = etree.XML(self.retorno)

        if resposta[0].tag == 'status':
            return {
                resposta[0].tag: resposta[0].text,
                resposta[1].tag: resposta[1].text
            }

        return {
            resposta[0].tag: resposta[0].text,
            resposta[1].tag: resposta[1].text,
            resposta[2].tag: resposta[2].text,
            resposta[3].tag: resposta[3].text
        }
예제 #9
0
class Akatus():
    """Classe que trata toda a coleta de dados e envio para a API"""
    
    def __init__(self, xml_node = "carrinho", namespace = "http://connect.akatus.com/"):
        """Metodo construtor que recebe o nome do node pai do XML de envio
        e o namespace para a validacao no XML Schema"""
        
        self.validators = Validators()
        
        if xml_node:
            self.xml_node = etree.Element(xml_node, xmlns=namespace)
        
    def _monta_xml(self, parent, unique=False, **kwargs):
        """Metodo interno que monta o XML utilizando os parametros passados
        por outros metodos."""
        
        if isinstance(parent, etree._Element):
            node_parent = parent
        else:
            node_parent = etree.Element(parent)
        
        for k,v in kwargs.items():
            if unique and node_parent.find(k) is not None:
                node = node_parent.find(k) 
            else:
                node = etree.SubElement(node_parent, k)
               
            if isinstance(v, dict):
                self._monta_xml(node, **v)
            else:
                node.text = v
                
        return node_parent
    
    
    @check_parameters
    def set_ambiente(self,ambiente):
        """Metodo que define qual o ambiente sera usado, as opcoes
        sao: 'sandbox' ou 'producao' """
        
        ambientes = dict(sandbox="dev", producao="www")
        
        try:
            self.url = "https://%s.akatus.com/api/v1/carrinho.xml" %ambientes[ambiente]
        except KeyError:
            raise ValueError("O ambiente escolhido é inválido")
        
            
    @check_parameters
    def set_recebedor(self,token, email):
        """Metodo que insere no XML as informacoes do recebedor que constam na
        conta cadastrada na Akatus"""
        
        self.validators.email(email)
        
        self._monta_xml(self.xml_node, recebedor=dict(api_key=token,email=email))

        return self
    
    
    @check_parameters
    def set_pagador(self,nome, email, tipo_tel, num_tel):
        """Metodo que insere no XML as informacoes obrigatorias da pessoa que efetuara o pagamento"""
        
        self.validators.email(email)
        
        self._monta_xml(self.xml_node, pagador=dict(nome=nome, email=email, telefones=dict(
                                                                                          telefone=dict(
                                                                                                        tipo=tipo_tel,
                                                                                                        numero=num_tel))))
        
        return self
    
    
    @check_parameters
    def set_produto(self,codigo, descricao, quantidade, preco, peso, frete, desconto):
        """Metodo que insere no XML as informacoes do produto comprado. A cada nova iteracao
        deste metodo, um produto novo é adicionado ao XML"""
        
        self._monta_xml(self.xml_node, unique=True, produtos=dict(produto=dict(codigo=codigo,
                                                                             descricao=descricao,
                                                                             quantidade=quantidade,
                                                                             preco=preco,
                                                                             peso=peso,
                                                                             frete=frete,
                                                                             desconto=desconto)))
                    
        return self
    
    
    @check_parameters
    def set_transacao(self, desconto_total, peso_total, frete_total, moeda, referencia, meio_de_pagamento):
        """Metodo que insere no XML as informacoes a respeito da transacao"""
        
        self._monta_xml(self.xml_node, transacao=dict(desconto_total=desconto_total,
                                                     peso_total=peso_total,
                                                     frete_total=frete_total,
                                                     moeda=moeda,
                                                     referencia=referencia,
                                                     meio_de_pagamento=meio_de_pagamento))
        
        return self
    
    
    def _get_xml(self):
        """Metodo interno que retorna o objeto etree em formato string"""
        
        return etree.tostring(self.xml_node)
    
    
    def envia(self):
        """Metodo que faz a validacao do XML usando um XML Schema e envia os dados para 
        o sistema Akatus."""
        
        xmlbase = urlopen("https://raw.github.com/Akatus/AkatusXMLSchema/master/cart.xsd")
        
        xmlparser   = etree.parse(xmlbase)
        xmlschema   = etree.XMLSchema(xmlparser)
        
        xml_enviado = etree.fromstring(self._get_xml())
        
        if not xmlschema.validate(xml_enviado):
            raise ValueError(xmlschema.error_log)
        
        resposta = RespostaAkatus()
        
        curl = pycurl.Curl()
        curl.setopt(pycurl.URL, self.url)
        curl.setopt(pycurl.USERAGENT, "Mozilla/4.0")
        curl.setopt(pycurl.POST, True)
        curl.setopt(pycurl.SSL_VERIFYPEER, False)
        curl.setopt(pycurl.POSTFIELDS, self._get_xml())
        curl.setopt(pycurl.WRITEFUNCTION, resposta._callback)
        curl.perform()
        curl.close
        
        self.retorno = resposta.conteudo
        return self
    
    def get_resposta(self):
        """Metodo que retorna a resposta da API Akatus depois do envio dos dados."""
        
        resposta = etree.XML(self.retorno)
        
        if resposta[0].tag == 'status':
            return {resposta[0].tag:resposta[0].text, resposta[1].tag:resposta[1].text}
        
        return {resposta[0].tag:resposta[0].text,resposta[1].tag:resposta[1].text, resposta[2].tag:resposta[2].text,resposta[3].tag:resposta[3].text}