diff --git a/.travis.yml b/.travis.yml index 6694375b7..829dfd719 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,10 @@ language: python python: - - 3.7 -install: - - pip install -q pipenv codecov - - pipenv sync --dev -script: + - 3.10 + - 2.7 + install: + - pip install -q -r requirements-dev.txt codecov - flake8 - - pytest libpythonpro --cov=libpythonpro + - pytest Libpythonpro --cov=libpythonpro-1 after_success: - codecov \ No newline at end of file diff --git a/Libpythonpro/__init__.py b/Libpythonpro/__init__.py new file mode 100644 index 000000000..edcfd0dd7 --- /dev/null +++ b/Libpythonpro/__init__.py @@ -0,0 +1 @@ +__version__ = '0.2' \ No newline at end of file diff --git a/libpythonpro/github_api.py b/Libpythonpro/github_api.py similarity index 82% rename from libpythonpro/github_api.py rename to Libpythonpro/github_api.py index 8b0fbafb9..f9926480a 100644 --- a/libpythonpro/github_api.py +++ b/Libpythonpro/github_api.py @@ -4,10 +4,11 @@ def buscar_avatar(usuario): """ Busca o avatar de um usuário no Github - - :param usuario: str com o nome de usuário no github + :Param usuário: str com o nome usuário no github :return: str com o link do avatar """ url = f'https://api.github.com/users/{usuario}' resp = requests.get(url) return resp.json()['avatar_url'] + + diff --git a/libpythonpro/spam/__init__.py b/Libpythonpro/spam/__init__.py similarity index 100% rename from libpythonpro/spam/__init__.py rename to Libpythonpro/spam/__init__.py diff --git a/libpythonpro/spam/db.py b/Libpythonpro/spam/db.py similarity index 80% rename from libpythonpro/spam/db.py rename to Libpythonpro/spam/db.py index ce90ca60b..3a0f55656 100644 --- a/libpythonpro/spam/db.py +++ b/Libpythonpro/spam/db.py @@ -1,6 +1,3 @@ -from time import sleep - - class Sessao: contador = 0 usuarios = [] @@ -14,16 +11,13 @@ def listar(self): return self.usuarios def roll_back(self): - self.usuarios.clear() + pass def fechar(self): pass class Conexao: - def __init__(self): - sleep(1) - def gerar_sessao(self): return Sessao() diff --git a/libpythonpro/spam/main.py b/Libpythonpro/spam/main.py similarity index 97% rename from libpythonpro/spam/main.py rename to Libpythonpro/spam/main.py index f81821ae4..3d45e0b07 100644 --- a/libpythonpro/spam/main.py +++ b/Libpythonpro/spam/main.py @@ -1,7 +1,7 @@ class EnviadorDeSpam: def __init__(self, sessao, enviador): - self.sessao = sessao self.enviador = enviador + self.sessao = sessao def enviar_emails(self, remetente, assunto, corpo): for usuario in self.sessao.listar(): @@ -11,3 +11,5 @@ def enviar_emails(self, remetente, assunto, corpo): assunto, corpo ) + + diff --git a/libpythonpro/spam/modelos.py b/Libpythonpro/spam/modelos.py similarity index 100% rename from libpythonpro/spam/modelos.py rename to Libpythonpro/spam/modelos.py diff --git a/libpythonpro/tests/__init__.py b/Libpythonpro/spam/test_spam/__init__.py similarity index 100% rename from libpythonpro/tests/__init__.py rename to Libpythonpro/spam/test_spam/__init__.py diff --git a/Libpythonpro/spam/test_spam/enviador_de_email.py b/Libpythonpro/spam/test_spam/enviador_de_email.py new file mode 100644 index 000000000..b500c4f27 --- /dev/null +++ b/Libpythonpro/spam/test_spam/enviador_de_email.py @@ -0,0 +1,9 @@ +class Enviador: + def enviar(self, remetente, destinatário, assunto, corpo): + if '@' not in remetente: + raise EmailInvalido(f'Email de Remetente Inválido:{remetente}') + return remetente + + +class EmailInvalido(Exception): + pass diff --git a/libpythonpro/tests/test_spam/__init__.py b/Libpythonpro/tests/__init__.py similarity index 100% rename from libpythonpro/tests/test_spam/__init__.py rename to Libpythonpro/tests/__init__.py diff --git a/Libpythonpro/tests/test_exemplo.py b/Libpythonpro/tests/test_exemplo.py new file mode 100644 index 000000000..470a3111a --- /dev/null +++ b/Libpythonpro/tests/test_exemplo.py @@ -0,0 +1,2 @@ +def test_int(): + assert 1 == 1 \ No newline at end of file diff --git a/Libpythonpro/tests/test_spam/__init__.py b/Libpythonpro/tests/test_spam/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/Libpythonpro/tests/test_spam/conftest.py b/Libpythonpro/tests/test_spam/conftest.py new file mode 100644 index 000000000..494d6ed25 --- /dev/null +++ b/Libpythonpro/tests/test_spam/conftest.py @@ -0,0 +1,60 @@ +from time import sleep + +import pytest + + +class Sessao: + contador = 0 + usuarios = [] + + def salvar(self, usuario): + Sessao.contador += 1 + usuario.id = Sessao.contador + self.usuarios.append(usuario) + + def listar(self): + return self.usuarios + + def roll_back(self): + self.usuarios.clear() + + def fechar(self): + pass + + +class Conexao: + + def __init__(self): + sleep(1) + + def gerar_sessao(self): + return Sessao() + + def fechar(self): + pass + + +@pytest.fixture(scope='session') +def conexao(): + # Setup + conexao_obj = Conexao() + yield conexao_obj + # Tear Down + conexao_obj.fechar() + + +@pytest.fixture +def sessao(conexao): + sessao_obj = conexao.gerar_sessao() + yield sessao_obj + sessao_obj.roll_back() + sessao_obj.fechar() + + + + + + + + + diff --git a/libpythonpro/tests/test_spam/test_enviador_de_email.py b/Libpythonpro/tests/test_spam/test_enviador_de_email.py similarity index 56% rename from libpythonpro/tests/test_spam/test_enviador_de_email.py rename to Libpythonpro/tests/test_spam/test_enviador_de_email.py index c72a0bbe9..7567eff71 100644 --- a/libpythonpro/tests/test_spam/test_enviador_de_email.py +++ b/Libpythonpro/tests/test_spam/test_enviador_de_email.py @@ -1,31 +1,30 @@ import pytest -from libpythonpro.spam.enviador_de_email import EmailInvalido, Enviador +from Libpythonpro.spam.test_spam.enviador_de_email import Enviador, EmailInvalido def test_criar_enviador_de_email(): - enviador = Enviador() + enviador= Enviador() assert enviador is not None - @pytest.mark.parametrize( - 'remetente', - ['foo@bar.com.br', 'renzo@python.pro.br'] + 'destinatario', + ['foo@bar.com.br','renzo@python.pro.br'] ) -def test_remetente(remetente): +def test_remetente(destinatario): enviador = Enviador() + destinatario resultado = enviador.enviar( - remetente, + destinatario, 'luciano@python.pro.br', 'Cursos Python Pro', - 'Primeira turma Guido Von Rossum aberta.' - ) - assert remetente in resultado + 'Primeira Turma Guido Von Rossum aberta.') + assert destinatario in resultado @pytest.mark.parametrize( 'remetente', - ['', 'renzo'] + ['','renzo'] ) def test_remetente_invalido(remetente): enviador = Enviador() @@ -34,5 +33,6 @@ def test_remetente_invalido(remetente): remetente, 'luciano@python.pro.br', 'Cursos Python Pro', - 'Primeira turma Guido Von Rossum aberta.' + 'Primeira Turma Guido Von Rossum aberta.' ) + diff --git a/Libpythonpro/tests/test_spam/test_envio_para_base_de_usuarios.py b/Libpythonpro/tests/test_spam/test_envio_para_base_de_usuarios.py new file mode 100644 index 000000000..9d232dbbf --- /dev/null +++ b/Libpythonpro/tests/test_spam/test_envio_para_base_de_usuarios.py @@ -0,0 +1,56 @@ +from unittest.mock import Mock + +import pytest + +from Libpythonpro.spam.main import EnviadorDeSpam +from Libpythonpro.spam.modelos import Usuario +from Libpythonpro.spam.test_spam.enviador_de_email import Enviador + +def test_envio_de_spam(sessao): + enviador_de_spam= EnviadorDeSpam(sessao, Enviador()) + + +@pytest.mark.parametrize( + 'usuarios', + [ + [ + Usuario(nome='Carlos', email='carhb@outlook.com'), + Usuario(nome='Givani', email='givanifcf@hotmail.com') + ], + [ + Usuario(nome='Carlos', email='carhb@outlook.com') + ] + ] +) +def test_qtd_de_spam(sessao, usuarios): + for usuario in usuarios: + sessao.salvar(usuario) + enviador = Mock() + enviador_de_spam= EnviadorDeSpam(sessao, enviador) + enviador_de_spam.enviar_emails( + 'carhb@outlook.com', + 'Curso Pythonpro', + 'Confira os módulos fantásticos' + ) + assert len(usuarios) == enviador.enviar.call_count + + +def test_parametros_de_spam(sessao): + usuario = Usuario(nome='Carlos', email='carhb@outlook.com') + sessao.salvar(usuario) + enviador = Mock() + enviador_de_spam= EnviadorDeSpam(sessao, enviador) + enviador_de_spam.enviar_emails( + 'givanifcf@hotmail.com', + 'Curso Pythonpro', + 'Confira os módulos fantásticos' + ) + enviador.enviar.assert_called_once_with( + 'givanifcf@hotmail.com', + 'carhb@outlook.com', + 'Curso Pythonpro', + 'Confira os módulos fantásticos' + ) + + + diff --git a/Libpythonpro/tests/test_spam/test_github_api.py b/Libpythonpro/tests/test_spam/test_github_api.py new file mode 100644 index 000000000..79839811c --- /dev/null +++ b/Libpythonpro/tests/test_spam/test_github_api.py @@ -0,0 +1,25 @@ +from unittest.mock import Mock + +import pytest + +from Libpythonpro import github_api + +@pytest.fixture +def avatar_url(mocker): + resp_mock = Mock() + url = 'https://avatars.githubusercontent.com/u/107650943?v=4' + resp_mock.json.return_value = { + 'login': 'Carloshbfreire', 'id': 107650943, + 'avatar_url': url, + } + get_mock = mocker.patch('Libpythonpro.github_api.requests.get') + get_mock.return_value = resp_mock + return url + +def test_buscar_avatar(avatar_url): + url = github_api.buscar_avatar('Carloshbfreire') + assert avatar_url == url + +def test_buscar_avatar_integraçao(): + url = github_api.buscar_avatar('Carloshbfreire') + assert 'https://avatars.githubusercontent.com/u/107650943?v=4' == url diff --git a/Libpythonpro/tests/test_spam/testes_usuarios.py b/Libpythonpro/tests/test_spam/testes_usuarios.py new file mode 100644 index 000000000..f13572d73 --- /dev/null +++ b/Libpythonpro/tests/test_spam/testes_usuarios.py @@ -0,0 +1,20 @@ +from Libpythonpro.spam.modelos import Usuario + + +def test_salvar_usuario(sessao): + usuario= Usuario(nome='Carlos', email= 'carhb@outlook.com' ) + sessao.salvar(usuario) + assert isinstance(usuario.id, int) + + +def test_listar_usuario(sessao): + usuarios = [ + Usuario(nome='Carlos', email='carhb@outlook.com'), + Usuario(nome='Givani', email='carhb@outlook.com') + ] + for usuario in usuarios: + sessao.salvar(usuario) + assert usuarios == sessao.listar() + + + diff --git a/README.md b/README.md index 676c14d7f..3deff37c6 100644 --- a/README.md +++ b/README.md @@ -6,24 +6,27 @@ Nesse curso é ensinado como contribuir com projetos de código aberto Link para o curso [Python Pro](https://www.python.pro.br/) -[![Build Status](https://travis-ci.org/pythonprobr/libpythonpro.svg?branch=master)](https://travis-ci.org/pythonprobr/libpythonpro) +[![Build Status](https://app.travis-ci.com/Carloshbfreire/libpythonpro-1.svg?branch=master)](https://app.travis-ci.com/Carloshbfreire/libpythonpro-1) + [![Updates](https://pyup.io/repos/github/pythonprobr/libpythonpro/shield.svg)](https://pyup.io/repos/github/pythonprobr/libpythonpro/) [![Python 3](https://pyup.io/repos/github/pythonprobr/libpythonpro/python-3-shield.svg)](https://pyup.io/repos/github/pythonprobr/libpythonpro/) [![codecov](https://codecov.io/gh/pythonprobr/libpythonpro/branch/master/graph/badge.svg)](https://codecov.io/gh/pythonprobr/libpythonpro) -Suportada versão 3 de Python + +Suportada versão 3 de Python Carlinhos Para instalar: ```console -pip install pipenv -pipenv install --dev +python3 -m venv .venv +source .venv/bin/activate +pip install -r requirements-dev.txt ``` Para conferir qualidade de código: ```console -pipenv run flake8 +flake8 ``` Tópicos a serem abordados: @@ -32,4 +35,7 @@ Tópicos a serem abordados: 3. Pip 4. Mock 5. Pipenv - \ No newline at end of file + +Revisando aula sobre Fork. + +Link do Curso [Python pro](https://pythonpro.com.br/) \ No newline at end of file diff --git a/libpythonpro/__init__.py b/libpythonpro/__init__.py deleted file mode 100644 index b650ceb08..000000000 --- a/libpythonpro/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = '0.2' diff --git a/libpythonpro/spam/enviador_de_email.py b/libpythonpro/spam/enviador_de_email.py deleted file mode 100644 index fa0952223..000000000 --- a/libpythonpro/spam/enviador_de_email.py +++ /dev/null @@ -1,9 +0,0 @@ -class Enviador: - def enviar(self, remetente, destinatario, assunto, corpo): - if '@' not in remetente: - raise EmailInvalido(f'Email de remetente inválido: {remetente}') - return remetente - - -class EmailInvalido(Exception): - pass diff --git a/libpythonpro/tests/test_exemplo.py b/libpythonpro/tests/test_exemplo.py deleted file mode 100644 index 78cd50236..000000000 --- a/libpythonpro/tests/test_exemplo.py +++ /dev/null @@ -1,2 +0,0 @@ -def test_int(): - assert 1 == 1 diff --git a/libpythonpro/tests/test_spam/conftest.py b/libpythonpro/tests/test_spam/conftest.py deleted file mode 100644 index a16f3970a..000000000 --- a/libpythonpro/tests/test_spam/conftest.py +++ /dev/null @@ -1,20 +0,0 @@ -import pytest - -from libpythonpro.spam.db import Conexao - - -@pytest.fixture(scope='session') -def conexao(): - # Setup - conexao_obj = Conexao() - yield conexao_obj - # Tear Down - conexao_obj.fechar() - - -@pytest.fixture -def sessao(conexao): - sessao_obj = conexao.gerar_sessao() - yield sessao_obj - sessao_obj.roll_back() - sessao_obj.fechar() diff --git a/libpythonpro/tests/test_spam/test_envio_para_base_de_usuarios.py b/libpythonpro/tests/test_spam/test_envio_para_base_de_usuarios.py deleted file mode 100644 index d2db43893..000000000 --- a/libpythonpro/tests/test_spam/test_envio_para_base_de_usuarios.py +++ /dev/null @@ -1,49 +0,0 @@ -from unittest.mock import Mock - -import pytest - -from libpythonpro.spam.main import EnviadorDeSpam -from libpythonpro.spam.modelos import Usuario - - -@pytest.mark.parametrize( - 'usuarios', - [ - [ - Usuario(nome='Renzo', email='renzo@python.pro.br'), - Usuario(nome='Luciano', email='renzo@python.pro.br') - ], - [ - Usuario(nome='Renzo', email='renzo@python.pro.br') - ] - ] -) -def test_qde_de_spam(sessao, usuarios): - for usuario in usuarios: - sessao.salvar(usuario) - enviador = Mock() - enviador_de_spam = EnviadorDeSpam(sessao, enviador) - enviador_de_spam.enviar_emails( - 'renzo@python.pro.br', - 'Curso Python Pro', - 'Confira os módulos fantásticos' - ) - assert len(usuarios) == enviador.enviar.call_count - - -def test_parametros_de_spam(sessao): - usuario = Usuario(nome='Renzo', email='renzo@python.pro.br') - sessao.salvar(usuario) - enviador = Mock() - enviador_de_spam = EnviadorDeSpam(sessao, enviador) - enviador_de_spam.enviar_emails( - 'luciano@python.pro.br', - 'Curso Python Pro', - 'Confira os módulos fantásticos' - ) - enviador.enviar.assert_called_once_with( - 'luciano@python.pro.br', - 'renzo@python.pro.br', - 'Curso Python Pro', - 'Confira os módulos fantásticos' - ) diff --git a/libpythonpro/tests/test_spam/test_github_api.py b/libpythonpro/tests/test_spam/test_github_api.py deleted file mode 100644 index 21ce9c5d0..000000000 --- a/libpythonpro/tests/test_spam/test_github_api.py +++ /dev/null @@ -1,28 +0,0 @@ -from unittest.mock import Mock - -import pytest - -from libpythonpro import github_api - - -@pytest.fixture -def avatar_url(mocker): - resp_mock = Mock() - url = 'https://avatars3.githubusercontent.com/u/402714?v=4' - resp_mock.json.return_value = { - 'login': 'renzo', 'id': 402714, - 'avatar_url': url, - } - get_mock = mocker.patch('libpythonpro.github_api.requests.get') - get_mock.return_value = resp_mock - return url - - -def test_buscar_avatar(avatar_url): - url = github_api.buscar_avatar('renzo') - assert avatar_url == url - - -def test_buscar_avatar_integracao(): - url = github_api.buscar_avatar('renzon') - assert 'https://avatars3.githubusercontent.com/u/3457115?v=4' == url diff --git a/libpythonpro/tests/test_spam/test_usuarios.py b/libpythonpro/tests/test_spam/test_usuarios.py deleted file mode 100644 index 09b523445..000000000 --- a/libpythonpro/tests/test_spam/test_usuarios.py +++ /dev/null @@ -1,17 +0,0 @@ -from libpythonpro.spam.modelos import Usuario - - -def test_salvar_usuario(sessao): - usuario = Usuario(nome='Renzo', email='renzo@python.pro.br') - sessao.salvar(usuario) - assert isinstance(usuario.id, int) - - -def test_listar_usuarios(sessao): - usuarios = [ - Usuario(nome='Renzo', email='renzo@python.pro.br'), - Usuario(nome='Luciano', email='renzo@python.pro.br') - ] - for usuario in usuarios: - sessao.salvar(usuario) - assert usuarios == sessao.listar() diff --git a/setup.py b/setup.py index 1fea97a65..f4c5b0992 100644 --- a/setup.py +++ b/setup.py @@ -101,7 +101,7 @@ def find_package_data( return out -PACKAGE = "libpythonpro" +PACKAGE = "Libpythonpro" NAME = PACKAGE DESCRIPTION = "Módulo para exemplificar construção de projetos Python no curso PyTools" AUTHOR = "Renzo Nuccitelli" @@ -117,7 +117,7 @@ def find_package_data( long_description_content_type='text/markdown', author=AUTHOR, author_email=AUTHOR_EMAIL, - license="GNU AFFERO GENERAL PUBLIC LICENSE", + license=read('GNU AFFERO GENERAL PUBLIC LICENSE'), url=URL, packages=find_packages(exclude=["tests.*", "tests"]), package_data=find_package_data(PACKAGE, only_in_packages=False), @@ -128,7 +128,7 @@ def find_package_data( "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.10", "Framework :: Pytest", ], install_requires=[