Gentoo Archives: gentoo-commits

From: Slava Bacherikov <slava@××××××××××××××.ua>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/
Date: Tue, 29 May 2012 12:24:54
Message-Id: 1338275028.14341591e6b6bc0d6699ba81ddea8cf26df45384.bacher09@gentoo
1 commit: 14341591e6b6bc0d6699ba81ddea8cf26df45384
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Tue May 29 07:03:48 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Tue May 29 07:03:48 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=14341591
7
8 Add get_or_create for EbuildModel
9
10 ---
11 gpackages/apps/packages/managers.py | 50 +++++++++++++++++++++++++----------
12 gpackages/apps/packages/models.py | 12 ++++++++
13 2 files changed, 48 insertions(+), 14 deletions(-)
14
15 diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
16 index ec3a55b..2d01508 100644
17 --- a/gpackages/apps/packages/managers.py
18 +++ b/gpackages/apps/packages/managers.py
19 @@ -4,21 +4,20 @@ import packages.models
20
21
22 class PackageMixin(object):
23 - def get_or_create(self, **kwargs):
24 - if 'package' in kwargs:
25 - po = kwargs['package']
26 - if isinstance(po, Package):
27 - del kwargs['package']
28 - if 'category' not in kwargs:
29 - co, created = packages.models.CategoryModel. \
30 - objects.get_or_create(category = po.category)
31 - kwargs.update({'category': co})
32 -
33 - kwargs.update({'name': po.name})
34 + def get(self, package = None, *args, **kwargs):
35 + if package is not None and isinstance(package, Package):
36 + try:
37 + category = packages.models.CategoryModel.objects.get(category = package.category)
38 + except packages.models.CategoryModel.DoesNotExist:
39 + raise self.model.DoesNotExist
40 + name = package.name
41 + if len(args)>=1:
42 + args[0] = name
43 + if len(args)>=2:
44 + args[1] = category
45 else:
46 - raise ValueError("Bad package object")
47 -
48 - return super(PackageMixin, self).get_or_create(**kwargs)
49 + kwargs.update({'name': name, 'category': category})
50 + return super(PackageMixin, self).get(*args, **kwargs)
51
52 class PackageQuerySet(PackageMixin, models.query.QuerySet):
53 pass
54 @@ -45,3 +44,26 @@ class KeywordQuerySet(KeywordMixin, models.query.QuerySet):
55 class KeywordManager(KeywordMixin, models.Manager):
56 def get_query_set(self):
57 return KeywordQuerySet(self.model, using=self._db)
58 +
59 +
60 +class EbuildMixin(object):
61 + def get(self, ebuild=None, *args, **kwargs):
62 + if ebuild is not None and isinstance(ebuild, Ebuild):
63 + try:
64 + package = packages.models.PackageModel.objects.get(package = ebuild.package)
65 + except packages.models.PackageModel.DoesNotExist:
66 + raise self.model.DoesNotExist
67 + version = ebuild.version
68 + revision = ebuild.revision
69 + kwargs.update({ 'version': version,
70 + 'revision': revision,
71 + 'package': package })
72 + return super(EbuildMixin, self).get(*args, **kwargs)
73 +
74 +
75 +class EbuildQuerySet(EbuildMixin, models.query.QuerySet):
76 + pass
77 +
78 +class EbuildManager(EbuildMixin, models.Manager):
79 + def get_query_set(self):
80 + return EbuildQuerySet(self.model, using=self._db)
81
82 diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
83 index e64fcc1..313e77c 100644
84 --- a/gpackages/apps/packages/models.py
85 +++ b/gpackages/apps/packages/models.py
86 @@ -106,6 +106,18 @@ class EbuildModel(models.Model):
87
88 homepage = models.URLField()
89 description = models.TextField(blank = True, null = True)
90 +
91 + objects = managers.EbuildManager()
92 +
93 + def __init__(self, *args, **kwargs ):
94 + # TODO: Bug fix
95 + ebuild = None
96 + if 'ebuild' in kwargs:
97 + ebuild = kwargs['ebuild']
98 + del kwargs['ebuild']
99 + super(EbuildModel, self).__init__(*args, **kwargs)
100 + if ebuild is not None and isinstance(ebuild, Ebuild):
101 + self.init_with_keywords(ebuild)
102
103 def __unicode__(self):
104 return '%s-%s' % (self.package, self.version)