Giter Club home page Giter Club logo

matrufsc2's Introduction

MatrUFSC2

O MatrUFSC2 nasceu com a intenção de ser um substituto ao MatrUFSC original. Criado sob principios da web moderna, usaremos bibliotecas e arquiteturas avançadas para levar ao usuário recursos inovadores e fáceis de usar.

Note que o backend (no caso, o código deste repositório) agora é uma aplicação do Google App Engine e, portanto, não é mais compatível com servidores WSGI por padrão. (e isso pode vir a mudar no futuro)

Objetivos

Como novidades ao projeto original, temos como objetivo:

  • Re-escrever o projeto original, criando uma arquitetura original, fácil de programar e conhecida pela comunidade opensource ao redor do mundo.
  • Otimizar o sistema para funcionamento nos mais variados ambiente, incluindo ambiente mobile.
  • Aprimorar a experiência do usuário ao permitir simulação mesmo quando o usuário estiver offline.
  • Criar testes automatizados para detectarmos problemas antes mesmo dos usuários notá-los.

Estaremos aprimorando o código com o passar do tempo. No momento, estaremos focando em re-escrever o frontend e o backend para fornecermos uma experiência concisa tanto para o desenvolvedor quanto para o usuário.

LICENÇA

Leia o arquivo LICENSE.

Dependências

Segue as dependências do projeto:

Instalação

  • Clone o projeto rodando:
    git clone [email protected]:matrufsc2/matrufsc2.git && cd matrufsc2
  • Instale suas dependências:
    pip install -r requirements.txt
  • Precisamos instalar as dependências do frontend! Basta executar o seguinte comando para fazê-lo:
    cd frontend && npm install && npm run-script build
  • Rode o seguinte comando:
    <caminho para a SDK do Google>/dev_appserver.py .

Pronto! O Servidor estará em execução no endereço http://127.0.0.1:8080/

matrufsc2's People

Contributors

ramiropolla avatar fjorgemota avatar paladini avatar

Stargazers

jayypluss avatar  avatar Barichello avatar Lucas da Costa avatar Caique Marques avatar  avatar  avatar

Watchers

 avatar James Cloos avatar  avatar

Forkers

gitter-badger

matrufsc2's Issues

Create tests

The Python Code is actually not tested.

We need to create some tests using GAE API to mock what I need. See https://developers.google.com/appengine/docs/python/tools/localunittesting for reference. =)

--- Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/3760734-create-tests?utm_campaign=plugin&utm_content=tracker%2F844700&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F844700&utm_medium=issues&utm_source=github).

Lista de disciplinas desatualizada

Olá,

Hoje as matrículas para a graduação foram abertas, mas não consigo encontrar praticamente nenhuma disciplina do curso de licenciatura em química, exceto Organizacao Escolar (EED5187).

Código de disciplinas que testei e não se encontram na lista:

  • PSI5137;
  • MEN5601;
  • MEN7007;
  • QMC5504;
  • QMC5506;
  • MEN7045;
  • QMC5505;
  • QMC5507;
  • MEN7046;
  • QMC5508;
  • QMC5513;
  • LSB7904;
  • MEN7047;
  • QMC5509;
  • QMC5514.

Abraços,
Felipe

Fix issue related to conflicting disciplines

