~launchpad-pqm/launchpad/devel

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
66
67
68
69
70
71
72
73
74
# Copyright 2009 Canonical Ltd.  This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).

# pylint: disable-msg=E0611,W0212

"""Language pack store."""

__metaclass__ = type

__all__ = [
    'LanguagePack',
    'LanguagePackSet',
    ]

from sqlobject import ForeignKey
from zope.interface import implements

from canonical.database.constants import UTC_NOW
from canonical.database.datetimecol import UtcDateTimeCol
from canonical.database.enumcol import EnumCol
from canonical.database.sqlbase import (
    SQLBase,
    sqlvalues,
    )
from lp.translations.enums import LanguagePackType
from lp.translations.interfaces.languagepack import (
    ILanguagePack,
    ILanguagePackSet,
    )


class LanguagePack(SQLBase):
    implements(ILanguagePack)

    _table = 'LanguagePack'

    file = ForeignKey(
        foreignKey='LibraryFileAlias', dbName='file', notNull=True)

    date_exported = UtcDateTimeCol(notNull=True, default=UTC_NOW)

    distroseries = ForeignKey(
        foreignKey='DistroSeries', dbName='distroseries', notNull=True)

    type = EnumCol(
        enum=LanguagePackType, notNull=True, default=LanguagePackType.FULL)

    updates = ForeignKey(
        foreignKey='LanguagePack', dbName='updates',
        notNull=False, default=None)


class LanguagePackSet:
    implements(ILanguagePackSet)

    def addLanguagePack(self, distroseries, file_alias, type):
        """See `ILanguagePackSet`."""
        assert type in LanguagePackType, (
            'Unknown language pack type: %s' % type.name)

        if (type == LanguagePackType.DELTA and
            distroseries.language_pack_base is None):
            raise AssertionError(
                "There is no base language pack available for %s's %s to get"
                " deltas from." % sqlvalues(
                    distroseries.distribution.name, distroseries.name))

        updates = None
        if type == LanguagePackType.DELTA:
            updates = distroseries.language_pack_base

        return LanguagePack(
            file=file_alias, date_exported=UTC_NOW, distroseries=distroseries,
            type=type, updates=updates)