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)
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)
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 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
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 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')
#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:
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 }
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}