Fazendo upload de arquivos para o Google Cloud Storage com Python (versão de 2020)

O processo é bem simples, porém é necessário antes configurar algumas coisas no Google Cloud e gerar as credenciais necessárias, para este processo pode seguir este tutorial. Lembre-se também de criar uma variável de ambiente com o nome GOOGLE_APPLICATION_CREDENTIALS apontando para o caminho do json, no Linux basta fazer: export GOOGLE_APPLICATION_CREDENTIALS=/caminho/para/arquivo.json Depois disso é possível executar o código abaixo (é claro, o bucket e o arquivo indicado deve existir): from datetime import timezone, datetime from typing import BinaryIO from google.cloud import storage def upload_file( data: BinaryIO, bucket: str, file_path: str, link_lifetime: int = 3600 ) -> str: """ Função que realiza o upload do arquivo """ storage_client = storage.Client() bucket = storage_client.bucket(bucket) blob = bucket.blob(file_path) blob.upload_from_file(data) # Faz o upload do arquivo binário e cria um objeto associado ao arquivo lifetime = int( datetime.now(tz=timezone.utc).timestamp() ) + link_lifetime # Gera um link para o arquivo com tempo de expiração url = blob.generate_signed_url(lifetime) return def main(): bucket = 'meu-pequeno-bucket' # Bucket name in GCS file_name = 'arquivo_legal.pdf' # Filename with open(file_name, 'rb') as f: url = upload_file( data=f, bucket=bucket, file_path=file_name, ) print(f'URL for file: {url}') if __name__ == "__main__": main()

10 de janeiro de 2020 · 1 min de leitura · Lucas Polo

Pense sobre o seu trabalho - O programador pragmático

Os dias não são fáceis, você acorda cedo e se desloca para o seu trabalho, então você faz algumas coisas e chega o fim do dia, você faz o caminho inverso para sua casa. No fim do mês você é pago por isso, o que é bom, e se for da área de TI, é “mais bom” do que 90% do restante do Brasil. Agora voltemos ao “faz algumas coisas” do paragrafo acima, que coisas são essas? Onde você aprendeu elas? Como lida com elas? Todas essas coisas são a sua profissão, mas o que é profissão? Será que é apenas o seu trabalho? Aquilo que você é pago para fazer? Vamos buscar a definição de profissão: ...

6 de janeiro de 2020 · 4 min de leitura · Lucas Polo

Drops: Quicksort em Python

from typing import List def quicksort(l: List): """ Recebe uma lista de elementos e devolve eles ordenados """ # Caso base! Nunca se esqueça disso em funções recursivas@ if not len(l): return l # Escolhemos um pivot, removemos ele da lista! # Reduzir a entrada também é essêncial! pivot = l.pop(0) # Separamos os elementos menores lower = [e for e in l if e <= pivot] # Separamos os maiores uppper = [e for e in l if e > pivot] # Os menores ficam na esquerda do pivo # Os maiores ficam na direita # Ai acontece a magia da recursão... # Ordedamos os menores e os maiores com a mesma função. return quicksort(lower) + [pivot] + quicksort(uppper) def main(): elems = [3,2,3,6,7,4,2,-1] print(quicksort(elems)) if __name__ == '__main__': main()

3 de janeiro de 2020 · 1 min de leitura · Lucas Polo

O caminho do programador (pragmático) - Um pouco sobre a primeira edição do Programador Pragmático

Disclaimer: Este post é o primeiro de uma série sobre o livro O Programador Pragmático, tratando sobre a primeira edição, caso deseje compra-lo dá uma conferida no último parágrafo (o que já irá acontecer se você ler o post inteiro). Durante nossas carreiras existem alguns momentos enigmáticos que nos fazem refletir sobre o que realmente queremos para o nosso futuro, sobre o profissional que queremos ser e como iremos nos portar pelos próximos anos. Tais momentos são motivados por diversos fatores, como um perrengue no trabalho, um professor que sabe te direcionar, a comunidade, ou como é no caso, um livro. ...

31 de dezembro de 2019 · 3 min de leitura · Lucas Polo

Utilizando Celery junto com o SQS

Uma das formas de lidar com processamento assíncrono no Python (e diversas outras linguagens) sem a necessidade de usar threads e afins é utilizando filas e tasks (que são aplicações que rodam conforme demanda, em um processamento similar a batches). Para isso o Python dispõe de uma biblioteca chamada Celery, que de uma maneira bem simples permite realizar o processamento assíncrono. Explicando de uma maneira simples, ao invocar uma função, ao invés de executar seu código, o Celery pega os parâmetros e mais algumas meta-informações da chamada e coloca numa fila, enquanto isso, em outro lugar (processo, computador ou continente), o Celery captura as mensagens desta fila e dispara as tasks. Aqui está uma implementação básica de uma task que soma dois valores: ...

17 de março de 2019 · 2 min de leitura · Lucas Polo

Usando terminal e programando em Python no Android

O terminal é uma das ferramentas mais poderosas que temos ao manipular informações no computador, desde o desenvolvimento de software até o hacking, passando por manipulação de texto, administração de sistemas e também para algumas brincadeiras. O acesso ao terminal é simples quando você está dentro de um Linux no computador (e até no Windows agora), porém nem sempre temos um notebook por perto, que por mais que seja portátil, não é simples de carregar por ai. Então, nas pesquisas pela internet, buscando uma alternativa para o tablet e smartphone, eu encontrei o Termux. ...

25 de fevereiro de 2019 · 2 min de leitura · Lucas Polo

Construindo um interpretador de Lisp em Python

Ultimamente tenho me interessado cada vez mais em como linguagens de programação funcionam e encontrei um material bem legal, simples e prático para ajudar nos estudos. É um artigo do Peter Norvig sobre como criar um interpretador de Scheme em Python, confira: http://norvig.com/lispy.html

22 de janeiro de 2019 · 1 min de leitura · Lucas Polo

Git Squash: Agregando seus commits em um só!

Durante o processo de desenvolvimento de software é comum que ao criarmos mais código, possamos enviar ele para o repositório de código, assim os colegas podem acompanhar o que está sendo alterado e também você criar um backup de suas informação. Mas surge uma dúvida na cabeça do programador: qual é o mínimo de código que deve criar antes de realizar um commit? Uma linha? Duas? Cem? Fica complexo definir isso, pois se criarmos muitos commits a nossa funcionalidade nova não fica atômica, mas se demorarmos para commitar e enviar para o repositório, corremos o risco de criar um commit grande demais para review, além é claro do risco de perder o código local. ...

11 de janeiro de 2019 · 3 min de leitura · Lucas Polo

Desempacotando parâmetros em Python

Uma das coisas mais interessantes do Python é como ele interage com as suas estruturas de dados padrão, sendo um dos exemplos mais interessantes o desempacotamento de listas e dicionários. A situação é simples, vamos supor que você tenha uma lista de parâmetros e deseja passar para uma função, podemos testar a seguinte situação: def funcao(parametro1, parametro2, parametro3): print(parametro1, parametro2, parametro3) parametros = [1,2,3] funcao(parametros) Mas temos o seguinte erro: ...

4 de janeiro de 2019 · 2 min de leitura · Lucas Polo

Um pouco sobre cálculo lambda

25 de outubro de 2018 · 1 min de leitura · Lucas Polo