-
Notifications
You must be signed in to change notification settings - Fork 60
/
views.py
65 lines (55 loc) · 2.01 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from django.db import transaction
from django.shortcuts import render
from django.views import View
from wagtail.admin import messages
import requests
from .models import Grid, Package
def process(url="https://djangopackages.org/api/v4/grids/?q=wagtail"):
grid_data = requests.get(url).json()
for item in grid_data.get("results", []):
title = item.get("title", "")
if "wagtail" in title.lower():
defaults = {key: item[key] for key in ["title", "slug", "description"]}
grid, _ = Grid.objects.update_or_create(
uid=item.get("id"), defaults=defaults
)
for url in item.get("packages", []):
package_data = requests.get(url).json()
defaults = {
key: package_data[key]
for key in [
"title",
"slug",
"repo_url",
"pypi_version",
"repo_forks",
"repo_description",
"pypi_url",
"documentation_url",
"repo_watchers",
"participants",
]
if package_data[key] is not None
}
package, _ = Package.objects.update_or_create(
uid=package_data.get("id"), defaults=defaults
)
grid.packages.add(package)
url = grid_data.get("next")
if url:
process(url)
class IndexView(View):
http_method_names = ["get", "post"]
def post(self, request):
with transaction.atomic():
# Start fresh, remove all m2m's.
[grid.packages.clear() for grid in Grid.objects.all()]
process()
messages.success(request, "Success")
return self.get(request)
def get(self, request):
return render(
request,
"packages/index.html",
{},
)