GithubHelp home page GithubHelp logo

prefeiturasp / sme-pratoaberto-api Goto Github PK

View Code? Open in Web Editor NEW
18.0 26.0 19.0 2.13 MB

API da aplicação PratoAberto

License: GNU General Public License v3.0

Python 25.70% Dockerfile 0.33% HTML 73.97%

sme-pratoaberto-api's Introduction

Maintainability Build Status

Instalação

Instale os requisitos através do requirements.txt e configure uma variável de ambiente chamada API_MONGO_URI com o apontamento para a base.

pip install -r requirements.txt
export API_MONGO_URI=localhost:27017
FLASK_APP=api.py flask run

Instalação usando Docker

Dentro do diretório do projeto, inicie a aplicação usando docker-compose.

docker-compose up -D --build

Instale MongoDB versão mínima 3.6:

Windows Mac

mongod --fork --logpath <arquivo_para_logs (exemplo:/var/log/mongod.log)>
mongorestore -d pratoaberto -c cardapios ./cardapios.bson 
mongorestore -d pratoaberto -c escolas ./escolas.bson 

Pátio Digital

“Recurso público retorna ao público”.

Nós somos o pátio digital, uma iniciativa da Secretaria Municipal de Educação de São Paulo que, por meio do fortalecimento da transparência, da participação social e do desenvolvimento de novas tecnologias, aproxima diferentes grupos da sociedade civil por um objetivo maior: a melhoria da educação na cidade de São Paulo.

Prato Aberto

"Prato Aberto – Comida Boa Não Tem Segredo".

API do Prato Aberto

A API serve dados sobre as escolas e as refeições das escolas da rede pública da cidade de São Paulo.

Conteúdo

  1. Sobre o prato aberto
  2. Comunicação
  3. Roadmap de tecnologia
  4. Como contribuir
  5. Instalação

Sobre o prato aberto

Projetada para funcionar em computadores e dispositivos móveis como tablets e celulares. A ferramenta permite a consulta dos cardápios por dia e por escola, com visualização no mapa. É a primeira vez que os cardápios são divulgados por unidade escolar. Além de facilitar a consulta dos cardápios,a plataforma permite a avaliação da qualidade das refeições e prevê interação com usuários via Facebook e Telegram, por meio de um assistente virtual, o Robô Edu.

Nossos outros repositórios

  1. Robô Edu
  2. API
  3. Editor

Comunicação

Canal de comunicação Objetivos
Issues do Github - Sugestão de novas funcionalidades
- Reportar bugs
- Discussões técnicas
Telegram - Comunicar novidades sobre os projetos
- Movimentar a comunidade
- Falar tópicos que não demandem discussões profundas

Qualquer outro grupo de discussão não é reconhecido oficialmente.

Roadmap de tecnologia

Passos iniciais

  • Melhorar a qualidade de código
  • Iniciar a escrita de testes unitários
  • Configurar Docker
  • Melhorar documentação de maneira enxuta
  • CI com jenkins

Como contribuir

Contribuições são super bem vindas! Se você tem vontade de construir o prato aberto conosco, veja o nosso guia de contribuição onde explicamos detalhadamente como trabalhamos e de que formas você pode nos ajudar a alcançar nossos objetivos. Lembrando que todos devem seguir nosso código de conduta.

Endpoints

/escolas

Lista escolas da rede publica.

Argumentos de query string:

nome:   string - opcional
        Permite a filtragem da lista de escolas pelo nome

Retorno:

[
    {
        "_id": 91065,
        "nome": "EMEI ELIS REGINA - (TERCEI.)",
        "endereco": "R. ERNESTO MANOGRASSO, 340",
        "bairro": "CID. SÃO MATEUS",
        "lat": -23.611117,
        "lon": -46.479426
    },
    ...
]

/escola/int:id_escola

Lista detalhes de uma determina escola pelo seu identificador (código Escola Online - EOL)

Parametros:

id_escola:    int

Retorno:

{
    "nome": "EMEI ELIS REGINA - (TERCEI.)",
    "tipo_unidade": "EMEI",
    "tipo_atendimento": "TERCEIRIZADA",
    "agrupamento": 4,
    "endereco": "R. ERNESTO MANOGRASSO, 340",
    "bairro": "CID. SÃO MATEUS",
    "telefone": "(11)29199960",
    "lat": -23.611117,
    "lon": -46.479426,
    "idades": [
        "Z - UNIDADES SEM FAIXA"
    ]
}

/cardapios ou /cardapios/

Lista os cardapios disponíveis

Parametros:

data:   string - opcional
        Formato: YYYYMMDD

Argumentos de query string:

agrupamento:        string - opcional
tipo_atendimento:   string - opcional
tipo_unidade:       string - opcional
idade:              string - opcional
data_inicial:       string - opcional
data_final:         string - opcional

Retorno:

[
    {
        "data": "20170922",
        "idade": "1 A 3 MESES",
        "tipo_atendimento": "DIRETA",
        "tipo_unidade": "CEI_CONVENIADO",
        "agrupamento": "4",
        "cardapio": {
            "Jantar": [
                "FORMULA LÁCTEA"
            ],
            "Desjejum": [
                "FORMULA LACTEA"
            ],
            "Almoco": [
                "FORMULA LACTEA"
            ],
            "Lanche": [
                "FORMULA LÁCTEA"
            ]
        },
    },
    ...
]

/editor/cardapios

Permite a listagem e a alteração dos dados de cardápio.

Para acesso, é necessário enviar uma chave através do cabeçalho HTTP key. A chave deve ser a mesma que a variável de ambiente API_KEY

Argumentos de query string:

