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 1SZU4L-0000Jm-80 for garchives@archives.gentoo.org; Tue, 29 May 2012 21:35:09 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 55551E0796; Tue, 29 May 2012 21:34:52 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 13B6EE0796 for ; Tue, 29 May 2012 21:34:51 +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 514111B4025 for ; Tue, 29 May 2012 21:34:51 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 009A4E5434 for ; Tue, 29 May 2012 21:34:48 +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: <1338313068.b19a891069ed4b9bfa909e00501c47443e3710ff.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 X-VCS-Directories: gpackages/apps/packages/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: b19a891069ed4b9bfa909e00501c47443e3710ff X-VCS-Branch: master Date: Tue, 29 May 2012 21:34:48 +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: 7598b095-a3fd-40bc-86fd-79d307a20a3d X-Archives-Hash: 0e47b4889d12699756db1a576ecf1b67 commit: b19a891069ed4b9bfa909e00501c47443e3710ff Author: Slava Bacherikov bacher09 org> AuthorDate: Tue May 29 17:37:48 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Tue May 29 17:37:48 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoo-packag= es.git;a=3Dcommit;h=3Db19a8910 Extend manager. --- gpackages/apps/packages/managers.py | 40 +++++++++++++++++++++++++++++= +++++- 1 files changed, 39 insertions(+), 1 deletions(-) diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/package= s/managers.py index a9b514b..6e69007 100644 --- a/gpackages/apps/packages/managers.py +++ b/gpackages/apps/packages/managers.py @@ -1,4 +1,4 @@ -from django.db import models +from django.db import models, connections, router, transaction, Integrit= yError from porttree import Category, Package, Ebuild, Keyword import packages.models =20 @@ -46,6 +46,44 @@ KeywordQuerySet, KeywordManager =3D _gen_query_and_man= ager(KeywordMixin, 'KeywordManager'= ) =20 class EbuildMixin(object): + def create(self, **kwargs): + if 'ebuild' in kwargs: + obj =3D self.model(**kwargs) + else: + obj =3D super(EbuildMixin, self).create(**kwargs) + return obj + + def get_or_create(self, **kwargs): + assert kwargs, \ + 'get_or_create() must be passed at least one keyword arg= ument' + defaults =3D kwargs.pop('defaults', {}) + lookup =3D kwargs.copy() + for f in self.model._meta.fields: + if f.attname in lookup: + lookup[f.name] =3D lookup.pop(f.attname) + try: + self._for_write =3D True + return self.get(**lookup), False + except self.model.DoesNotExist: + try: + params =3D dict([(k, v) for k, v in kwargs.items() if '_= _' not in k]) + params.update(defaults) + obj =3D self.model(**params) + if 'ebuild' not in kwargs: + obj.save(force_insert=3DTrue, using=3Dself.db) + sid =3D transaction.savepoint(using=3Dself.db) + transaction.savepoint_commit(sid, using=3Dself.db) + return obj, True + except IntegrityError as e: + transaction.savepoint_rollback(sid, using=3Dself.db) + exc_info =3D sys.exc_info() + try: + return self.get(**lookup), False + except self.model.DoesNotExist: + # Re-raise the IntegrityError with its original trac= eback. + raise exc_info[1], None, exc_info[2] + =20 + =20 def get(self, ebuild=3DNone, *args, **kwargs): if ebuild is not None and isinstance(ebuild, Ebuild): try: