InternetSemLimites / PublicAPI

🌐CMS & API for InternetSemLimites
https://internetsemlimites.herokuapp.com/
MIT License
17 stars 3 forks source link

Documentação para registro de nova operadora #8

Closed cuducos closed 8 years ago

cuducos commented 8 years ago

From @ronniery on April 30, 2016 12:32

Bom dia senhores, estou construindo um app android com a finalidade de disponibilizar as informações do web server, porém estou também disponibilizando a parte de registro de boas/péssimas operadoras.

  1. Existe alguma documentação que eu possa seguir para o cadastro de uma nova operadora?
  2. É possível realizar algum tipo de teste?

Copied from original issue: InternetSemLimites/InternetSemLimites#52

cuducos commented 8 years ago

Não sei se entendi direito tua pergunta, meu caro… mas vai:

  1. Para o nosso projeto usamos esse modelo para o cadastro de provedores. Ajuda?
  2. Que tipo de testes tens em mente? Para o CMS a API usamos testes aqui, aqui e aqui.
cuducos commented 8 years ago

From @ronniery on May 1, 2016 11:4

  1. Basicamente um json com as informações e um request POST/GET - OK
  2. Como inicialmente não consumi sua api de cadastro, eu poderia acabar submetendo informação lixo, exemplo {'name': 'Xpto', 'url': 'http://xp.to', 'coverage': ['GO', 'XC']} não existe estado XC, informações que não iria contribuir em nada, para evitar isto queria saber se existe uma maneira de não enviar informação lixo ao servidor.

Para subir um server local de django/py e complicado? Somente com o que está neste README.md é o suficiente? Acho que com isto o segundo item se resolve.

cuducos commented 8 years ago

@ronniery Movi a issue para cá pois ela tem a ver com a API (esse repositório), e não com a lista colaborativa em si.

1. Inclusão de novas operadoras

Atualmente o isso é feito somente através do nosso formulário, mas já falamos na Issue #5 de:

Atualmente o entrypoint /new/ recusa qualquer POST externo ao internetsemlimites.herokuapp.com pois usa CSRF — mas podemos mudar isso sem problemas.

No mais, a própria implementação do formulário e do modelo no Django se encarrega da validação dos dados (por exemplo, não validaria um POST com estado XC, retornaria erro antes de enviar qualquer coisa ao banco de dados).

Se for colocar isso no teu app, me avise e coordenamos as alterações na API (possibilidade de receber POST externo). Só peço que leia nossas (minha?) ressalvas sobre o formulário: precisamos ajudar o usuário a filtrar melhor o que é enviado — tudo explicadinho na Issue #5.

2. Subir uma aplicação Django

O ideal é que o README.md dê conta do recado, principalmente se você tiver algum conhecimento prévio de Python. Se tiver dificuldade para subir localmente aí, vá me avisando dos calos que incrementamos a documentação — ou mande PR com sugestões de melhorias ; )

ronniery commented 8 years ago
  1. Pretendo adicionar esta funcionalidade sim se puder realizar esta modificação, por hora vou tentando usar localmente.
  2. O README.md funcionou perfeitamente, porém aconteceram os seguintes problemas, eu não tinha postgree instalado e falha ao construir building 'psycopg2._psycopg' extension.

Mas o google resolveu todos os problemas de instalação do ambiente, o único que me resta, e que ao submeter uma requisição (via formulário) para /new recebo HTTP 500 Internal server Error.

p.s: Meu conhecimento sobre python e igual a 0

cuducos commented 8 years ago

Que bom que funcionou! O psycopg2 só é necessário de você for utilizar o Postgres. Em desenvolvimento tudo bem usar o SQLite, não tem muito problema.

Mas… erro 500? Quando CSRF falha deveria retornar 403… me passe o POST que está fazendo para eu reproduzir o erro aqui e ver se está tudo ok, pode ser?

luzfcb commented 8 years ago

@ronniery o básico de dependências que ajudam a instalar quase todas as bibliotecas python que tem extensões implementadas em linguagem C (como psycopg2) :

ubuntu 14.04:

sudo apt-get install python-dev python3-dev gettext build-essential zlib1g-dev libpq-dev libtiff4-dev libjpeg8-dev libfreetype6-dev liblcms1-dev libwebp-dev libmemcached-dev libssl-dev graphviz-dev blt tix libxml2-dev libxslt-dev

ubuntu 15.04/15.10/16.04:

sudo apt-get install python-dev python3-dev gettext build-essential zlib1g-dev libpq-dev libtiff5-dev libjpeg8-dev libfreetype6-dev liblcms2-dev libwebp-dev libmemcached-dev libssl-dev graphviz-dev blt tix libxml2-dev libxslt-dev
ronniery commented 8 years ago

Olhando no código vi que eu poderia habilitar o stacktrace da aplicação, que segue em googledrive

cuducos commented 8 years ago

Exato. Está no .env.sample (mencionado na documentação) a variável DEBUG.

Se ela for True, você tem as mensagens de erro detalhadas.

