summaryrefslogtreecommitdiff
path: root/pgweb/docs/struct.py
blob: 78c3f9331b6fb7bd65653fe981449a8df7c5a90d (plain)
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
from django.db import connection
from pgweb.core.models import Version


def get_struct():
    currentversion = Version.objects.get(current=True)

    # Can't use a model here, because we don't (for some reason) have a
    # hard link to the versions table here
    # Make sure we exclude the /devel/ docs because they are blocked by
    # robots.txt, and thus will cause tohusands of warnings in search
    # engines.
    curs = connection.cursor()
    curs.execute("SELECT d.version, d.file, v.docsloaded, v.testing FROM docs d INNER JOIN core_version v ON v.tree=d.version WHERE version > 0 ORDER BY d.version DESC")

    # Start priority is higher than average but lower than what we assign
    # to the current version of the docs.
    docprio = 0.8
    lastversion = None

    for version, filename, loaded, testing in curs.fetchall():
        # Decrease the priority with 0.1 for every version of the docs
        # we move back in time, until we reach 0.1. At 0.1 it's unlikely
        # to show up in a general search, but still possible to reach
        # through version specific searching for example.
        if lastversion != version:
            if docprio > 0.2:
                docprio -= 0.1
            lastversion = version

        if version >= 10:
            version = int(version)

        yield ('docs/%s/%s' % (version, filename),
               testing and 0.1 or docprio,  # beta/rc versions always get 0.1 in prio
               loaded)

        # Also yield the current version urls, with the highest
        # possible priority
        if version == currentversion.tree:
            yield ('docs/current/%s' % filename,
                   1.0, loaded)


# For our internal sitemap (used only by our own search engine),
# include the devel version of the docs (and only those, since the
# other versions are already included)
def get_internal_struct():
    curs = connection.cursor()
    curs.execute("SELECT d.file, v.docsloaded FROM docs d INNER JOIN core_version v ON v.tree=d.version WHERE version = 0")

    for filename, loaded in curs.fetchall():
        yield ('docs/devel/%s' % (filename, ),
               0.1,
               loaded)