When adding two disciplines that conflicts in all the teams (suppose that 2 disciplines have 2 teams each and that the 4 teams share a schedule between it, it's that case), all the teams are....hidden. We need to fix this, alerting the user about the conflict.

A case where this occurs is adding "Programação Concorrente" and "Probabilidade e Estatistica" using campus FLO in semester 2015-1.

OverQuotaError: The API call datastore_v3.RunQuery() required more quota than is available.

View details in Rollbar: https://rollbar.com/fjorgemota/MatrUFSC2/items/88/

Traceback (most recent call last):
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/matrufsc2.py", line 290, in update
    return fut.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
    self.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/robot/robot.py", line 621, in run
    response = yield self.run_worker(params)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 371, in _help_tasklet_along
    value = gen.send(val)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/robot/robot.py", line 418, in run_worker
    self.check_cache_existence(campus, semester)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/robot/cache_helper.py", line 77, in check_cache_existence
    first_discipline_key = Discipline.query().get(keys_only=True)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/query.py", line 1222, in get
    return self.get_async(**q_options).get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
    self.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/query.py", line 1235, in _get_async
    res = yield self.fetch_async(1, **q_options)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/query.py", line 964, in _run_to_list
    batch = yield rpc
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 454, in _on_rpc_completion
    result = rpc.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_query.py", line 2973, in __query_result_hook
    self._batch_shared.conn.check_rpc_success(rpc)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 1340, in check_rpc_success
    rpc.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 579, in check_success
    self.__rpc.CheckSuccess()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 134, in CheckSuccess
    raise self.exception
OverQuotaError: The API call datastore_v3.RunQuery() required more quota than is available.

OverQuotaError: The API call datastore_v3.Get() required more quota than is available.

View details in Rollbar: https://rollbar.com/fjorgemota/MatrUFSC2/items/87/

Traceback (most recent call last):
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/gaenv_lib/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/matrufsc2.py", line 290, in update
    return fut.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
    self.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/robot/robot.py", line 621, in run
    response = yield self.run_worker(params)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 371, in _help_tasklet_along
    value = gen.send(val)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/robot/robot.py", line 418, in run_worker
    self.check_cache_existence(campus, semester)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/robot/cache_helper.py", line 104, in check_cache_existence
    }, index=True, overwrite=True)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/decorators.py", line 144, in dec
    items = json.loads(json.dumps(items, cls=JSONEncoder, separators=(',', ':')))
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/json/__init__.py", line 250, in dumps
    sort_keys=sort_keys, **kw).encode(obj)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/json_serializer.py", line 19, in default_encoder
    return obj.to_json()
  File "/base/data/home/apps/s~matrufsc2/robot:1.382570336306801549/app/models.py", line 70, in to_json
    "teachers": ndb.get_multi(self.teachers)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 3849, in get_multi
    for future in get_multi_async(keys, **ctx_options)]
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
    self.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/context.py", line 744, in get
    entity = yield self._get_batcher.add_once(key, options)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/context.py", line 329, in _get_tasklet
    entities = yield self._conn.async_get(options, datastore_keys)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 454, in _on_rpc_completion
    result = rpc.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 899, in get_result
    results = self.__rpcs[0].get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 1609, in __get_hook
    self.check_rpc_success(rpc)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 1340, in check_rpc_success
    rpc.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 579, in check_success
    self.__rpc.CheckSuccess()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 134, in CheckSuccess
    raise self.exception
OverQuotaError: The API call datastore_v3.Get() required more quota than is available.

Fix crawler

The crawler is actually not indexing disciplines and teams. We need to fix them to allow the publishing of the MatrUFSC2 to Google App Engine.

Exception: hi

View details in Rollbar: https://rollbar.com/fjorgemota/MatrUFSC2/items/85/

Traceback (most recent call last):
  File "/home/fernando/matrufsc2/matrufsc2/gaenv_lib/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/fernando/matrufsc2/matrufsc2/gaenv_lib/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/fernando/matrufsc2/matrufsc2/gaenv_lib/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/fernando/matrufsc2/matrufsc2/gaenv_lib/flask/app.py", line 1473, in full_dispatch_request
    rv = self.preprocess_request()
  File "/home/fernando/matrufsc2/matrufsc2/gaenv_lib/flask/app.py", line 1666, in preprocess_request
    rv = func()
  File "/home/fernando/matrufsc2/matrufsc2/matrufsc2.py", line 72, in return_cached
    raise Exception("hi")
Exception: hi

TypeError: 'NoneType' object has no attribute '__getitem__'

View details in Rollbar: https://rollbar.com/fjorgemota/MatrUFSC2/items/89/

Traceback (most recent call last):
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/gaenv_lib/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/gaenv_lib/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/gaenv_lib/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/gaenv_lib/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/gaenv_lib/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/matrufsc2.py", line 290, in update
    return fut.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
    self.check_success()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/app/robot/robot.py", line 629, in run
    response = yield self.run_worker(params)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 371, in _help_tasklet_along
    value = gen.send(val)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/app/robot/robot.py", line 419, in run_worker
    self.check_cache_existence(teams_to_process[0], campus, semester)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/app/robot/cache_helper.py", line 111, in check_cache_existence
    }, index=True, overwrite=True)
  File "/base/data/home/apps/s~matrufsc2/robot:1.382582848262264597/app/decorators.py", line 154, in dec
    item["id"] = item["id"].replace(prefix, "")
TypeError: 'NoneType' object has no attribute '__getitem__'

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.