Mas nunca deixe isso em produção. Nunca.

cuducos commented 8 years ago

@ronniery Incrementei a descrição das variáveis do .env, espero que ajude.

Mais tarde vou ter que estudar um pouco de CORS para ver como abrir o /new/ para POST externo sem esbarrar em muitos problemas de segurança. Você tem como saber de qual servidor virão essas requisições, ou seria direto do IP do usuário?

ronniery commented 8 years ago

Ficaram claras as descrições :+1:

Posso optar por mandar via direto IP do usuário ou centralizar em um servidor Node.js e a partir dele encaminhar as requisições ao /new/.

Qual fica melhor?

cuducos commented 8 years ago

Então, se der na mesma para você, centralizar as requisições em um IP/servidor único acho que dá mais segurança para a aplicação.

ronniery commented 8 years ago

O node server irá ficar nesta url https://arcane-waters-62201.herokuapp.com/ (sim nome dado pelo heroku)

cuducos commented 8 years ago

Legal, @ronniery. Com o c786ba7 qualquer site/domínio/IP pode usar o endpoint /api/provider/new/ via POST para criar novos provedores. Pode testar ; ) E depois nos conte se deu certo!

ronniery commented 8 years ago

A codificação do meu server local está estranha, como eu altero isto? Por exemplo Goiás (GO), Maranhão (MA), Paraná (PR) e por ai vai acho que é por isto que está dando exceção de charmap...

cuducos commented 8 years ago

Onde (qual URL)?

ronniery commented 8 years ago

localmente em /new/ o servidor está rodando no windows

cuducos commented 8 years ago

Bem estranho. Duas possibilidades a verificar:

Alguma outra ideia, @luzfcb?

ronniery commented 8 years ago

Python 3.5.1 O google chrome diz que a codificação e utf-8 por padrão, se eu subir uma máquina virtual com linux e a partir dai subir um server python seria mais eficiente?

cuducos commented 8 years ago

@ronniery Era para funcionar normal no Windows também.

Outra possível causa: a tabela de estados no banco de dados é alimentada por um JSON em uma das migrações. O Django já teve problemas de encoding em casos assim, mas teoricamente foram resolvidos… De repente achasse um bug para reportar…

O problema é só no nome dos estados ou em todo caracter não ASCII da página?

luzfcb commented 8 years ago

@ronniery o Windows por padrão usa uma variação do ISO-8859-1 chamada "Windows-1252" ou "cp-1252" (inclusive no terminal) https://en.wikipedia.org/wiki/Windows-1252, mas todo o resto do mundo usa quase que majoritariamente UNICODE - UTF-8

Eu pessoalmente, odeio, com todas as forças usar windows para desenvolver. O terminal (CMD) é péssimo, é complicado instalar e configurar qualquer coisa que não seja ferramenta desenvolvida pela Microsoft e ainda tem o problema da codificação.

Esse ultimo me dá lembranças terríveis. Trabalhava numa equipe (na secretaria de estado da administração do TO) que mantinha um software Java JSF (desenvolvido por uma empresa externa, que para nossa "sorte" o estado resolveu não pagar direito e eles romperam o contrato) que controlava toda a vida funcional do servidor publico, incluindo a posse. O sistema era desenvolvido em Windows, mas o deploy era feito em Linux. Por causa de um deslize em selecionar corretamente a codificação de alguns arquivos do código fonte java, o sistema dava falhas aleatórias e nenhum log ajudava a tentar achar o que estava dando de errado.

O problema foi tanto, que até conseguirmos descobrir a causa dos erros, já estávamos literalmente, com a rede globo local (TV Anhaguera), fazendo reportagem sobre a demora nas posses dos mais de 5000 novos servidores públicos porque o sistema ficava fora do ar constantemente. (o governo tinha mais contratados (cabide de emprego), do que servidores efetivos, o MPE obrigou o estado a demitir todos os contratados e fazer um novo concurso).

Foi uma época tensa, triste e de muita hora besta (servidor publico não ganha hora-extra).

ronniery commented 8 years ago

@cuducos somente no nome dos estados

cuducos commented 8 years ago

@ronniery Se é só no nome dos estados o problema foi na migração que lê o JSON (talvez pelo padrão do Windows não ser UTF-8, como o @luzfcb disse, o erro pode ter acontecido na leitura do JSON).

Vou tentar forçar a migração para usar UTF-8, não sei se funciona. Mas para você não ter que voltar todas a migrações, tens duas opções:

cuducos commented 8 years ago

Vou tentar forçar a migração para usar UTF-8 […]

Feito no c75ea3b. Se testar me avise se funcionou, @ronniery.

ronniery commented 8 years ago

Valeu a ajuda galera, mas ainda sim exceção de charmap, já estou baixando um linux esperto aqui!

cuducos commented 8 years ago

@ronniery, pode me descrever os passos que segui para ainda ter os erros de encoding? Você zerou o banco e rodou todas as migrações do zero?

ronniery commented 8 years ago