status:             string - opcional
agrupamento:        string - opcional
tipo_atendimento:   string - opcional
tipo_unidade:       string - opcional
idade:              string - opcional
data_inicial:       string - opcional
data_final:         string - opcional

Retorno:

[
    {
        "data": "20170922",
        "idade": "1 A 3 MESES",
        "tipo_atendimento": "DIRETA",
        "tipo_unidade": "CEI_CONVENIADO",
        "agrupamento": "4",
        "cardapio": {
            "Jantar": [
                "FORMULA LÁCTEA"
            ],
            "Desjejum": [
                "FORMULA LACTEA"
            ],
            "Almoco": [
                "FORMULA LACTEA"
            ],
            "Lanche": [
                "FORMULA LÁCTEA"
            ]
        },
    },
    ...
]

/status

Verifica se a API está online.

Retorno:

{
    "status": "ativo"
}

Baseado no Readme do i-educar

sme-pratoaberto-api's People

Contributors

anderson89marques avatar calvinrossinhole avatar ebufaino avatar edsoncelio avatar fdiasr avatar fe-oliveira avatar foliveira3101 avatar giusepper11 avatar iagocarvalho avatar josutk avatar ludimila avatar luizhpriotto avatar marcelomaia avatar matheuscmelo avatar pamnovalli avatar pedro-walter avatar pnspinelli avatar rg3915 avatar rodrigodiaspilotogalvao avatar tiagodanin avatar vitorhirota avatar wagnerwar avatar wesley1263 avatar

Stargazers

 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sme-pratoaberto-api's Issues

Dockerizar a aplicação

Colocar a aplicação para rodar dentro de um contêiner, de forma que ela possa ser distribuída e executada por outras pessoas.

  • Dockerfile

  • docker-compose

Configurar setup de testes

A aplicação não possui testes unitários, é preciso que tenha, seria interessante utilizar o pytest para tal.

API não esta funcionando via docker compose

Rodando aplicação via docker compose a api não fica em pé retornando um exit code 0.

Olhando o Readme, a instalação tradicional seta algumas configurações diferentes do compose.

Gostaria de fazer um PR para atualizar o docker compose.

cc @ludimila

Modularizar arquivo api.py

Separar o o código do arquivo principal em mais outros arquivos.

Seguindo a estrutura:

/news_app.py
/views.py
/db.py
/run.py
/settings.py
/templates/*
/static/*
/media_files/*

Existem maneiras melhores de se organizar o código, mas a princípio, essa modularização resolve o problema.

Pode-se usar os princípios SOLID
E boas práticas em FLASK

Ignorar acentos na busca por escolas

Problema:

Busca de escolas por nome não ignora acentos.

Possível solução 1:

Substituir query na api de $regex para $text, por exemplo:

query['nome'] = { '$text': { '$search': nome, '$language': 'pt', '$caseSensitive': False, '$diacriticSensitive': False } }

Atenção, isso só funciona no Mongo versão 3.2 ou maior. Não testei os resultados. Referência: https://docs.mongodb.com/manual/reference/operator/query/text/

Possível solução 2:

Remover acentos do texto inputado pelo usuário, supondo que na base de dados nunca haverá acentos. Exemplo:

accented_string = u'Málaga'
# accented_string is of type 'unicode'
import unidecode
unaccented_string = unidecode.unidecode(accented_string)
# unaccented_string contains 'Malaga'and is of type 'str'

Referência: https://stackoverflow.com/questions/517923/what-is-the-best-way-to-remove-accents-in-a-python-unicode-string

Criar CRUD de usuário

A aplicação tem apenas um usuário que foi amarrado ao código. Faz-se necessário a criação de um CRUD.
Com campos email e senha.
Email seguindo o padrão [email protected]

Criar uma página para a API

A API abre uma página de erro quando rodamos na porta padrão.
Seria interessante pelo menos uma página html simples avisando que a API está rodando.
Um status simples mesmo!

Adicionar uma seção "Problemas mais comuns na configuração e instalação" no Readme

Acredito que uma seção sobre problemas mais comuns na configuração e instalação seria muito útil.
Exemplo de possíveis problemas:

  • MongoDB não estar instalado;
  • Docker e/ou docker-compose não estar configurado corretamente;
  • Erro ao subir a aplicação com docker-compose up por não estar no mesmo diretório do arquivo .yml;

E outros possíveis problemas que possam vir a acontecer.

obs: caso o readme não seja o local mais adequado a wiki seria uma opção.

Erro de faixa etária

De – Para de terceirizada – faixa I- 2 a 6 anos está aparecendo no site como “ 4 a 6 anos”

image

Atualizar base de dados

O banco de dados (que faz a relação entre escolas, tipo de gestão, tipo de refeição servida e idade) foi extraído para revisão e alteração manual de CODAE.

O motivo de realizar esse método (manual) foi que havia muitas alterações a fazer e o uso da interface administrativa levaria muito tempo, tornando-se inviável.

Todas as colunas (em especial GESTÃO, REFEIÇÕES e IDADES) tiveram alteração, além da inclusão de novas escolas, de forma que é necessária a substituição do banco antigo pelo atual. Um exemplo de alteração foi a mudança de nome das creches (de CEI CONV para CEI PARC), mas há outras alterações.

Em resumo:

A base foi extraída do sistema em produção (feito);
Houve correção manual da base por CODAE (feito);
É preciso cruzar o COD EOL dos dois arquivos para obter as coordenadas (a fazer; arquivos abaixo)
A base deve ser atualizada com o novo arquivo (a fazer).

Arquivos:
escolas_latitude_longitude.xlsx
Lista de Escolas_final_Julho.xlsx

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.