Coder Social home page Coder Social logo

pyjobs's Introduction

PyJobs - O Site de Vagas Python Open Source

Chatroom Build Status Maintainability Test Coverage

O PyJobs é o site de job listing de vagas Python no Brasil, nele você consegue se cadastrar para diversas vagas de emprego e de freelas que podem aparecer no país. Você pode contribuir com código ou ainda com valores monetários no: Apoia-Se

Clonar o repositório

git clone https://github.com/vmesel/PyJobs.git
cd PyJobs/
cp .env-sample .env
pip install poetry

Para você poder subir a sua versão do PyJobs, crie um .env dentro da pasta PyJobs contendo as seguintes informações:

Dependências

  1. Instalar docker
  2. Instalar o docker-compose

Para utilizar o Docker com o Docker Compose:

docker-compose build
docker-compose run web poetry run python manage.py migrate
docker-compose up

Testes

A bateria de testes e verificações utiliza também critérios de guias de estilo. Para formatar o código automaticamente use:

docker-compose run --rm web make style

Depois rode os testes com:

docker-compose run --rm web make test

Possíveis dificuldades com o desenvolvimento do PyJobs

Utilizar o formulário de cadastro de vaga para cadastrar uma vaga:

Ao tentar utilizar o formulário sem configurar os dados do RECAPTCHA o servidor do Django retorna um erro 500, não permitindo a inserção da vaga no sistema. Configure o recaptcha no seu computador local utilizando este tutorial.

Erro ao enviar algum e-mail.

Possivelmente, se você tiver exportado a variável de ambiente do SENDGRID com as API keys inválidas, você muito provavelmente terá algum erro. Para evitar isso, utilize o backend padrão do Django para envios de e-mails, assim eles aparecerão no terminal.

pyjobs's People

Contributors

alvesgabriel avatar cptx032 avatar cuducos avatar dependabot[bot] avatar ffreitasalves avatar guibeira avatar hudsonbrendon avatar ishakoktn avatar it-fm avatar lupus-magnus avatar mdslino avatar meselfiap avatar ventsin avatar viniciusban avatar vmesel avatar walison17 avatar zandorsabino avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pyjobs's Issues

Adicionar codecov

Seria uma boa adicionar o codecov para manter uma boa cobertura dos testes.

Adicionar testes

Adicionar testes enquando o projeto é 'pequeno' e de fácil manutenção.

Formatar email e método ao receber novas candidaturas

Formatar uma página que receba o recrutador da empresa e que tenha os detalhes do profissional. Se ele gostar do perfil, ele clica em "aprovado". Isto implicaria na mudança do email enviado a empresa que também teria informações reduzidas.

Adicionar PEP8

Adicionar PEP8 enquanto o projeto é 'pequeno' e de fácil manutenção.

Escrever guidelines de contribuição para o projeto

O arquivo de contributions tem muita importância para o projeto se manter organizado. Preciso sentar a bunda na cadeira e escrever com muito carinho e amor o arquivo de contributions para podermos elevar o nível de qualidade deste código!

Organizar estrutura do projeto

Durante a implementação dos campos para faixa salarial percebi que o projeto não está muito bem estruturado. Por exemplo, temos uma view no aplicativo chamado "core" que cadastra nova vaga e ao mesmo tempo cadastra empresa, e outra view que edita a vaga em um aplicativo chamado "jobs". Neste caso, como sugestão poderíamos ter uma aplicação empresas com views para gerenciamento de empresas e no aplicativo "jobs" ter em uma view apenas o cadastro e edição de vagas.

Fix: Botões nas vagas

Este fix está relacionado a view de visualização de detalhes de vaga

  • O usuário não deve estar permitido de ver a opção "Ir para a Vaga" enquanto não estiver logado, trocar condicional para cair no "Você precisa estar logado".

  • Ver como trocar layout do botão para responsivo.

Encontrar forma de divulgar a plataforma para empresas