Quando você diz zerar o banco... Refere-se ao postgree?

  1. Removi a pasta do projeto PublicAPI-master da minha área de trabalho
  2. Baixei do github um .zip
  3. Desempacotei para a área de trabalho e rodei os comandos necessários descritos no README.md
  4. Por fim runserver
cuducos commented 8 years ago

Qual bando de dados está usando? Se for Postgres (ou MySQL) os dados do banco ficaram intactos. Se for SQLite, foram zerados. No teu passo 3 você configura alguma coisa como DATABASE_URL? Se não configurou, o banco é SQLite e foi zerado, pois os dados ficam num arquivo dentro da pasta do projeto.

Vou pedir ajuda pra mais umas pessoas ver se tem como resolver esse problema das migrações no Windows.

ronniery commented 8 years ago

Haha nem me atentei a DATABASE_URL então sim, acabei utilizando SQLite sem saber

ronniery commented 8 years ago

Tudo ia bem até executar o seguinte comando root@virtual-VirtualBox:/home/virtual/Área de Trabalho/PublicAPI-master# python manage.py migrate Apareceu o erro

Traceback (most recent call last): File "manage.py", line 10, in execute_from_command_line(sys.argv) File "/usr/lib/python2.7/dist-packages/django/core/management/init.py", line 399, in execute_from_command_line utility.execute() File "/usr/lib/python2.7/dist-packages/django/core/management/init.py", line 392, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/lib/python2.7/dist-packages/django/core/management/init.py", line 261, in fetch_command commands = get_commands() File "/usr/lib/python2.7/dist-packages/django/core/management/init.py", line 107, in get_commands apps = settings.INSTALLED_APPS File "/usr/lib/python2.7/dist-packages/django/conf/init.py", line 54, in getattr self._setup(name) File "/usr/lib/python2.7/dist-packages/django/conf/init.py", line 49, in _setup self._wrapped = Settings(settings_module) File "/usr/lib/python2.7/dist-packages/django/conf/init.py", line 132, in init % (self.SETTINGS_MODULE, e) ImportError: Could not import settings 'InternetSemLimites.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named apps

cuducos commented 8 years ago

@ronniery Você está usando Python 2.7, não Python 3.5.1 (que é o que o projeto requer)…

ronniery commented 8 years ago

Sucesso! Servidor rodando dentro do linux na máquina virtual, cadastrando e tudo :+1: Vou apontar o app android para este servidor e fazer meus testes obrigado.

cuducos commented 8 years ago

Hell yeah : )

On Wed, May 4, 2016 at 11:48 AM ronniery notifications@github.com wrote:

Sucesso! Servidor rodando dentro do linux na máquina virtual, cadastrando e tudo [image: :+1:] Vou apontar o app android para este servidor e fazer meus testes obrigado.

— You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub https://github.com/InternetSemLimites/PublicAPI/issues/8#issuecomment-216888521

ronniery commented 8 years ago

Até agora os testes estão fluindo mas tenho uma pergunta, rola uma response em json? Para o endpoint /provider/<number>

Se não for possível, irei dar parse no HTML do referido endpoint.

cuducos commented 8 years ago

Não é o [/api/provider/<provider id>/)(http://internetsemlimites.herokuapp.com/api/provider/42/) que procuras? Implementei no c75ea3b mencionado há 2 dias aqui:

ronniery commented 8 years ago

Obrigado pela paciência, de fato foi falta de atenção minha, estou tentando enviar o email de confirmação para o meu email.

  1. Localmente este email será enviado?
  2. Como eu confirmo (por parte da administração) a criação de uma nova operadora? Existe alguma área administrativa? Ou e pelo email que ainda não recebo?
cuducos commented 8 years ago

De nada, mano. Estamos junto nessa!

  1. Localmente, o email não é enviado, mas ele aparece na console do Django (terminal onde o servidor está rodando); se quiser enviar, é só mudar o backend de email para usar SMTP e configurar os dados do servidor SMTP (mudar backend e as configurações é simples, só configurar umas 6 (?) variáveis de email descritas na parte de variáveis de ambiente)
  2. Na documentação, no final, tem a URL do Django Admin (/admin/) e em um dos passos anteriores você cria um superuser para ti (usuário e senha para acessar o Django Admin). On Fri, May 6, 2016 at 11:47 ronniery notifications@github.com wrote:

Obrigado pela paciência, de fato foi falta de atenção minha, estou tentando enviar o email de confirmação para o meu email.

  1. Localmente este email será enviado?
  2. Como eu confirmo (por parte da administração) a criação de uma nova operadora? Existe alguma área administrativa? Ou e pelo email que ainda não recebo?

— You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub https://github.com/InternetSemLimites/PublicAPI/issues/8#issuecomment-217461168

ronniery commented 8 years ago

@cuducos Não sei se precisa, mas mandei meu teste agora para o seu servidor e funcionou perfeitamente, se preciso for feche este issue

Obrigado testes finalizados =)

cuducos commented 8 years ago

Recebi sim — com isso, fechado o tópico! Uhuu : ) Parabéns pela integração, @ronniery!