============
Django Tsugi
============

This is the emerging Tsugi library for Django - https://www.tsugi.org

https://pypi.org/project/django-tsugi/

Quick start
-----------

1.  Install

        pip install django-tsugi    # or pip3

2. Add "django_tsugi" to your INSTALLED_APPS and add the keyset url for your
   controlling server in `settings.py` like this::

        INSTALLED_APPS = [
            ...
            'django_tsugi',
        ]

        # To set up Tsugi
        TSUGI_KEYSET = "https://dev1.tsugicloud.org/tsugi/lti/keyset-ext";

3. Add a line to your application's `urls.py` file to handle launches and
   tell Tsugi which view to redirect to after the launch is successful::

        from . import views
        from django_tsugi.views import LaunchView

        urlpatterns = [
            path('', views.GradeView.as_view(), name='grade' ),
            path('launch', LaunchView.as_view(), {'success_url' : 'grade'} ),
        ]

4. Add the TsugiMixin to your class based view and it will define
   the `request.tsugi` variable with the user, context, and link
   information::

       from django.views import View
       from django_tsugi.mixins import TsugiMixin

       class GradeView(TsugiMixin, View):

        def get(self, request) :
            context = {'tsugi': request.tsugi}
            return render(request, 'grade/main.html', context)

       def post(self, request) :
            grade = float(request.POST.get('grade'))
            comment = request.POST.get('comment')

            retval = request.tsugi.result.gradeSend(grade, comment)
            context = {'tsugi': request.tsugi, 'retval' : retval}
            return render(request, 'grade/done.html', context)

Revising and testing locally
----------------------------

If you are running your Django tool locally and Tsugi locally, you
can use the following in `settings.py`::

    TSUGI_KEYSET = "http://localhost:8888/tsugi/lti/keyset-ext";

If you are working on a new version of this library with a django
tsugi app, you can release a new version locally with::

    python3 setup.py sdist ;  pip3 install dist/*.tar.gz


Releasing to pypi.org
---------------------

This library is released to https://pypi.org/project/django-tsugi/

You need `twine` to push changes to pypi::

    pip3 install twine           # If needed
    pip install --upgrade twine  # If needed
    pip3 install twine==1.12.1   # If needed since later twines mess up

To release a whole new version, update the version in `setup.py` and then::

    rm dist/* ; python3 setup.py sdist ; twine check dist/*

    twine upload dist/*

You cannot upload the same version number twice.


References
----------

[1] How to write reusable apps - https://docs.djangoproject.com/en/2.2/intro/reusable-apps/

[2] Tutorial on Packaging and Distributing Projects - https://packaging.python.org/tutorials/packaging-projects/

[3] https://pypi.org/ - https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives

