From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1SZ3Jc-00072n-C6 for garchives@archives.gentoo.org; Mon, 28 May 2012 17:01:08 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 92FD4E07FE; Mon, 28 May 2012 17:00:55 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 5688EE07FE for ; Mon, 28 May 2012 17:00:55 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 8C58C1B4070 for ; Mon, 28 May 2012 17:00:54 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 0F4B3E5438 for ; Mon, 28 May 2012 17:00:52 +0000 (UTC) From: "Slava Bacherikov" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Slava Bacherikov" Message-ID: <1338224443.1b0de88d6aff6c96dfa1e818bf3037a5dda07531.bacher09@gentoo> Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/ X-VCS-Repository: proj/gentoo-packages X-VCS-Files: gpackages/apps/packages/managers.py gpackages/apps/packages/models.py X-VCS-Directories: gpackages/apps/packages/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: 1b0de88d6aff6c96dfa1e818bf3037a5dda07531 X-VCS-Branch: master Date: Mon, 28 May 2012 17:00:52 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: 250ef4a2-013e-40ac-a36d-2c3bba43b082 X-Archives-Hash: d7ea879b3f775935503711940a092297 commit: 1b0de88d6aff6c96dfa1e818bf3037a5dda07531 Author: Slava Bacherikov bacher09 org> AuthorDate: Mon May 28 17:00:43 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Mon May 28 17:00:43 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoo-packag= es.git;a=3Dcommit;h=3D1b0de88d Add get_or_create to manager of PackageModel --- gpackages/apps/packages/managers.py | 28 ++++++++++++++++++++++++++++ gpackages/apps/packages/models.py | 5 +++++ 2 files changed, 33 insertions(+), 0 deletions(-) diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/package= s/managers.py new file mode 100644 index 0000000..f44ee34 --- /dev/null +++ b/gpackages/apps/packages/managers.py @@ -0,0 +1,28 @@ +from django.db import models +from porttree import Category, Package +import packages.models + + +class PackageMixin(object): + def get_or_create(self, **kwargs): + if 'package' in kwargs: + po =3D kwargs['package'] + if isinstance(po, Package): + del kwargs['package'] + if 'category' not in kwargs: + co, created =3D packages.models.CategoryModel. \ + objects.get_or_create(category =3D po.catego= ry) + kwargs.update({'category': co}) + =20 + kwargs.update({'name': po.name}) + else: + raise ValueError("Bad package object") + + return super(PackageMixin, self).get_or_create(**kwargs) + +class PackageQuerySet(PackageMixin, models.query.QuerySet): + pass + +class PackageManager(PackageMixin, models.Manager): + def get_query_set(self): + return PackageQuerySet(self.model, using=3Dself._db) diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/= models.py index a60f6ce..e51f62f 100644 --- a/gpackages/apps/packages/models.py +++ b/gpackages/apps/packages/models.py @@ -1,6 +1,7 @@ from django.db import models =20 from porttree import Category, Package +import managers =20 class ArchesModel(models.Model): name =3D models.CharField(max_length =3D 12) @@ -36,6 +37,7 @@ class CategoryModel(models.Model): class PackageModel(models.Model): def __init__(self, *args, **kwargs): # TODO: Bad code, maybe use some library to overload method + package_object =3D None if len(args)>=3D1: package_object =3D args[0]=20 =20 @@ -56,6 +58,9 @@ class PackageModel(models.Model): changelog_hash =3D models.CharField(max_length =3D 128) manifest_hash =3D models.CharField(max_length =3D 128) # Different versions can have different licenses, or homepages. + =20 + objects =3D managers.PackageManager() + def __unicode__(self): return '%s/%s' % (self.category, self.name) =20