• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tjcsl / tin / 17450891849

04 Sep 2025 01:49AM UTC coverage: 58.858% (+0.2%) from 58.654%
17450891849

Pull #92

github

web-flow
Merge 8c9f1d1d3 into 564991635
Pull Request #92: Allow choosing custom versions of python for graders

470 of 971 branches covered (48.4%)

Branch coverage included in aggregate %.

59 of 81 new or added lines in 12 files covered. (72.84%)

1 existing line in 1 file now uncovered.

1746 of 2794 relevant lines covered (62.49%)

0.62 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

41.18
/tin/apps/venvs/views.py
1
from __future__ import annotations
1✔
2

3
from django import http
1✔
4
from django.shortcuts import get_object_or_404, redirect, render
1✔
5

6
from ..assignments.models import Language
1✔
7
from ..auth.decorators import teacher_or_superuser_required
1✔
8
from .forms import VenvForm
1✔
9
from .models import Venv
1✔
10
from .tasks import create_venv, install_packages
1✔
11

12

13
# Create your views here.
14
@teacher_or_superuser_required
1✔
15
def index_view(request):
1✔
16
    """Show all venvs visible to a user
17

18
    Args:
19
        request: The request
20
    """
21
    venvs = Venv.objects.filter_visible(request.user)
×
22

23
    return render(
×
24
        request,
25
        "venvs/index.html",
26
        {
27
            "venvs_app": True,
28
            "venvs": venvs,
29
        },
30
    )
31

32

33
@teacher_or_superuser_required
1✔
34
def show_view(request, venv_id):
1✔
35
    """Show information about a venv
36

37
    Args:
38
        request: The request
39
        venv_id: The primary key of an instance of the :class:`.Venv` model
40
    """
41
    venv: Venv = get_object_or_404(Venv.objects.filter_visible(request.user), id=venv_id)
×
42

43
    return render(
×
44
        request,
45
        "venvs/show.html",
46
        {
47
            "venvs_app": True,
48
            "nav_item": venv.name,
49
            "venv": venv,
50
        },
51
    )
52

53

54
@teacher_or_superuser_required
1✔
55
def create_view(request):
1✔
56
    """Create a venv
57

58
    Args:
59
        request: The request
60
    """
61
    if request.method == "POST":
×
62
        form = VenvForm(request.POST)
×
63
        if form.is_valid():
×
64
            venv = form.save(commit=False)
×
65
            venv.fully_created = False
×
66
            venv.save()
×
67
            create_venv.delay(venv.id)
×
68
            return redirect("venvs:show", venv.id)
×
69
    else:
NEW
70
        form = VenvForm(initial={"language": Language.objects.filter(language="P").first()})
×
71
    return render(
×
72
        request,
73
        "venvs/edit_create.html",
74
        {
75
            "venvs_app": True,
76
            "nav_item": "Create virtual environment",
77
            "form": form,
78
        },
79
    )
80

81

82
@teacher_or_superuser_required
1✔
83
def edit_view(request, venv_id):
1✔
84
    """Edit a venv
85

86
    Args:
87
        request: The request
88
        venv_id: The primary key of an instance of the :class:`.Venv` model
89
    """
90
    venv = get_object_or_404(Venv.objects.filter_editable(request.user), id=venv_id)
×
91

92
    if request.method == "POST":
×
93
        form = VenvForm(data=request.POST, instance=venv)
×
94
        if form.is_valid():
×
95
            venv = form.save()
×
96
            return redirect("venvs:show", venv.id)
×
97
    else:
98
        form = VenvForm(instance=venv)
×
99

100
    return render(
×
101
        request,
102
        "courses/edit_create.html",
103
        {
104
            "venvs_app": True,
105
            "nav_item": "Edit",
106
            "venv": venv,
107
            "form": form,
108
        },
109
    )
110

111

112
@teacher_or_superuser_required
1✔
113
def install_packages_view(request, venv_id):
1✔
114
    """Install packages in a venv
115

116
    Args:
117
        request: The request
118
        venv_id: The primary key of an instance of the :class:`.Venv` model
119
    """
120
    if request.method == "POST":
×
121
        venv = get_object_or_404(
×
122
            Venv.objects.filter_editable(request.user), id=venv_id, installing_packages=False
123
        )
124

125
        venv.installing_packages = True
×
126
        venv.save()
×
127

128
        packages = list(filter(bool, request.POST.getlist("packages[]")))
×
129

130
        install_packages.delay(venv.id, packages)
×
131

132
        return redirect("venvs:show", venv.id)
×
133

134
    raise http.Http404
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc