Git Product home page Git Product logo

interactive-syllabus's People

Contributors

alexandredubray avatar anthonygego avatar francoismichel avatar mpiraux avatar rodescamps avatar tdba avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

interactive-syllabus's Issues

Normal user useless in database

The only purpose of the current database is to store users that have special right. In our case, with SAML2 we do not need to store normal user (~700 users this year, could be the same or more each year). We could split the current database into a table for "normal" user table (empty in our case, but other use case might need it) and a "special" user table.

We also need to think how special user are added in the database

Hide/delete page via the admin panel

Currently, we can delete file via the admin panel and check the box "Also delete the files related to this content on the file system.". However I do not see a way to re-add a file that already exists to the syllabus, is there one ?

Also I think that we should have two options for "removing" a file from the syllabus:

  1. Removing it definitely, which mean that it is not kept on the file system
  2. Hide it, which only remove it from the syllabus (but it would still be shown in the admin panel)

Remove username from User model

When a user email is changed in the external directory (SAML auth method), its username remains the same.

The app looks for an account based on the email:

user = User.query.filter(User.email == email).one()

and this choice makes sense to avoid account hijacking as the local account method can also populate the username field.

However, if the acocunt is not found, it is created in database with the provider username, which is also the primary key of the User table:

try:
# we only log-in using the e-mail
user = User.query.filter(User.email == email).one()
except NoResultFound:
# The user does not exist in our DB
user = User(name=username, full_name=realname, email=email, hash_password=None,
change_password_url=None)
db_session.add(user)
db_session.commit()

Therefore, the app emits a request that will end up with a unicity error.

Different methods are possible to fix this issue:

  1. Let the new user choose its username in all cases (local registration or SAML login) before using its account.
  2. Remove the username from the User model and only relies on the user email as unique identifier.
  3. Bind external identifiers to a local account.

Usernames are actually no more used for the application logic (as email is used as LTI identifier) and option 2 seems therefore the most intuitive change for both end-users and developers, even if option 1 requires less maintenance to migrate existing deployments. Option 3 is probably of limited interest in our specific case.

Too many points in multiple answers/multiple choice questions

Dans le chapitre 6 (accessible chez https://github.com/ALambot/java-syllabus-pages/blob/master/pages/CH6_tableaux/qcm.rst), il y a 15 questions mais plusieurs choix par questions. Du coup, sans avoir tout correct, il y a moyen d'avoir des 25/15 sans avoir répondu à tout et sans avoir nécessairement juste. Il faudra retravailler ça dans l'intégration INGInious (un point si toutes les bonnes réponses, ou alors un point par bonne réponse et du coup avoir un total qui est plus grand que le nombre de questions).

Support for LTI 1.3

This is quite a hard question, whether:

  • to support LTI1.3 (and I think supporting other platforms in this case should be nice)
  • to merge both apps during the same process

Missing requirements

I ran pip3 install and it fails with the following message:

$ sudo pip3 install .
[sudo] password for jadinm: 
The directory '/home/jadinm/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/jadinm/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Processing /home/jadinm/repositories/courses/LSINF1252/interactive-syllabus
Requirement already satisfied: pyyaml>=3.12 in /usr/lib/python3/dist-packages (from interactive-syllabus==0.1.0)
Collecting werkzeug>=0.11.11 (from interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/24/4d/2fc4e872fbaaf44cc3fd5a9cd42fda7e57c031f08e28c9f35689e8b43198/Werkzeug-0.15.1-py2.py3-none-any.whl (328kB)
    100% |████████████████████████████████| 337kB 1.8MB/s 
Requirement already satisfied: pygments>=2.1.3 in /usr/lib/python3/dist-packages (from interactive-syllabus==0.1.0)
Collecting flask>=0.12 (from interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB)
    100% |████████████████████████████████| 92kB 3.4MB/s 
Requirement already satisfied: docutils>=0.13.1 in /usr/lib/python3/dist-packages (from interactive-syllabus==0.1.0)
Collecting lti (from interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/a6/ad/f4f9819fd5c87ef31176f6a5b626651dfd21857406bea0b15733c8e787c9/lti-0.9.4-py2.py3-none-any.whl
Collecting flask-sqlalchemy>=2.3.2 (from interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/a1/44/294fb7f6bf49cc7224417cd0637018db9fee0729b4fe166e43e2bbb1f1c8/Flask_SQLAlchemy-2.3.2-py2.py3-none-any.whl
Collecting sqlalchemy (from interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/85/29/d7a5687d0d21ea8133f2d4ef02dfb4d191afe7ebc8bd9f962d99bdf595e1/SQLAlchemy-1.3.1.tar.gz (5.9MB)
    100% |████████████████████████████████| 5.9MB 220kB/s 
Collecting python3-saml (from interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/06/57/bc44da351726edee332a9506309127293fb640bbad55aa29d71b73655849/python3_saml-1.5.0-py3-none-any.whl (72kB)
    100% |████████████████████████████████| 81kB 1.3MB/s 
Collecting GitPython (from interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/fe/e5/fafe827507644c32d6dc553a1c435cdf882e0c28918a5bab29f7fbebfb70/GitPython-2.1.11-py2.py3-none-any.whl (448kB)
    100% |████████████████████████████████| 450kB 2.9MB/s 
Requirement already satisfied: click>=5.1 in /usr/lib/python3/dist-packages (from flask>=0.12->interactive-syllabus==0.1.0)
Collecting itsdangerous>=0.24 (from flask>=0.12->interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Requirement already satisfied: Jinja2>=2.10 in /usr/lib/python3/dist-packages (from flask>=0.12->interactive-syllabus==0.1.0)
Requirement already satisfied: oauthlib in /usr/lib/python3/dist-packages (from lti->interactive-syllabus==0.1.0)
Requirement already satisfied: lxml in /usr/lib/python3/dist-packages (from lti->interactive-syllabus==0.1.0)
Collecting requests-oauthlib (from lti->interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/c2/e2/9fd03d55ffb70fe51f587f20bcf407a6927eb121de86928b34d162f0b1ac/requests_oauthlib-1.2.0-py2.py3-none-any.whl
Collecting defusedxml==0.5.0 (from python3-saml->interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/87/1c/17f3e3935a913dfe2a5ca85fa5ccbef366bfd82eb318b1f75dadbf0affca/defusedxml-0.5.0-py2.py3-none-any.whl
Collecting isodate>=0.5.0 (from python3-saml->interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/9b/9f/b36f7774ff5ea8e428fdcfc4bb332c39ee5b9362ddd3d40d9516a55221b2/isodate-0.6.0-py2.py3-none-any.whl (45kB)
    100% |████████████████████████████████| 51kB 2.6MB/s 
Collecting xmlsec>=0.6.0 (from python3-saml->interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/35/42/d7cd323c91d4706f3cc32ffe7d5f851ab8ef9898ccb350f6ba593dd8b89a/xmlsec-1.3.3.tar.gz
Collecting gitdb2>=2.0.0 (from GitPython->interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/da/30/a407568aa8d8f25db817cf50121a958722f3fc5f87e3a6fba1f40c0633e3/gitdb2-2.0.5-py2.py3-none-any.whl (62kB)
    100% |████████████████████████████████| 71kB 1.7MB/s 
Requirement already satisfied: requests>=2.0.0 in /usr/lib/python3/dist-packages (from requests-oauthlib->lti->interactive-syllabus==0.1.0)
Requirement already satisfied: six in /usr/lib/python3/dist-packages (from isodate>=0.5.0->python3-saml->interactive-syllabus==0.1.0)
Collecting pkgconfig (from xmlsec>=0.6.0->python3-saml->interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/e1/8a/c205fad800317a59e8d218981a8a7a3a00ec69c7fd55eca58dd08e6b0a18/pkgconfig-1.4.0-py2.py3-none-any.whl
Collecting smmap2>=2.0.0 (from gitdb2>=2.0.0->GitPython->interactive-syllabus==0.1.0)
  Downloading https://files.pythonhosted.org/packages/55/d2/866d45e3a121ee15a1dc013824d58072fd5c7799c9c34d01378eb262ca8f/smmap2-2.0.5-py2.py3-none-any.whl
Installing collected packages: werkzeug, itsdangerous, flask, requests-oauthlib, lti, sqlalchemy, flask-sqlalchemy, defusedxml, isodate, pkgconfig, xmlsec, python3-saml, smmap2, gitdb2, GitPython, interactive-syllabus
  Running setup.py install for sqlalchemy ... done
  Running setup.py install for xmlsec ... error
    Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-l_4mby43/xmlsec/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-yt1qe0hm-record/install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_ext
    *********************************************************************************
    Could not find xmlsec1 config. Are libxmlsec1-dev and pkg-config installed?
    *********************************************************************************
    
    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-l_4mby43/xmlsec/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-yt1qe0hm-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-l_4mby43/xmlsec/

Documentation items for startup

  • For a sphinx project, the sphinx syllabus directory must be sphinx_pages/pages
  • session_secret_key - doc should say that it should be set
  • Documentation for sphinx configuration (source dir, build dir, conf dir,...)
  • How to force the recompilation of the syllabus sphinx
  • The URL for INGInious must be the exact one. So set "https://" and not "http://"
  • Set the LTI access on INGInious course administration + report keys to the configuration

Search tool

It would be nice to have a search tool to look for text in a syllabus pages

Admin panel modify ToC/configuration

I think it would be nice to have a "richer" interface for the modification of the configuration/ToC in the admin panel (especially for the configuration file which has a lot of things inside it).

For the ToC it might be something similar to the edition of the content (see #15 for the idea of hiding/deleting part of the syllabus,we would need to be linked between the ToC and the content).

For the configuration, I think that drop-down style sections with entries for each field + a little "help" or "what does this field actually do?" would be nice.

Printing the syllabus change the current HTML page

When printing all the syllabus, all pages the syllabus is rendered as an HTML file, then printed. But this changes the page on which the user was, I think it should not change the current state of the syllabus.

installation will soon fail

When installing interactive syllabus, I got the following error message

DEPRECATION: interactive-syllabus is being installed using the legacy 'setup.py install' method, because
it does not have a 'pyproject.toml' and the 'wheel' package is not installed. pip 23.1 will enforce this be
haviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at h
ttps://github.com/pypa/pip/issues/8559

[Feature request] Bouton individuel par (groupe) de QCM

Dans le cas du syllabus, on peut vouloir mettre une courte question à choix multiples après un bout de code, pour vérifier immédiatement que l'étudiant a compris le code (par exemple, la dernière ligne affichée, ou la valeur d'une variable en sortie de boucle). Pour le moment, il n'y a qu'un seul bouton "Vérifier" par page de QCM, ce qui oblige l'étudiant à scroller toute la page, et à vérifier tous les QCMs présents, dont ceux qu'il n'a pas encore fait.
Request : pouvoir mettre un bouton "Vérifier" par "groupe" de QCM.

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.