Gentoo Logo
Gentoo Spaceship




Note: Due to technical difficulties, the Archives are currently not up to date. GMANE provides an alternative service for most mailing lists.
c.f. bug 424647
List Archive: gentoo-commits
Navigation:
Lists: gentoo-commits: < Prev By Thread Next > < Prev By Date Next >
Headers:
To: gentoo-commits@g.o
From: "Slava Bacherikov" <slava@...>
Subject: proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
Date: Sun, 3 Jun 2012 13:19:35 +0000 (UTC)
commit:     565c26d136ad4d149b0f069172b7d07011d594b3
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Jun  3 13:16:35 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Jun  3 13:16:35 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=565c26d1

Add herds and maintainers to scanning.

---
 .../packages/management/commands/scanpackages.py   |   78 ++++++++++++++-
 gpackages/apps/packages/models.py                  |  104 ++++++++++----------
 2 files changed, 129 insertions(+), 53 deletions(-)

diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 2968d65..b3adb97 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -1,6 +1,8 @@
 from django.core.management.base import BaseCommand, CommandError
 from packages import models
+from collections import defaultdict
 import porttree
+import herds
 
 import datetime
 import logging
@@ -77,6 +79,67 @@ def _get_items(items_list, Model, field_name, cache_var):
     return items_objects
     
 
+def scan_maintainers(maintainers_dict):
+    existend_maintainers = models.MaintainerModel.objects.all()
+    mo_dict = {}
+    to_del = []
+    for maintainer_object in existend_maintainers:
+        if maintainer_object in maintainers_dict:
+            # to update ?
+            mo_dict[maintainer_object.email] = maintainer_object
+        else:
+            to_del.append(maintainer_object.pk)
+
+    to_create = []
+    for maintainer in maintainers_dict.iterkeys():
+        if maintainer.email not in mo_dict:
+            to_create.append(maintainer)
+
+    mobjects = _create_objects(models.MaintainerModel, 'maintainer', to_create)
+    _update_cache_by_queryset(mo_dict, mobjects, 'email')
+
+    return mo_dict
+            
+
+def scan_herds():
+    existent_herds = models.HerdsModel.objects.all()
+    herds_object = herds.Herds()
+    herds_dict = herds_object.get_herds_indict()
+    maintainers_dict = herds_object.get_maintainers_with_hers()
+    ho_dict = {}
+    to_del = []
+    for herd_object in existent_herds:
+        if herd_object.name not in herds_dict:
+            to_del.append(herd_object.pk)
+        else:
+            # to update ?
+            ho_dict[herd_object.name] = herd_object
+
+    models.HerdsModel.objects.filter(pk__in = to_del).delete()
+
+    to_create = []
+    for herd in herds_dict.itervalues():
+        if herd.name not in ho_dict:
+            to_create.append(herd)
+
+    cobjects = _create_objects(models.HerdsModel, 'herd', to_create)
+    _update_cache_by_queryset(ho_dict, cobjects, 'name')
+
+    mo_dict = scan_maintainers(maintainers_dict)
+    #Gen data for relate with herds
+    res = defaultdict(list)
+    for mainteiner, herds_names in maintainers_dict.iteritems():
+       for herd in herds_names:
+           res[herd].append(mo_dict[mainteiner.email])
+
+    for herd_name, herd_object in ho_dict.iteritems():
+        herd_object.maintainers.clear()
+        herd_object.maintainers.add(*res[herd_name])
+
+    return ho_dict, mo_dict
+
+        
+
 class Command(BaseCommand):
     args = ''
     help = 'Will scan package tree and update info about it in database'
@@ -116,17 +179,28 @@ class Command(BaseCommand):
         def get_homepages_objects(ebuild):
             homepages = ebuild.homepages
             return _get_items(homepages, models.HomepageModel, 'url', homepages_cache)
+
         
         st = datetime.datetime.now()
+        herds_cache, maintainers_cache = scan_herds()
+        def get_herds_objects(package):
+            herds = package.metadata.herds()
+            herds_objects = []
+            for herd in herds:
+                if herd in herds_cache:
+                    herds_objects.append(herds_cache[herd])
+
+            return herds_objects
         # Load homepages to cache
-        for homepage in models.HomepageModel.objects.all():
-            homepages_cache[homepage.url] = homepage
+        #for homepage in models.HomepageModel.objects.all():
+            #homepages_cache[homepage.url] = homepage
 
         for category in self.porttree.iter_categories():
             category_object, categor_created = models.CategoryModel.objects.get_or_create(category = category)
             for package in category.iter_packages():
                 print package
                 package_object, package_created = models.PackageModel.objects.get_or_create(package = package, category = category_object)
+                package_object.herds.add(*get_herds_objects(package))
                 for ebuild in package.iter_ebuilds():
                     ebuild_object = models.EbuildModel()
                     ebuild_object.init_by_ebuild(ebuild)

diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 2ad8faa..d3ff5f6 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -42,6 +42,57 @@ class CategoryModel(models.Model):
     def __unicode__(self):
         return self.category
 
+class MaintainerModel(models.Model):
+
+    def __init__(self, *args, **kwargs):
+        #TODO: Bad code, maybe use some libraries for overload methods
+        maintainer = None
+        if 'maintainer' in kwargs:
+            maintainer = kwargs['maintainer']
+            del kwargs['maintainer']
+        super(MaintainerModel, self).__init__(*args, **kwargs)
+        if maintainer is not None:
+            self.init_by_maintainer(maintainer)
+        
+    name = models.CharField(max_length = 255, blank = True, null = True)
+    email = models.EmailField(unique = True)
+    role = models.TextField(blank = True, null = True)
+
+    objects = managers.MaintainerManager()
+
+    def init_by_maintainer(self, maintainer):
+        self.name = maintainer.name
+        self.email = maintainer.email
+        self.role = maintainer.role
+    
+    def __unicode__(self):
+        return ':'.join((unicode(self.name), self.email))
+
+class HerdsModel(models.Model):
+
+    def __init__(self, *args, **kwargs):
+        herd = None
+        if 'herd' in kwargs:
+            herd = kwargs['herd']
+            del kwargs['herd']
+        super(HerdsModel, self).__init__(*args, **kwargs)
+        if herd is not None:
+            self.init_by_herd(herd)
+
+    name = models.CharField(unique = True, max_length = 150)
+    email = models.EmailField()
+    description = models.TextField(blank = True, null = True)
+    maintainers = models.ManyToManyField(MaintainerModel, blank = True)
+
+    objects = managers.HerdsManager()
+
+    def init_by_herd(self, herd):
+        self.name = herd.name
+        self.email = herd.email
+        self.description = herd.description
+
+    def __unicode__(self):
+        return self.name
 
 class PackageModel(models.Model):
     def __init__(self, *args, **kwargs):
@@ -69,6 +120,8 @@ class PackageModel(models.Model):
     changelog_mtime = models.DateTimeField(blank = True, null = True)
     manifest_mtime = models.DateTimeField(blank = True, null = True)
     mtime = models.DateTimeField(blank = True, null = True)
+
+    herds = models.ManyToManyField(HerdsModel, blank = True)
     # Different versions can have different licenses, or homepages.
     
     objects = managers.PackageManager()
@@ -220,54 +273,3 @@ class Keyword(models.Model):
         unique_together = ('ebuild', 'arch')
 
 
-class MaintainerModel(models.Model):
-
-    def __init__(self, *args, **kwargs):
-        #TODO: Bad code, maybe use some libraries for overload methods
-        maintainer = None
-        if 'maintainer' in kwargs:
-            maintainer = kwargs['maintainer']
-            del kwargs['maintainer']
-        super(MaintainerModel, self).__init__(*args, **kwargs)
-        if maintainer is not None:
-            self.init_by_maintainer(maintainer)
-        
-    name = models.CharField(max_length = 255, blank = True, null = True)
-    email = models.EmailField(unique = True)
-    role = models.TextField(blank = True, null = True)
-
-    objects = managers.MaintainerManager()
-
-    def init_by_maintainer(self, maintainer):
-        self.name = maintainer.name
-        self.email = maintainer.email
-        self.role = maintainer.role
-    
-    def __unicode__(self):
-        return ':'.join((unicode(self.name), self.email))
-
-class HerdsModel(models.Model):
-
-    def __init__(self, *args, **kwargs):
-        herd = None
-        if 'herd' in kwargs:
-            herd = kwargs['herd']
-            del kwargs['herd']
-        super(HerdsModel, self).__init__(*args, **kwargs)
-        if herd is not None:
-            self.init_by_herd(herd)
-
-    name = models.CharField(unique = True, max_length = 150)
-    email = models.EmailField()
-    description = models.TextField(blank = True, null = True)
-    maintainers = models.ManyToManyField(MaintainerModel, blank = True)
-
-    objects = managers.HerdsManager()
-
-    def init_by_herd(self, herd):
-        self.name = herd.name
-        self.email = herd.email
-        self.description = herd.description
-
-    def __unicode__(self):
-        return self.name


Navigation:
Lists: gentoo-commits: < Prev By Thread Next > < Prev By Date Next >
Previous by thread:
proj/perl-overlay:master commit in: dev-perl/Module-CPANTS-Analyse/, dev-perl/CGI-Application-Plugin-Stash/, ...
Next by thread:
proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
Previous by date:
gentoo-x86 commit in x11-libs/libdrm/files: 2.4.18-0001-datatypes.patch
Next by date:
proj/gentoo-packages:master commit in: gpackages/libs/


Updated Jun 26, 2012

Summary: Archive of the gentoo-commits mailing list.

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.