Deve haver algum jeito de encontrar as empresas que tenham funcionários pythonistas e que possam indicar a plataforma para os times de RH. Podemos dar incentivos como descontos (caso venhamos a cobrar por vaga) ou algo do gênero.

Reorganizar os INSTALLED_APPS

Organizar os INSTALLED_APPS de uma forma melhor, separando-os entre apps do django, apps locais e apps de terceiros.

Colocar mensagem sobre links externos na pagina de Jobs aplicados

Hoje em dia, não temos controle sobre os jobs que tem links externos apontando, portanto, os usuários não tem como ver pela administração de sua conta.

Temos de melhorar isto de alguma forma! Minha sugestão atual é de colocar uma mensagem informando sobre a falta de cobertura nestes links.

Guia de estilos e qualidade de código

Tenho reparado no Telegram e nos linters que existe uma variação muito grande em termos de estilo e em termos de critérios de qualidade de código. O que acham de adotarmos alguns padrões para o código como:

  1. Black como formatador de código padrão integrado à CI
  2. isort para verificação integrado à CI

Circle-ci rodando os testes

Agora que já temos os testes de volta a rodar podemos terminar a integração com o Circle-ci, que agora retorna o seguinte erro:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/home/circleci/repo/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/home/circleci/repo/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 308, in execute
    settings.INSTALLED_APPS
  File "/home/circleci/repo/venv/lib/python3.6/site-packages/django/conf/__init__.py", line 56, in __getattr__
    self._setup(name)
  File "/home/circleci/repo/venv/lib/python3.6/site-packages/django/conf/__init__.py", line 41, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/circleci/repo/venv/lib/python3.6/site-packages/django/conf/__init__.py", line 110, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "/home/circleci/repo/pyjobs/settings.py", line 25, in <module>
    SECRET_KEY = config('SECRET_KEY')
  File "/home/circleci/repo/venv/lib/python3.6/site-packages/decouple.py", line 197, in __call__
    return self.config(*args, **kwargs)
  File "/home/circleci/repo/venv/lib/python3.6/site-packages/decouple.py", line 77, in __call__
    return self.get(*args, **kwargs)
  File "/home/circleci/repo/venv/lib/python3.6/site-packages/decouple.py", line 64, in get
    raise UndefinedValueError('%s option not found and default value was not defined.' % option)
decouple.UndefinedValueError: SECRET_KEY option not found and default value was not defined.
Exited with code 1

Aumentar cobertura de testes do PyJobs

Precisamos aumentar a cobertura de testes do PyJobs para podermos realizar as nossas migrações de versão e futuros desenvolvimentos de uma maneira melhor. Atualmente a cobertura de testes de nosso código é a seguinte:

pyjobs/__init__.py                                                                                                                             0      0   100%
pyjobs/api/resources.py                                                                                                                        6      0   100%
pyjobs/core/__init__.py                                                                                                                        0      0   100%
pyjobs/core/admin.py                                                                                                                          21      4    81%
pyjobs/core/email_utils.py                                                                                                                    10      2    80%
pyjobs/core/forms.py                                                                                                                          36      3    92%
pyjobs/core/management/__init__.py                                                                                                             0      0   100%
pyjobs/core/management/commands/__init__.py                                                                                                    0      0   100%
pyjobs/core/models.py                                                                                                                        131     21    84%
pyjobs/core/newsletter.py                                                                                                                     13      5    62%
pyjobs/core/tests/__init__.py                                                                                                                  0      0   100%
pyjobs/core/tests/test_forms.py                                                                                                                0      0   100%
pyjobs/core/tests/test_job_model.py                                                                                                           69      0   100%
pyjobs/core/tests/test_job_views.py                                                                                                           57      0   100%
pyjobs/core/tests/test_user_profile_model.py                                                                                                  16      0   100%
pyjobs/core/urls.py                                                                                                                           13      2    85%
pyjobs/core/utils.py                                                                                                                          29     17    41%
pyjobs/core/views.py                                                                                                                         139     91    35%
pyjobs/settings.py                                                                                                                            28      0   100%
pyjobs/urls.py                                                                                                                                 8      0   100%

