diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 000000000..50f6df57e
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,38 @@
+name: Python application
+
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up Python 3.9
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.9
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install codecov
+ pip install flake8 pytest
+ pip install -r requirements-dev.txt
+ - name: Lint with flake8
+ run: |
+ # stop the build if there are Python syntax errors or undefined names
+ flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
+ # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
+ flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
+ - name: Teste de código com pytest
+ run: |
+ pytest --cov=LibPythonPro
+ - name: Cobertura de testes com codecov
+ uses: codecov/codecov-action@v1
+ with:
+ token: ${{secrets.CODECOV_TOKEN}}
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 000000000..26d33521a
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 000000000..fc5fc7c73
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 000000000..105ce2da2
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libpythonpro.iml b/.idea/libpythonpro.iml
new file mode 100644
index 000000000..ceaaabe36
--- /dev/null
+++ b/.idea/libpythonpro.iml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 000000000..66f48d7fc
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 000000000..3478ad2cf
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 000000000..94a25f7f4
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index 6694375b7..75d0cf825 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,10 @@
language: python
python:
- 3.7
+ - 3.10.0
+ - 3.10.1
install:
- - pip install -q pipenv codecov
+ - pip install -q -r pipenv codecov
- pipenv sync --dev
script:
- flake8
diff --git a/Pipfile.lock b/Pipfile.lock
index 8a647ca6f..e3b1bdd4d 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -122,10 +122,10 @@
},
"importlib-metadata": {
"hashes": [
- "sha256:6dfd58dfe281e8d240937776065dd3624ad5469c835248219bd16cf2e12dbeb7",
- "sha256:cb6ee23b46173539939964df59d3d72c3e0c1b5d54b84f1d8a7e912fe43612db"
+ "sha256:e8b45564028bc25f8c99f546616112a6df5de6655893d7eb74c9a99680dc9751",
+ "sha256:ee50794eccb0ec340adbc838344ebb9a6ff2bcba78f752d31fc716497e2149d6"
],
- "version": "==0.18"
+ "version": "==4.9.0"
},
"mccabe": {
"hashes": [
diff --git a/README.md b/README.md
index 676c14d7f..6ffa3fa7c 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,22 @@
# libpythonpro
-
Módulo para exemplificar construção de projetos Python no curso PyTools
Nesse curso é ensinado como contribuir com projetos de código aberto
Link para o curso [Python Pro](https://www.python.pro.br/)
-[](https://travis-ci.org/pythonprobr/libpythonpro)
-[](https://pyup.io/repos/github/pythonprobr/libpythonpro/)
-[](https://pyup.io/repos/github/pythonprobr/libpythonpro/)
-[](https://codecov.io/gh/pythonprobr/libpythonpro)
-
+[](https://app.travis-ci.com/Rawston/libpythonpro)
+[](https://pyup.io/repos/github/Rawston/libpythonpro/)
+[](https://pyup.io/repos/github/Rawston/libpythonpro/)
Suportada versão 3 de Python
Para instalar:
```console
+python3 -m venv env
+{windows} - env\Sctripts\activate {windows}
+{Ubuntu} - source env/bin/activate
+pip install -r reqirements-dev.txt
pip install pipenv
pipenv install --dev
```
diff --git a/codecov.yml b/codecov.yml
new file mode 100644
index 000000000..75d0cf825
--- /dev/null
+++ b/codecov.yml
@@ -0,0 +1,13 @@
+language: python
+python:
+ - 3.7
+ - 3.10.0
+ - 3.10.1
+install:
+ - pip install -q -r pipenv codecov
+ - pipenv sync --dev
+script:
+ - flake8
+ - pytest libpythonpro --cov=libpythonpro
+after_success:
+ - codecov
\ No newline at end of file
diff --git a/libpythonpro/github_api.py b/libpythonpro/github_api.py
index 8b0fbafb9..75df1d64c 100644
--- a/libpythonpro/github_api.py
+++ b/libpythonpro/github_api.py
@@ -11,3 +11,7 @@ def buscar_avatar(usuario):
url = f'https://api.github.com/users/{usuario}'
resp = requests.get(url)
return resp.json()['avatar_url']
+
+
+if __name__ == '__main__':
+ print(buscar_avatar('Rawston'))
diff --git a/libpythonpro/spam/__init__.py b/libpythonpro/spam/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/libpythonpro/spam/db.py b/libpythonpro/spam/db.py
deleted file mode 100644
index ce90ca60b..000000000
--- a/libpythonpro/spam/db.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from time import sleep
-
-
-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
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/spam/main.py b/libpythonpro/spam/main.py
deleted file mode 100644
index f81821ae4..000000000
--- a/libpythonpro/spam/main.py
+++ /dev/null
@@ -1,13 +0,0 @@
-class EnviadorDeSpam:
- def __init__(self, sessao, enviador):
- self.sessao = sessao
- self.enviador = enviador
-
- def enviar_emails(self, remetente, assunto, corpo):
- for usuario in self.sessao.listar():
- self.enviador.enviar(
- remetente,
- usuario.email,
- assunto,
- corpo
- )
diff --git a/libpythonpro/spam/modelos.py b/libpythonpro/spam/modelos.py
deleted file mode 100644
index 093b35a2a..000000000
--- a/libpythonpro/spam/modelos.py
+++ /dev/null
@@ -1,5 +0,0 @@
-class Usuario:
- def __init__(self, nome, email):
- self.email = email
- self.nome = nome
- self.id = None
diff --git a/libpythonpro/tests/test_exemplo.py b/libpythonpro/tests/test_exemplo.py
index 78cd50236..c6f49de88 100644
--- a/libpythonpro/tests/test_exemplo.py
+++ b/libpythonpro/tests/test_exemplo.py
@@ -1,2 +1,2 @@
def test_int():
- assert 1 == 1
+ assert 1 == 0
\ No newline at end of file
diff --git a/libpythonpro/tests/test_spam/__init__.py b/libpythonpro/tests/test_spam/__init__.py
deleted file mode 100644
index e69de29bb..000000000
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_enviador_de_email.py b/libpythonpro/tests/test_spam/test_enviador_de_email.py
deleted file mode 100644
index c72a0bbe9..000000000
--- a/libpythonpro/tests/test_spam/test_enviador_de_email.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import pytest
-
-from libpythonpro.spam.enviador_de_email import EmailInvalido, Enviador
-
-
-def test_criar_enviador_de_email():
- enviador = Enviador()
- assert enviador is not None
-
-
-@pytest.mark.parametrize(
- 'remetente',
- ['foo@bar.com.br', 'renzo@python.pro.br']
-)
-def test_remetente(remetente):
- enviador = Enviador()
- resultado = enviador.enviar(
- remetente,
- 'luciano@python.pro.br',
- 'Cursos Python Pro',
- 'Primeira turma Guido Von Rossum aberta.'
- )
- assert remetente in resultado
-
-
-@pytest.mark.parametrize(
- 'remetente',
- ['', 'renzo']
-)
-def test_remetente_invalido(remetente):
- enviador = Enviador()
- with pytest.raises(EmailInvalido):
- enviador.enviar(
- remetente,
- 'luciano@python.pro.br',
- 'Cursos Python Pro',
- '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
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/requirements-dev.txt b/requirements-dev.txt
new file mode 100644
index 000000000..586676d5e
--- /dev/null
+++ b/requirements-dev.txt
@@ -0,0 +1,13 @@
+flake8==4.0.1
+mccabe==0.6.1
+pycodestyle==2.8.0
+pyflakes==2.4.0
+
+# Deps do pytest
+py==1.8.2
+atomicwrites==1.0
+pluggy<2.0,==0.12
+attrs==19.2.0
+pyparsing!=3.0.5,==2.0.2
+pytest==6.2.5
+-r requirements.txt
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 000000000..a913432e6
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,5 @@
+certifi==2021.10.8
+charset-normalizer==2.0.9
+idna==3.3
+requests==2.26.0
+urllib3==1.26.7
diff --git a/setup.py b/setup.py
index 1fea97a65..631d488f7 100644
--- a/setup.py
+++ b/setup.py
@@ -102,11 +102,11 @@ def find_package_data(
PACKAGE = "libpythonpro"
-NAME = PACKAGE
+NAME = "Rawstonpact"
DESCRIPTION = "Módulo para exemplificar construção de projetos Python no curso PyTools"
-AUTHOR = "Renzo Nuccitelli"
-AUTHOR_EMAIL = "renzo@python.pro.br"
-URL = "https://github.com/pythonprobr/libpythonpro"
+AUTHOR = "Rawston Marinho"
+AUTHOR_EMAIL = "houston_cam@msn.com"
+URL = "https://github.com/Rawston/libpythonpro"
VERSION = __import__(PACKAGE).__version__
setup(