## Simplificar instalação e distribuição do stoq e stoq-server como pacotes python
### Permitir instalar "core" do stoq sem GTK
##### Por quê
- Permite instalação do stoq-server via pip sem muita dificuldade
- Facilita eventual instalação do stoq-server em Windows
- Instalação e build no CI mais rápida
- Menos código para manter e entender
##### Como
- Remover kiwi do setup:
- [X] stoq-server
- [X] stoqdrivers
- [ ] plugins
- Separar pacote stoq
- [ ] stoq-gtk (tudo relacionado a gui/desktop/gtk)
- [ ] stoq-domain
- [ ] stoq-database (patches sql + mágicas de stoqlib.database)
- [ ] stoq-utils (utils com baixa dependência utilizadas pelos projetos anteriores)
- [ ] separar em múltiplos repos
- Permitir instalação sem GTK
- [ ] stoq
- [X] stoq-server
- [X] stoqdrivers
- [X] kiwi
- [ ] stoq-plugin-nfe
- [ ] stoq-plugin-nfce
- [ ] stoq-plugin-sat
- [ ] outros plugins
### Mover gerenciamento de dependências do APT para poetry (ou similar)
##### Por quê
- Garantia que todas as máquinas rodam mesmas versões das bibliotecas
- Simplifica atualização de versões de libs (por ex. usar a versão mais recente da requests que acabou de receber fix de segurança)
- Auxilia substituição do APT por pip para instalação de pacotes python
##### Como
- Organizar dependências usando poetry em:
- [ ] stoq-domain
- [ ] stoq-database
- [ ] stoq-utils
- [ ] stoq-server
- [ ] plugins
### Suportar múltiplas versões de python
##### Por quê
- Facilitar trocar de versão de python (3.5 chegou ao fim da vida em 13/09/2020)
- Estar sempre na última versão (ou algo próximo disso) faz com que não precisemos correr um dia atrás de migrar versão deprecated e podemos usufruir de novas features
- Para rodar em outras distros e sistemas operacionais que usam/suportam versões diferentes de python
##### Como
- Alterar CI para rodar testes em versões diferentes de python e constantemente mudar essas configs para usar últimas versões do python
- Usar gitlab CI ou tox
- Arrumar base de código para funcionar na última versão
- Adotar política de idealmente usar sempre a última versão
### Usar PyPI para hospedar pacotes python no lugar de APT repo e eggs via stoq.link
##### Por quê:
- Torna possível manter diferentes versões de todos nossos pacotes uma vez que o apt+PPA dificultam isso
- Mais fácil que custom eggs etc. e com mesma funcionalidade se usarmos repositórios privados python e menos código nosso que precisamos manter, se preocupar com bugs, melhorias etc.
##### Como:
- Subir plugins no pypi (privado se necessário) e pinnar versões dos plugins onde necessário
### Melhorar mudanças de banco para que a instância e os diferentes PDVs saibam sobreviver melhor com versões diferentes
##### Por quê:
- Fazer alterações no banco exige um release para sql e outro para código python ou sincronização instancia <> pdv quebra, ou seja, temos que fazer 2 releases para 1 alteração
##### Como:
- A decidir
### :lipstick: Modernizar / simplificar linting e testes
##### Por quê:
- Vários scripts e dependências (stoq-utils/source-tests.sh por ex.) que provavelmente não vão ser mais necessários com mudanças anteriores
##### Como:
- Usar flake8 do pip (no lugar de python-pyflakes)
- Limpar coisas do jenkins
- Simplificar stoq-utils/utils.mk