Precisamos aumentar a cobertura para mais de 80% para todo o sistema, assim ficamos seguros para novas mudanças do Django.

Pesquisa de vagas

Não sei se é válido, mas talvez seja interessante ter uma pesquisa de vagas no site.

Talvez pesquisar por:

  • Palavra chave
  • Cidade / Estado / Remoto

Roadmap's application

This app is cool!!

There are some planning to build some features in this app.. Or refactoring some piece from this system..

Pipienv

Implementar o uso de versionamento de dependências com o Pipienv.

Criar APIs para cadastro de jobs

Criar uma API Restful no formato JSON que permita a um usuário com login já cadastrado na plataforma, cadastrar uma vaga para a empresa. Para esta mesma vaga, ter um endpoint com autenticação que retorna os profissionais relacionados a ela.

Arrumar mensagens de erro no formulário de login

Adicionar mensagens de erro ao layout da pagina de Login.
Isto é um problema de UX que acaba levando muitos usuários a tentar logar com email e com tentativas errôneas, prejudicando muito a experiência no site!

Migrar o código em português para inglês

Atualmente várias partes do projeto encontra-se com código em português, seria interessante que para termos um código mais conciso e de fácil manutenção, utilizar-mos apenas o inglês em nomes de variáveis, funções, classes, etc.

Concentrar leitura de configurações no settings.py

Reparo que em diversos arquivos temos a leitura de configurações: settings.py, utils.py, newsletter.py e views.py. Proponho fazer toda a leitura dessas configurações e nos demais lugares ler as configurações de django.conf.settings. Ou seja:

  1. Concentrar todas ocorrências do decouple.config no settings.py (removendo essas ocorrências de settings.py, utils.py, newsletter.py e views.py)
  2. Alterar esses 4 arquivos utilizando a estrutura como a do exemplo a seguir:
# utils.py
from django.conf import settings
from telegram import Bot, TelegramError


def post_telegram_channel(message):
    if not settings.TELEGRAM_TOKEN and not settings.TELEGRAM_CHATID:
        return False,  'missing_auth_keys'

    bot = Bot(settings.TELEGRAM_TOKEN)
    try:
        bot.send_message(chat_id=settings.TELEGRAM_CHATID, text=message)
    except TelegramError:
        return False, 'wrong_auth_keys'

    return True, 'success'

Isso é importante pois caso haja alguma falha na leitura ou configuração das variáveis isso já é detectado na hora da inicialização do Django, e não no meio da UX.

Fazer layout para páginas de reset de senha

Temos de fazer um layout para podermos melhorar o processo de reset de senha! Essa falta de identidade visual neste processo pode causar confusão no usuário e até fazer com que ele se confunda e cancele o procedimento achando que entrou em outro sistema.

Trocar engine do TastyPie para Django Rest Framework

O tastypie serviu o propósito dele muito bem, mas como queremos avançar com o projeto, devemos incluir o Django Rest Framework como repositório padrão para as nossas APIs. Além de ser um projeto bem mais sólido que o TastyPie, ele conta com as "views" de CRUD já feitas, o que torna o desenvolvimento uma mão na roda!

Tem migrações faltando da `master`?

Se rodarmos um makemigrations na branch master hoje vemos que tem algumas alterações nos modelos que não viraram migrações. Existe alguma razão para isso?

$ docker-compose run --rm web python manage.py makemigrations --dry-run                                                           
Starting pyjobs_db_1 ... done
Migrations for 'core':
  pyjobs/core/migrations/0023_auto_20190216_1820.py
    - Alter field ad_interested on job
    - Alter field application_link on job
    - Alter field company_email on job
    - Alter field company_name on job
    - Alter field description on job
    - Alter field requirements on job
    - Alter field title on job
    - Alter field workplace on job

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.