* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-01 21:28 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-01 21:28 UTC (permalink / raw
To: gentoo-commits
commit: ed0c2e1d641fad2209cec912be2ac3359b0625d2
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Fri Jun 1 20:26:39 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Fri Jun 1 20:26:39 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=ed0c2e1d
Normalize homepages
---
.../packages/management/commands/scanpackages.py | 18 ++++++++++------
gpackages/apps/packages/models.py | 21 +++++++++++++++----
2 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 133f886..cbf8f66 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -113,7 +113,10 @@ class Command(BaseCommand):
homepages_cache = {}
-
+ def get_homepages_objects(ebuild):
+ homepages = ebuild.homepages
+ return _get_items(homepages, models.HomepageModel, 'url', homepages_cache)
+
st = datetime.datetime.now()
# Load homepages to cache
for homepage in models.HomepageModel.objects.all():
@@ -133,13 +136,14 @@ class Command(BaseCommand):
# Add licenses
ebuild_object.licenses.add(*get_licenses_objects(ebuild))
ebuild_object.use_flags.add(*get_uses_objects(ebuild))
+ ebuild_object.homepages.add(*get_homepages_objects(ebuild))
get_keywords_objects(ebuild, ebuild_object)
- homepages_list = []
- for homepage in ebuild.homepages:
- homepage_object = models.HomepageModel(url = homepage,
- ebuild = ebuild_object)
- homepages_list.append(homepage_object)
- models.HomepageModel.objects.bulk_create(homepages_list)
+ #homepages_list = []
+ #for homepage in ebuild.homepages:
+ #homepage_object = models.HomepageModel(url = homepage,
+ #ebuild = ebuild_object)
+ #homepages_list.append(homepage_object)
+ #models.HomepageModel.objects.bulk_create(homepages_list)
print (datetime.datetime.now() - st).total_seconds()
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 9da855f..d90bbb0 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -3,6 +3,12 @@ from django.db import models
from porttree import Category, Package, Ebuild
import managers
+class HomepageModel(models.Model):
+ url = models.URLField(max_length=255, unique = True)
+
+ def __unicode__(self):
+ return self.url
+
class ArchesModel(models.Model):
name = models.CharField(unique = True, max_length = 22)
@@ -118,6 +124,7 @@ class EbuildModel(models.Model):
is_masked = models.BooleanField(default = False)
#homepage = models.URLField(blank = True, null = True, max_length=255)
+ homepages = models.ManyToManyField(HomepageModel, blank = True)
description = models.TextField(blank = True, null = True)
objects = managers.EbuildManager()
@@ -213,10 +220,14 @@ class Keyword(models.Model):
unique_together = ('ebuild', 'arch')
-class HomepageModel(models.Model):
- url = models.URLField(max_length=255)
- ebuild = models.ForeignKey(EbuildModel)
+class MaintainerModel(models.Model):
+ name = models.CharField( unique = True, max_length = 255)
+ email = models.EmailField()
+ role = models.TextField(blank = True, null = True)
- def __unicode__(self):
- return self.url
+class HerdsModel(models.Model):
+ name = models.CharField(unique = True, max_length = 150)
+ email = models.EmailField()
+ description = models.TextField(blank = True, null = True)
+ maintainers = models.ManyToManyField(MaintainerModel, blank = True)
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-03 13:19 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-03 13:19 UTC (permalink / raw
To: gentoo-commits
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
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-03 16:19 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-03 16:19 UTC (permalink / raw
To: gentoo-commits
commit: f7fc2cca4d2f549b2a4bbd19bc9ec8be49c09ba9
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Jun 3 16:19:05 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Jun 3 16:19:05 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=f7fc2cca
Add more info about ebuild metadata.
---
.../packages/management/commands/scanpackages.py | 18 +++++++++++++++++-
gpackages/apps/packages/models.py | 6 ++++++
2 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index b3adb97..f63f0d0 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -174,7 +174,6 @@ class Command(BaseCommand):
models.Keyword.objects.bulk_create(keywords_list)
-
homepages_cache = {}
def get_homepages_objects(ebuild):
homepages = ebuild.homepages
@@ -183,6 +182,22 @@ class Command(BaseCommand):
st = datetime.datetime.now()
herds_cache, maintainers_cache = scan_herds()
+ def get_maintainers_objects(package):
+ maintainers = package.metadata.maintainers()
+ objects = []
+ for maintainer in maintainers:
+ if maintainer.email in maintainers_cache:
+ objects.append(maintainers_cache[maintainer.email])
+ else:
+ maintainer_object, created = models.MaintainerModel \
+ .objects.get_or_create(email = maintainer.email)
+ if created:
+ maintainer_object.name = maintainer.name
+ maintainer_object.save()
+ objects.append(maintainer_object)
+ return objects
+
+
def get_herds_objects(package):
herds = package.metadata.herds()
herds_objects = []
@@ -201,6 +216,7 @@ class Command(BaseCommand):
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))
+ package_object.maintainers.add(*get_maintainers_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 d3ff5f6..0fc1dc0 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -122,6 +122,7 @@ class PackageModel(models.Model):
mtime = models.DateTimeField(blank = True, null = True)
herds = models.ManyToManyField(HerdsModel, blank = True)
+ maintainers = models.ManyToManyField(MaintainerModel, blank = True)
# Different versions can have different licenses, or homepages.
objects = managers.PackageManager()
@@ -180,6 +181,11 @@ class EbuildModel(models.Model):
homepages = models.ManyToManyField(HomepageModel, blank = True)
description = models.TextField(blank = True, null = True)
+ eapi = models.PositiveSmallIntegerField(default = 0)
+ slot = models.PositiveSmallIntegerField(default = 0)
+
+
+
objects = managers.EbuildManager()
def __init__(self, *args, **kwargs ):
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-04 20:09 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-04 20:09 UTC (permalink / raw
To: gentoo-commits
commit: 7e5f0b70b12ba1dcb0eae128728b418d09bce040
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Jun 4 17:10:09 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Jun 4 17:10:09 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=7e5f0b70
Updating maintainers info if it is changed
---
.../packages/management/commands/scanpackages.py | 7 ++++++-
gpackages/apps/packages/models.py | 7 +++++++
2 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 2fe93e2..58e12ba 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -85,7 +85,12 @@ def scan_maintainers(maintainers_dict):
to_del = []
for maintainer_object in existend_maintainers:
if maintainer_object in maintainers_dict:
- # to update ?
+ maintainer_cmp = maintainers_dict[maintainer_object]
+ # need update ?
+ if maintainer_object.check_or_need_update(maintainer_cmp):
+ # updating
+ maintainer_object.update_by_maintainer(maintainer_cmp)
+ maintainer_object.save(force_update = True)
mo_dict[maintainer_object.email] = maintainer_object
else:
to_del.append(maintainer_object.pk)
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 6b2fc1b..81ac823 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -64,6 +64,13 @@ class MaintainerModel(models.Model):
self.name = maintainer.name
self.email = maintainer.email
self.role = maintainer.role
+
+ def update_by_maintainer(self, maintainer):
+ self.name = maintainer.name
+
+ def check_or_need_update(self, maintainer):
+ return not (self.name == maintainer.name and \
+ self.email == maintainer.email)
def __unicode__(self):
return ':'.join((unicode(self.name), self.email))
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-04 20:09 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-04 20:09 UTC (permalink / raw
To: gentoo-commits
commit: 0d89ed82a1d69ca7bc5b7796fb3260c50798263f
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Jun 4 17:02:20 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Jun 4 17:02:20 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=0d89ed82
Add updating herds if some data changed.
---
.../packages/management/commands/scanpackages.py | 7 ++++++-
gpackages/apps/packages/models.py | 8 ++++++++
2 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 364bd5f..2fe93e2 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -112,7 +112,12 @@ def scan_herds():
if herd_object.name not in herds_dict:
to_del.append(herd_object.pk)
else:
- # to update ?
+ herd_cmp = herds_dict[herd_object.name]
+ # need update ?
+ if herd_object.check_or_need_update(herd_cmp):
+ # updating
+ herd_object.update_by_herd(herd_cmp)
+ herd_object.save(force_update = True)
ho_dict[herd_object.name] = herd_object
models.HerdsModel.objects.filter(pk__in = to_del).delete()
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index cf1cf1b..6b2fc1b 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -88,9 +88,17 @@ class HerdsModel(models.Model):
def init_by_herd(self, herd):
self.name = herd.name
+ self.update_by_herd(herd)
+
+ def update_by_herd(self, herd):
self.email = herd.email
self.description = herd.description
+ def check_or_need_update(self, herd):
+ return not (self.name == herd.name and \
+ self.email == herd.email and \
+ self.description == herd.description)
+
def __unicode__(self):
return self.name
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-04 20:09 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-04 20:09 UTC (permalink / raw
To: gentoo-commits
commit: 1cb21de9787358ecb667a324bca1b0f441af6628
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Jun 4 19:44:02 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Jun 4 19:44:02 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=1cb21de9
Add scaning uses info.
---
.../packages/management/commands/scanpackages.py | 55 +++++++++++++++++++-
gpackages/apps/packages/managers.py | 3 +
2 files changed, 57 insertions(+), 1 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 58e12ba..0c875c1 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -3,6 +3,7 @@ from packages import models
from collections import defaultdict
import porttree
import herds
+import use_info
import datetime
import logging
@@ -148,6 +149,54 @@ def scan_herds():
return ho_dict, mo_dict
+def update_globals_uses_descriptions():
+ # Need changes
+ uses_g = use_info.get_uses_info()
+ existend_use_objects = models.UseFlagModel.objects.filter(name__in = uses_g.keys())
+ for use_object in existend_use_objects:
+ use_object.description = uses_g[use_object.name]
+ use_object.save(force_update = True)
+
+
+def scan_uses_description():
+ uses_local = use_info.get_local_uses_info()
+ existend_use_objects = models.UseFlagModel.objects.filter(name__in = uses_local.keys())
+ existend_use_local_descr = models.UseFlagDescriptionModel.objects.all()
+ cache_uses = {}
+ _update_cache_by_queryset(cache_uses, existend_use_objects, 'name')
+ use_local_cache = defaultdict(dict)
+ for use_obj in existend_use_local_descr:
+ use_local_cache[use_obj.use_flag.name][use_obj.package.cp] = use_obj
+
+ package_cache = dict()
+ for use_flag, packages_dict in uses_local.iteritems():
+ if use_flag not in cache_uses:
+ continue
+ use_flag_object = cache_uses[use_flag]
+ to_create = []
+ for package, description in packages_dict.iteritems():
+ if package in package_cache:
+ package_object = package_cache[package]
+ else:
+ try:
+ package_object = models.PackageModel.objects.get(package = package)
+ except models.PackageModel.DoesNotExist:
+ continue
+ else:
+ package_cache[package] = package_object
+ if package not in use_local_cache[use_flag]:
+ to_create.append(
+ models.UseFlagDescriptionModel(package = package_object,
+ use_flag = use_flag_object,
+ description = description))
+ else:
+ use_desc_obj = use_local_cache[use_flag][package]
+ if use_desc_obj.check_or_need_update(description):
+ use_desc_obj.description = description
+ use_desc_obj.save(force_update = True)
+ models.UseFlagDescriptionModel.objects.bulk_create(to_create)
+
+
class Command(BaseCommand):
@@ -221,10 +270,14 @@ class Command(BaseCommand):
#homepages_cache[homepage.url] = homepage
for category in self.porttree.iter_categories():
- category_object, categor_created = models.CategoryModel.objects.get_or_create(category = category)
+ category_object, category_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)
+ if not package_created:
+ if package_object.check_or_need_update(package):
+ # need update
+ pass
package_object.herds.add(*get_herds_objects(package))
package_object.maintainers.add(*get_maintainers_objects(package))
for ebuild in package.iter_ebuilds():
diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
index d7caaf1..27136f8 100644
--- a/gpackages/apps/packages/managers.py
+++ b/gpackages/apps/packages/managers.py
@@ -34,6 +34,9 @@ class PackageMixin(object):#{{{
args[1] = category
else:
kwargs.update({'name': name})
+ elif package is not None:
+ category, name = package.split('/')
+ kwargs.update({'name': name, 'category__category': category})
return super(PackageMixin, self).get(*args, **kwargs)#}}}
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-04 20:09 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-04 20:09 UTC (permalink / raw
To: gentoo-commits
commit: c9515a663684817d00640bd658863d44bc0bcc5b
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Jun 4 20:08:58 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Jun 4 20:08:58 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=c9515a66
Create scan module, move code from scanpackages.py
---
.../packages/management/commands/scanpackages.py | 290 +-------------------
.../commands/scanpackages.py => scan.py} | 202 +++++++--------
2 files changed, 96 insertions(+), 396 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 0c875c1..27cc782 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -1,302 +1,16 @@
from django.core.management.base import BaseCommand, CommandError
-from packages import models
-from collections import defaultdict
-import porttree
-import herds
-import use_info
-
import datetime
import logging
+from packages import scan
#l = logging.getLogger('django.db.backends')
#l.setLevel(logging.DEBUG)
#l.addHandler(logging.FileHandler('database.log'))
-def _get_from_cache(cache, what):
- save_to = []
- geted_items = set()
- for item in what:
- if item in cache:
- geted_items.add(item)
- save_to.append(cache[item])
- return save_to, geted_items
-
-def _get_from_database(Model, field_name, request_items):
- request_items = list(request_items)
- if not request_items:
- return None
- return Model.objects.filter(**{field_name + '__in': request_items})
-
-def _update_cache_by_queryset(cache, queryset, field_name):
- geted_items = set()
- for item in queryset:
- cache[getattr(item, field_name)] = item
- geted_items.add(getattr(item, field_name))
- return geted_items
-
-def _get_from_database_and_update_cache(Model, field_name, request_items, cache):
- queryset = _get_from_database(Model, field_name, request_items)
- if queryset is None:
- return None, set()
- geted = _update_cache_by_queryset(cache, queryset, field_name)
- return queryset, geted
-
-def _create_objects(Model, field_name, need_create):
- if not need_create:
- return None
- creating_list = []
- for item in need_create:
- creating_list.append(Model(**{field_name: item}))
-
- Model.objects.bulk_create(creating_list)
- created = Model.objects.filter(**{field_name + '__in': need_create})
- return created
-
-def _create_objects_and_update_cache(Model, field_name, need_create, cache):
- created = _create_objects(Model, field_name, need_create)
- if created is None:
- return None, None
- geted = _update_cache_by_queryset(cache, created, field_name)
- return created, geted
-
-def _get_items(items_list, Model, field_name, cache_var):
- items_set = frozenset(items_list)
- # Getting from cache
- items_objects, geted_items = _get_from_cache(cache_var, items_set)
- # Getting from database
- queryset, geted = _get_from_database_and_update_cache(Model, field_name, items_set - geted_items, cache_var)
- if queryset is None:
- return items_objects
- geted_items = geted_items | geted
-
- # Add to list with items
- items_objects.extend(queryset)
- # Create not existend items fast using bulk_create, works only in django 1.4 or gt
- need_create = list(items_set - geted_items)
- created, geted = _create_objects_and_update_cache(Model, field_name, need_create, cache_var)
- if created is None:
- return items_objects
- items_objects.extend(created)
- geted_items = geted_items | geted
- 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:
- maintainer_cmp = maintainers_dict[maintainer_object]
- # need update ?
- if maintainer_object.check_or_need_update(maintainer_cmp):
- # updating
- maintainer_object.update_by_maintainer(maintainer_cmp)
- maintainer_object.save(force_update = True)
- 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_herds()
- 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:
- herd_cmp = herds_dict[herd_object.name]
- # need update ?
- if herd_object.check_or_need_update(herd_cmp):
- # updating
- herd_object.update_by_herd(herd_cmp)
- herd_object.save(force_update = True)
- 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
-
-def update_globals_uses_descriptions():
- # Need changes
- uses_g = use_info.get_uses_info()
- existend_use_objects = models.UseFlagModel.objects.filter(name__in = uses_g.keys())
- for use_object in existend_use_objects:
- use_object.description = uses_g[use_object.name]
- use_object.save(force_update = True)
-
-
-def scan_uses_description():
- uses_local = use_info.get_local_uses_info()
- existend_use_objects = models.UseFlagModel.objects.filter(name__in = uses_local.keys())
- existend_use_local_descr = models.UseFlagDescriptionModel.objects.all()
- cache_uses = {}
- _update_cache_by_queryset(cache_uses, existend_use_objects, 'name')
- use_local_cache = defaultdict(dict)
- for use_obj in existend_use_local_descr:
- use_local_cache[use_obj.use_flag.name][use_obj.package.cp] = use_obj
-
- package_cache = dict()
- for use_flag, packages_dict in uses_local.iteritems():
- if use_flag not in cache_uses:
- continue
- use_flag_object = cache_uses[use_flag]
- to_create = []
- for package, description in packages_dict.iteritems():
- if package in package_cache:
- package_object = package_cache[package]
- else:
- try:
- package_object = models.PackageModel.objects.get(package = package)
- except models.PackageModel.DoesNotExist:
- continue
- else:
- package_cache[package] = package_object
- if package not in use_local_cache[use_flag]:
- to_create.append(
- models.UseFlagDescriptionModel(package = package_object,
- use_flag = use_flag_object,
- description = description))
- else:
- use_desc_obj = use_local_cache[use_flag][package]
- if use_desc_obj.check_or_need_update(description):
- use_desc_obj.description = description
- use_desc_obj.save(force_update = True)
- models.UseFlagDescriptionModel.objects.bulk_create(to_create)
-
-
-
class Command(BaseCommand):
args = ''
help = 'Will scan package tree and update info about it in database'
- porttree = porttree.PortTree()
def handle(self, *args, **options):
- licenses_cache = {}
- def get_licenses_objects(ebuild):
- licenses = ebuild.licenses
- return _get_items(licenses, models.LicensModel, 'name', licenses_cache)
-
- uses_cache = {}
- def get_uses_objects(ebuild):
- uses = [ use.name for use in ebuild.iter_uses() ]
- return _get_items(uses, models.UseFlagModel, 'name', uses_cache)
-
- arches_cache = {}
- def get_keywords_objects(ebuild, ebuild_object):
- keywords_list = []
- for keyword in ebuild.get_keywords():
- keyword_object = models.Keyword(status = keyword.status,
- ebuild = ebuild_object)
-
- if keyword.arch in arches_cache:
- arch = arches_cache[keyword.arch]
- else:
- arch, created = models.ArchesModel.objects.get_or_create(name = keyword.arch)
- arches_cache[keyword.arch] = arch
-
- keyword_object.arch = arch
- keywords_list.append(keyword_object)
-
- models.Keyword.objects.bulk_create(keywords_list)
-
-
- homepages_cache = {}
- 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_maintainers_objects(package):
- maintainers = package.metadata.maintainers()
- objects = []
- for maintainer in maintainers:
- if maintainer.email in maintainers_cache:
- objects.append(maintainers_cache[maintainer.email])
- else:
- maintainer_object, created = models.MaintainerModel \
- .objects.get_or_create(email = maintainer.email)
- if created:
- maintainer_object.name = maintainer.name
- maintainer_object.save()
- objects.append(maintainer_object)
- return objects
-
-
- 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 category in self.porttree.iter_categories():
- category_object, category_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)
- if not package_created:
- if package_object.check_or_need_update(package):
- # need update
- pass
- package_object.herds.add(*get_herds_objects(package))
- package_object.maintainers.add(*get_maintainers_objects(package))
- for ebuild in package.iter_ebuilds():
- ebuild_object = models.EbuildModel()
- ebuild_object.init_by_ebuild(ebuild)
- ebuild_object.package = package_object
- # To Add some related objects it should have pk
- ebuild_object.save(force_insert=True)
- # Add licenses
- ebuild_object.licenses.add(*get_licenses_objects(ebuild))
- ebuild_object.use_flags.add(*get_uses_objects(ebuild))
- ebuild_object.homepages.add(*get_homepages_objects(ebuild))
- get_keywords_objects(ebuild, ebuild_object)
- #homepages_list = []
- #for homepage in ebuild.homepages:
- #homepage_object = models.HomepageModel(url = homepage,
- #ebuild = ebuild_object)
- #homepages_list.append(homepage_object)
- #models.HomepageModel.objects.bulk_create(homepages_list)
-
-
+ scan.scanpackages()
print (datetime.datetime.now() - st).total_seconds()
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/scan.py
similarity index 59%
copy from gpackages/apps/packages/management/commands/scanpackages.py
copy to gpackages/apps/packages/scan.py
index 0c875c1..d4b4601 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/scan.py
@@ -1,15 +1,10 @@
-from django.core.management.base import BaseCommand, CommandError
from packages import models
from collections import defaultdict
import porttree
import herds
import use_info
-import datetime
-import logging
-#l = logging.getLogger('django.db.backends')
-#l.setLevel(logging.DEBUG)
-#l.addHandler(logging.FileHandler('database.log'))
+porttree = porttree.PortTree()
def _get_from_cache(cache, what):
save_to = []
@@ -196,107 +191,98 @@ def scan_uses_description():
use_desc_obj.save(force_update = True)
models.UseFlagDescriptionModel.objects.bulk_create(to_create)
+def scanpackages():
+ licenses_cache = {}
+ def get_licenses_objects(ebuild):
+ licenses = ebuild.licenses
+ return _get_items(licenses, models.LicensModel, 'name', licenses_cache)
+
+ uses_cache = {}
+ def get_uses_objects(ebuild):
+ uses = [ use.name for use in ebuild.iter_uses() ]
+ return _get_items(uses, models.UseFlagModel, 'name', uses_cache)
+
+ arches_cache = {}
+ def get_keywords_objects(ebuild, ebuild_object):
+ keywords_list = []
+ for keyword in ebuild.get_keywords():
+ keyword_object = models.Keyword(status = keyword.status,
+ ebuild = ebuild_object)
+
+ if keyword.arch in arches_cache:
+ arch = arches_cache[keyword.arch]
+ else:
+ arch, created = models.ArchesModel.objects.get_or_create(name = keyword.arch)
+ arches_cache[keyword.arch] = arch
+
+ keyword_object.arch = arch
+ keywords_list.append(keyword_object)
-
-
-class Command(BaseCommand):
- args = ''
- help = 'Will scan package tree and update info about it in database'
- porttree = porttree.PortTree()
- def handle(self, *args, **options):
- licenses_cache = {}
- def get_licenses_objects(ebuild):
- licenses = ebuild.licenses
- return _get_items(licenses, models.LicensModel, 'name', licenses_cache)
-
- uses_cache = {}
- def get_uses_objects(ebuild):
- uses = [ use.name for use in ebuild.iter_uses() ]
- return _get_items(uses, models.UseFlagModel, 'name', uses_cache)
-
- arches_cache = {}
- def get_keywords_objects(ebuild, ebuild_object):
- keywords_list = []
- for keyword in ebuild.get_keywords():
- keyword_object = models.Keyword(status = keyword.status,
- ebuild = ebuild_object)
-
- if keyword.arch in arches_cache:
- arch = arches_cache[keyword.arch]
- else:
- arch, created = models.ArchesModel.objects.get_or_create(name = keyword.arch)
- arches_cache[keyword.arch] = arch
+ models.Keyword.objects.bulk_create(keywords_list)
+
+
+ homepages_cache = {}
+ def get_homepages_objects(ebuild):
+ homepages = ebuild.homepages
+ return _get_items(homepages, models.HomepageModel, 'url', homepages_cache)
+
+
+ herds_cache, maintainers_cache = scan_herds()
+ def get_maintainers_objects(package):
+ maintainers = package.metadata.maintainers()
+ objects = []
+ for maintainer in maintainers:
+ if maintainer.email in maintainers_cache:
+ objects.append(maintainers_cache[maintainer.email])
+ else:
+ maintainer_object, created = models.MaintainerModel \
+ .objects.get_or_create(email = maintainer.email)
+ if created:
+ maintainer_object.name = maintainer.name
+ maintainer_object.save()
+ objects.append(maintainer_object)
+ return objects
- keyword_object.arch = arch
- keywords_list.append(keyword_object)
-
- models.Keyword.objects.bulk_create(keywords_list)
-
-
- homepages_cache = {}
- 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_maintainers_objects(package):
- maintainers = package.metadata.maintainers()
- objects = []
- for maintainer in maintainers:
- if maintainer.email in maintainers_cache:
- objects.append(maintainers_cache[maintainer.email])
- else:
- maintainer_object, created = models.MaintainerModel \
- .objects.get_or_create(email = maintainer.email)
- if created:
- maintainer_object.name = maintainer.name
- maintainer_object.save()
- objects.append(maintainer_object)
- return objects
-
-
- 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 category in self.porttree.iter_categories():
- category_object, category_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)
- if not package_created:
- if package_object.check_or_need_update(package):
- # need update
- pass
- package_object.herds.add(*get_herds_objects(package))
- package_object.maintainers.add(*get_maintainers_objects(package))
- for ebuild in package.iter_ebuilds():
- ebuild_object = models.EbuildModel()
- ebuild_object.init_by_ebuild(ebuild)
- ebuild_object.package = package_object
- # To Add some related objects it should have pk
- ebuild_object.save(force_insert=True)
- # Add licenses
- ebuild_object.licenses.add(*get_licenses_objects(ebuild))
- ebuild_object.use_flags.add(*get_uses_objects(ebuild))
- ebuild_object.homepages.add(*get_homepages_objects(ebuild))
- get_keywords_objects(ebuild, ebuild_object)
- #homepages_list = []
- #for homepage in ebuild.homepages:
- #homepage_object = models.HomepageModel(url = homepage,
- #ebuild = ebuild_object)
- #homepages_list.append(homepage_object)
- #models.HomepageModel.objects.bulk_create(homepages_list)
-
-
- print (datetime.datetime.now() - st).total_seconds()
+
+ 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 category in porttree.iter_categories():
+ category_object, category_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)
+ if not package_created:
+ if package_object.check_or_need_update(package):
+ # need update
+ pass
+ package_object.herds.add(*get_herds_objects(package))
+ package_object.maintainers.add(*get_maintainers_objects(package))
+ for ebuild in package.iter_ebuilds():
+ ebuild_object = models.EbuildModel()
+ ebuild_object.init_by_ebuild(ebuild)
+ ebuild_object.package = package_object
+ # To Add some related objects it should have pk
+ ebuild_object.save(force_insert=True)
+ # Add licenses
+ ebuild_object.licenses.add(*get_licenses_objects(ebuild))
+ ebuild_object.use_flags.add(*get_uses_objects(ebuild))
+ ebuild_object.homepages.add(*get_homepages_objects(ebuild))
+ get_keywords_objects(ebuild, ebuild_object)
+ #homepages_list = []
+ #for homepage in ebuild.homepages:
+ #homepage_object = models.HomepageModel(url = homepage,
+ #ebuild = ebuild_object)
+ #homepages_list.append(homepage_object)
+ #models.HomepageModel.objects.bulk_create(homepages_list)
+
+
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-09 18:19 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-09 18:19 UTC (permalink / raw
To: gentoo-commits
commit: e0b3afa49d0b5b1e99c92e5d766a1a443dc5aa77
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sat Jun 9 18:17:40 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sat Jun 9 18:17:40 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=e0b3afa4
Add support verbosity levels in scan
---
.../packages/management/commands/scanpackages.py | 3 +-
gpackages/apps/packages/models.py | 6 +-
gpackages/apps/packages/scan.py | 47 ++++++++++++++++----
3 files changed, 43 insertions(+), 13 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 3f5010c..8f47848 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -12,9 +12,10 @@ class Command(BaseCommand):
args = ''
help = 'Will scan package tree and update info about it in database'
def handle(self, *args, **options):
+ verbosity = int(options['verbosity'])
st = datetime.datetime.now()
#scan.scanpackages()
#scan.scan_all_repos()
- Scanner().scan_all_repos()
+ Scanner(verbosity = verbosity).scan_all_repos()
self.stdout.write(unicode((datetime.datetime.now() - st).total_seconds()))
self.stdout.write("\n")
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 713cb70..3486399 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -36,7 +36,7 @@ class CategoryModel(models.Model):
category = models.CharField(unique = True, max_length = 70)
def __unicode__(self):
- return self.category
+ return unicode(self.category)
class MaintainerModel(AbstractDateTimeModel):
@@ -126,11 +126,11 @@ class PackageModel(AbstractDateTimeModel):
objects = managers.PackageManager()
def __unicode__(self):
- return self.cp
+ return unicode(self.cp)
@property
def cp(self):
- return '%s/%s' % (self.category, self.name)
+ return "%s/%s" % (unicode(self.category), self.name)
def init_by_package(self, package, category = None):
self.name = package.name
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index d0f476e..a7a77b9 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -1,4 +1,5 @@
from packages import models
+import sys
from django.db import IntegrityError
from collections import defaultdict
from generic import StrThatIgnoreCase
@@ -87,7 +88,7 @@ def _get_items(items_list, Model, field_name, cache_var):
class Scanner(object):
- def __init__(self, verbosity = 0):
+ def __init__(self, verbosity = 1):
# maintainers_cache: maintainer.email as key, and maintainer object as
# value
self.maintainers_cache = {}
@@ -105,7 +106,16 @@ class Scanner(object):
self.arches_cache = {}
- self.verbosity = verbosity
+ self.verbosity = int(verbosity)
+
+ def write(self, what, verbosity = 1):
+ if verbosity <= self.verbosity:
+ sys.stdout.write(what)
+
+ def output(self, format_str, whats, verbosity = 1):
+ # Maybe implement lazy format string ?
+ if verbosity <= self.verbosity:
+ sys.stdout.write(format_str % whats)
def get_existent_maintainers(self):
return models.MaintainerModel.objects.all()
@@ -148,11 +158,15 @@ class Scanner(object):
# updating
maintainer_object.update_by_maintainer(maintainer_cmp)
maintainer_object.save(force_update = True)
+
+ # Show info if need
+ self.output("update maintainer '%s'\n", maintainer_object, 2)
mo_dict[maintainer_object.email] = maintainer_object
to_create = []
for maintainer in maintainers_dict.iterkeys():
if maintainer.email not in mo_dict:
+ self.output("create maintainer '%s'\n", maintainer, 2)
to_create.append(maintainer)
mobjects = _create_objects(models.MaintainerModel, 'maintainer', to_create)
@@ -170,6 +184,7 @@ class Scanner(object):
for herd_object in existent_herds:
if herd_object.name not in herds_dict:
to_del.append(herd_object.pk)
+ self.output("herd to del '%s'\n", herd_object, 2)
else:
herd_cmp = herds_dict[herd_object.name]
# need update ?
@@ -177,6 +192,7 @@ class Scanner(object):
# updating
herd_object.update_by_herd(herd_cmp)
herd_object.save(force_update = True)
+ self.output("update herd '%s'\n", herd_object, 2)
herds_objects_dict[herd_object.name] = herd_object
models.HerdsModel.objects.filter(pk__in = to_del).delete()
@@ -185,6 +201,7 @@ class Scanner(object):
for herd in herds_dict.itervalues():
if herd.name not in herds_objects_dict:
to_create.append(herd)
+ self.output("create herd '%s'\n", herd, 2)
cobjects = _create_objects(models.HerdsModel, 'herd', to_create)
_update_cache_by_queryset(herds_objects_dict, cobjects, 'name')
@@ -213,6 +230,9 @@ class Scanner(object):
herd_object.maintainers.clear()
herd_object.maintainers.add(*res[herd_name])
+ self.output("add maintainers '%s' to mantainer '%s'\n",
+ (res[herd_name], herd_object), 3)
+
def get_maintainers(self):
if not self.maintainers_cache_loaded:
self.load_maintainers_to_cache()
@@ -221,8 +241,12 @@ class Scanner(object):
def scan_all_repos(self, scan_herds = True):
#cache_dict = anydbm.open('cache.db','c')
if scan_herds:
+ self.write('Scaning herds\n', 3)
self.scan_herds()
+
for repo in portage.iter_trees():
+ self.output("Scaning repository '%s'\n", repo.name, 3)
+
repo_obj, repo_created = models.RepositoryModel.objects.get_or_create(name = repo.name)
self.scanpackages(repo, repo_obj)
#cache_dict.close()
@@ -265,7 +289,8 @@ class Scanner(object):
if arch_name in self.arches_cache:
arch = self.arches_cache[arch_name]
else:
- arch, created = models.ArchesModel.objects.get_or_create(name = arch_name)
+ arch, created = models.ArchesModel.objects \
+ .get_or_create(name = arch_name)
self.arches_cache[arch_name] = arch
return arch
@@ -309,6 +334,8 @@ class Scanner(object):
ebuild_object.save(force_insert=True)
self.add_related_to_ebuild(ebuild, ebuild_object)
+ self.output("ebuild created '%s'\n", ebuild_object, 3)
+
def clear_related_to_package(self, package_object):
package_object.herds.clear()
package_object.maintainers.clear()
@@ -325,15 +352,20 @@ class Scanner(object):
def update_ebuilds(self, package, package_object, delete = True):
not_del = []
for ebuild in package.iter_ebuilds():
- ebuild_object, ebuild_created = models.EbuildModel.objects.get_or_create(ebuild = ebuild, package = package_object)
+ ebuild_object, ebuild_created = models.EbuildModel.objects \
+ .get_or_create(ebuild = ebuild, package = package_object)
+
not_del.append(ebuild_object.pk)
if ebuild_created:
self.add_related_to_ebuild(ebuild, ebuild_object)
- continue
+ self.output("ebuild created '%s'\n", ebuild_object, 3)
+
if ebuild_object.check_or_need_update(ebuild):
ebuild_object.update_by_ebuild(ebuild)
self.update_related_to_ebuild(ebuild, ebuild_object)
ebuild_object.save(force_update = True)
+
+ self.output("ebuild updated '%s'\n", ebuild_object, 3)
if delete:
models.EbuildModel.objects.filter(package = package_object).exclude(pk__in = not_del).delete()
@@ -351,9 +383,6 @@ class Scanner(object):
def scanpackages(self, porttree, porttree_obj, delete = True,
force_update = False, update_cache = True, use_cache = True):
- # Load homepages to cache
- #for homepage in models.HomepageModel.objects.all():
- #homepages_cache[homepage.url] = homepage
existend_categorys = []
for category in porttree.iter_categories():
existend_packages = []
@@ -367,7 +396,7 @@ class Scanner(object):
#val = cache_dict[key]
#if val is not None and val == package.manifest_sha1:
#continue
- print('%-44s [%s]' % (package, porttree))
+ self.output('%-44s [%s]\n', (package, porttree))
package_object, package_created = models.PackageModel.objects.only('changelog_hash', 'manifest_hash', 'metadata_hash') \
.get_or_create(package = package, category = category_object, repository = porttree_obj)
#if update_cache:
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-09 18:19 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-09 18:19 UTC (permalink / raw
To: gentoo-commits
commit: d482308972446f7649ff7fbf446512160e57cfb2
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sat Jun 9 15:45:24 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sat Jun 9 15:45:24 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=d4823089
Refactoring scan.py
---
.../packages/management/commands/scanpackages.py | 9 +-
gpackages/apps/packages/managers.py | 5 +-
gpackages/apps/packages/models.py | 1 -
gpackages/apps/packages/scan.py | 539 +++++++++++---------
4 files changed, 309 insertions(+), 245 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 35a117b..3f5010c 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -1,7 +1,8 @@
from django.core.management.base import BaseCommand, CommandError
import datetime
import logging
-from packages import scan
+from packages.scan import Scanner
+from optparse import make_option
#l = logging.getLogger('django.db.backends')
#l.setLevel(logging.DEBUG)
#l.addHandler(logging.FileHandler('database.log'))
@@ -13,5 +14,7 @@ class Command(BaseCommand):
def handle(self, *args, **options):
st = datetime.datetime.now()
#scan.scanpackages()
- scan.scan_all_repos()
- print (datetime.datetime.now() - st).total_seconds()
+ #scan.scan_all_repos()
+ Scanner().scan_all_repos()
+ self.stdout.write(unicode((datetime.datetime.now() - st).total_seconds()))
+ self.stdout.write("\n")
diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
index 7ebde50..5ef2ed6 100644
--- a/gpackages/apps/packages/managers.py
+++ b/gpackages/apps/packages/managers.py
@@ -80,9 +80,12 @@ class HerdsMixin(object):#{{{
class MaintainerMixin(object):#{{{
def filter(self, *args, **kwargs):
- maintainer__in = get_from_kwargs_and_del('maintainer__in', kwargs)
+ maintainer__in, maintainer = \
+ get_from_kwargs_and_del(['maintainer__in', 'maintainer'], kwargs)
if maintainer__in is not None:
kwargs['email__in'] = maintainer__in
+ elif maintainer is not None:
+ kwargs['email'] = maintainer.email
return super(MaintainerMixin, self).filter(*args, **kwargs)#}}}
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 82d3ca5..dc2147c 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -55,7 +55,6 @@ class MaintainerModel(AbstractDateTimeModel):
def init_by_maintainer(self, maintainer):
self.name = maintainer.name
self.email = maintainer.email
- self.role = maintainer.role
def update_by_maintainer(self, maintainer):
self.name = maintainer.name
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index c9645fc..db9c0e6 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -83,78 +83,315 @@ def _get_items(items_list, Model, field_name, cache_var):
return items_objects
-def scan_maintainers(maintainers_dict):
- existend_maintainers = models.MaintainerModel.objects.all()
- main_dict = {}
- mo_dict = {}
- #to_del = []
- _update_cache_by_queryset(main_dict, maintainers_dict.keys(), 'email')
- for maintainer_object in existend_maintainers:
- if maintainer_object.email in main_dict:
- maintainer_cmp = main_dict[maintainer_object.email]
- # need update ?
- if maintainer_object.check_or_need_update(maintainer_cmp):
- # updating
- maintainer_object.update_by_maintainer(maintainer_cmp)
- maintainer_object.save(force_update = True)
- mo_dict[maintainer_object.email] = maintainer_object
- #else:
- #to_del.append(maintainer_object.pk)
- #print to_del
- #print mo_dict
- 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
+
+class Scanner(object):
+ def __init__(self, verbosity = 0):
+ # maintainers_cache: maintainer.email as key, and maintainer object as
+ # value
+ self.maintainers_cache = {}
+ self.maintainers_cache_loaded = False
+ # herds cache: herd.name as key and herd object as value
+ self.herds_cache = {}
+ self.herds_cache_loaded = False
+ self.licenses_cache = {}
+ self.uses_cache = {}
+ self.arches_cache = {}
+ self.homepages_cache = {}
+ self.herds_cache = {}
+ self.maintainers_cache = {}
+ self.herds_object = herds.Herds()
+
+ self.arches_cache = {}
+
+ self.verbosity = verbosity
+
+ def get_existent_maintainers(self):
+ return models.MaintainerModel.objects.all()
+
+ def get_existent_herds(self):
+ return models.HerdsModel.objects.all()
+
+ def get_maintainers_cache(self):
+ maintainers_dict = {}
+ existent_maintainers = self.get_existent_maintainers()
+ _update_cache_by_queryset(maintainers_dict, existent_maintainers, 'email')
+ return maintainers_dict
+
+ def load_maintainers_to_cache(self):
+ self.maintainers_cache = self.get_maintainers_cache()
+ self.maintainers_cache_loaded = True
+
+ def get_herds_cache(self):
+ herds_dict = {}
+ existent_herds = self.get_existent_herds()
+ _update_cache_by_queryset(herds_dict, existent_herds, 'name')
+ return herds_dict
+
+ def load_herds_to_cache(self):
+ if not self.herds_cache_loaded:
+ self.herds_cache = self.get_herds_cache()
+ self.herds_cache_loaded = True
+
+ def scan_maintainers(self, maintainers_dict):
+ existend_maintainers = self.get_existent_maintainers()
+ main_dict = {}
+ mo_dict = {}
+ #to_del = []
+ _update_cache_by_queryset(main_dict, maintainers_dict.keys(), 'email')
+ for maintainer_object in existend_maintainers:
+ if maintainer_object.email in main_dict:
+ maintainer_cmp = main_dict[maintainer_object.email]
+ # need update ?
+ if maintainer_object.check_or_need_update(maintainer_cmp):
+ # updating
+ maintainer_object.update_by_maintainer(maintainer_cmp)
+ maintainer_object.save(force_update = True)
+ mo_dict[maintainer_object.email] = maintainer_object
+
+ 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')
+
+ self.maintainers_cache = mo_dict
+ self.maitainers_cache_loaded = True
-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_herds()
- ho_dict = {}
- to_del = []
- for herd_object in existent_herds:
- if herd_object.name not in herds_dict:
- to_del.append(herd_object.pk)
+ def scan_herds(self):
+ existent_herds = self.get_existent_herds()
+ herds_dict = self.herds_object.get_herds_indict()
+ herds_objects_dict = {}
+ to_del = []
+ for herd_object in existent_herds:
+ if herd_object.name not in herds_dict:
+ to_del.append(herd_object.pk)
+ else:
+ herd_cmp = herds_dict[herd_object.name]
+ # need update ?
+ if herd_object.check_or_need_update(herd_cmp):
+ # updating
+ herd_object.update_by_herd(herd_cmp)
+ herd_object.save(force_update = True)
+ herds_objects_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 herds_objects_dict:
+ to_create.append(herd)
+
+ cobjects = _create_objects(models.HerdsModel, 'herd', to_create)
+ _update_cache_by_queryset(herds_objects_dict, cobjects, 'name')
+
+ # Add to cache
+ self.herds_cache = herds_objects_dict
+ self.herds_cache_loaded = True
+ # Add related maintainers to herds
+ self._add_related_to_herds()
+
+
+ def _get_maintainers_for_relation_with_herds(self, maintainers_dict):
+ res = defaultdict(list)
+ for mainteiner, herds_names in maintainers_dict.iteritems():
+ for herd in herds_names:
+ res[herd].append(self.maintainers_cache[mainteiner.email])
+ return res
+
+ def _add_related_to_herds(self):
+ maintainers_dict = self.herds_object.get_maintainers_with_herds()
+ self.scan_maintainers(maintainers_dict)
+ #Gen data for relate with herds
+ res = self._get_maintainers_for_relation_with_herds(maintainers_dict)
+
+ for herd_name, herd_object in self.herds_cache.iteritems():
+ herd_object.maintainers.clear()
+ herd_object.maintainers.add(*res[herd_name])
+
+ def get_maintainers(self):
+ if not self.maintainers_cache_loaded:
+ self.load_maintainers_to_cache()
+ return self.maintainers_cache
+
+ def scan_all_repos(self, scan_herds = True):
+ #cache_dict = anydbm.open('cache.db','c')
+ if scan_herds:
+ self.scan_herds()
+ for repo in portage.iter_trees():
+ repo_obj, repo_created = models.RepositoryModel.objects.get_or_create(name = repo.name)
+ self.scanpackages(repo, repo_obj)
+ #cache_dict.close()
+
+ def get_licenses_objects(self, ebuild):
+ licenses = ebuild.licenses
+ return _get_items(licenses, models.LicensModel, 'name', self.licenses_cache)
+
+ def get_uses_objects(self, ebuild):
+ uses = [ use.name for use in ebuild.iter_uses() ]
+ return _get_items(uses, models.UseFlagModel, 'name', self.uses_cache)
+
+ def get_homepages_objects(self, ebuild):
+ homepages = ebuild.homepages
+ return _get_items(homepages, models.HomepageModel, 'url', self.homepages_cache)
+
+ def get_maintainers_objects(self, package):
+ objects = []
+ for maintainer in package.metadata.maintainers():
+ if maintainer.email in self.maintainers_cache:
+ objects.append(self.maintainers_cache[maintainer.email])
+ else:
+ maintainer_object, created = models.MaintainerModel \
+ .objects.get_or_create(maintainer = maintainer)
+ objects.append(maintainer_object)
+ # Add to cache
+ self.maintainers_cache[maintainer_object.email] = maintainer_object
+ return objects
+
+ def get_herds_objects(self, package):
+ self.load_herds_to_cache()
+ herds_objects = []
+ for herd in package.metadata.herds():
+ if herd in self.herds_cache:
+ herds_objects.append(self.herds_cache[herd])
+
+ return herds_objects
+
+ def get_arch_object(self, arch_name):
+ if arch_name in self.arches_cache:
+ arch = self.arches_cache[arch_name]
else:
- herd_cmp = herds_dict[herd_object.name]
- # need update ?
- if herd_object.check_or_need_update(herd_cmp):
- # updating
- herd_object.update_by_herd(herd_cmp)
- herd_object.save(force_update = True)
- ho_dict[herd_object.name] = herd_object
+ arch, created = models.ArchesModel.objects.get_or_create(name = arch_name)
+ self.arches_cache[arch_name] = arch
+ return arch
+
+ def create_keywords_objects(self, ebuild, ebuild_object):
+ keywords_list = []
+ for keyword in ebuild.get_keywords():
+ keyword_object = models.Keyword(status = keyword.status,
+ ebuild = ebuild_object)
+
+ keyword_object.arch = self.get_arch_object(keyword.arch)
+ keywords_list.append(keyword_object)
+
+ models.Keyword.objects.bulk_create(keywords_list)
+
+ def clean_keywords_object(self, ebuild_object):
+ models.Keyword.objects.filter(ebuild = ebuild_object).delete()
- models.HerdsModel.objects.filter(pk__in = to_del).delete()
+ def scanpackages(self, porttree, porttree_obj, delete = True,
+ force_update = False, update_cache = True, use_cache = True):
- 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])
+ def add_related_to_ebuild(ebuild, ebuild_object):
+ # Add licenses
+ ebuild_object.licenses.add(*self.get_licenses_objects(ebuild))
+ ebuild_object.use_flags.add(*self.get_uses_objects(ebuild))
+ ebuild_object.homepages.add(*self.get_homepages_objects(ebuild))
+ self.create_keywords_objects(ebuild, ebuild_object)
+
+ def clear_related_to_ebuild(ebuild_object):
+ ebuild_object.licenses.clear()
+ ebuild_object.use_flags.clear()
+ ebuild_object.homepages.clear()
+ self.clean_keywords_object(ebuild_object)
+
+ def update_related_to_ebuild(ebuild, ebuild_object):
+ clear_related_to_ebuild(ebuild_object)
+ add_related_to_ebuild(ebuild, ebuild_object)
+
+ def create_ebuilds(package, package_object):
+ for ebuild in package.iter_ebuilds():
+ ebuild_object = models.EbuildModel()
+ ebuild_object.init_by_ebuild(ebuild)
+ ebuild_object.package = package_object
+ # To Add some related objects it should have pk
+ ebuild_object.save(force_insert=True)
+ add_related_to_ebuild(ebuild, ebuild_object)
+
+ def update_ebuilds(package, package_object, delete = True):
+ not_del = []
+ for ebuild in package.iter_ebuilds():
+ ebuild_object, ebuild_created = models.EbuildModel.objects.get_or_create(ebuild = ebuild, package = package_object)
+ not_del.append(ebuild_object.pk)
+ if ebuild_created:
+ add_related_to_ebuild(ebuild, ebuild_object)
+ continue
+ if ebuild_object.check_or_need_update(ebuild):
+ ebuild_object.update_by_ebuild(ebuild)
+ update_related_to_ebuild(ebuild, ebuild_object)
+ ebuild_object.save(force_update = True)
+ if delete:
+ models.EbuildModel.objects.filter(package = package_object).exclude(pk__in = not_del).delete()
+
+ def clear_related_to_package(package_object):
+ package_object.herds.clear()
+ package_object.maintainers.clear()
+
+
+ def add_related_to_package(package, package_object):
+ package_object.herds.add(*self.get_herds_objects(package))
+ package_object.maintainers.add(*self.get_maintainers_objects(package))
+
+ def update_related_to_package(package, package_object):
+ clear_related_to_package(package_object)
+ add_related_to_package(package, package_object)
- for herd_name, herd_object in ho_dict.iteritems():
- herd_object.maintainers.clear()
- herd_object.maintainers.add(*res[herd_name])
+ def update_package(package, package_object, force_update = False):
+ if package_object.need_update_metadata(package) or force_update:
+ #Updating related objects to package
+ update_related_to_package(package, package_object)
+
+ if package_object.need_update_ebuilds(package) or force_update:
+ update_ebuilds(package, package_object)
+
+ package_object.update_info(package)
+ package_object.save(force_update = True)
+
+ # Load homepages to cache
+ #for homepage in models.HomepageModel.objects.all():
+ #homepages_cache[homepage.url] = homepage
+ existend_categorys = []
+ for category in porttree.iter_categories():
+ existend_packages = []
+ category_object, category_created = models.CategoryModel.objects.get_or_create(category = category)
+ existend_categorys.append(category_object.pk)
+ for package in category.iter_packages():
+ #if use_cache:
+ #key = str(porttree.name)+'/'+str(package)
+ #val = None
+ #if key in cache_dict:
+ #val = cache_dict[key]
+ #if val is not None and val == package.manifest_sha1:
+ #continue
+ print('%s [%s]' % (str(package).ljust(44), porttree))
+ package_object, package_created = models.PackageModel.objects.only('changelog_hash', 'manifest_hash', 'metadata_hash') \
+ .get_or_create(package = package, category = category_object, repository = porttree_obj)
+ #if update_cache:
+ #key = str(porttree.name)+'/'+str(package)
+ #cache_dict[key] = package.manifest_sha1
+
+ existend_packages.append(package_object.pk)
+ if not package_created:
+ if package_object.check_or_need_update(package) or force_update:
+ # need update
+ update_package(package, package_object)
- return ho_dict, mo_dict
+ continue
+ # if package_created:
+ add_related_to_package(package, package_object)
+ create_ebuilds(package, package_object)
+ if delete:
+ models.PackageModel.objects.filter(category = category_object, repository = porttree_obj).exclude(pk__in = existend_packages).delete()
+
+
+
+cache_dict = None
def update_globals_uses_descriptions():
# Need changes
uses_g = use_info.get_uses_info()
@@ -203,181 +440,3 @@ def scan_uses_description():
use_desc_obj.save(force_update = True)
models.UseFlagDescriptionModel.objects.bulk_create(to_create)
-licenses_cache = {}
-uses_cache = {}
-arches_cache = {}
-homepages_cache = {}
-herds_cache = {}
-maintainers_cache = {}
-
-cache_dict = None
-def scanpackages(porttree, porttree_obj, delete = True, force_update = False,
- update_cache = True, use_cache = True):
- def get_licenses_objects(ebuild):
- licenses = ebuild.licenses
- return _get_items(licenses, models.LicensModel, 'name', licenses_cache)
-
- def get_uses_objects(ebuild):
- uses = [ use.name for use in ebuild.iter_uses() ]
- return _get_items(uses, models.UseFlagModel, 'name', uses_cache)
-
- def get_keywords_objects(ebuild, ebuild_object):
- keywords_list = []
- for keyword in ebuild.get_keywords():
- keyword_object = models.Keyword(status = keyword.status,
- ebuild = ebuild_object)
-
- if keyword.arch in arches_cache:
- arch = arches_cache[keyword.arch]
- else:
- arch, created = models.ArchesModel.objects.get_or_create(name = keyword.arch)
- arches_cache[keyword.arch] = arch
-
- keyword_object.arch = arch
- keywords_list.append(keyword_object)
-
- models.Keyword.objects.bulk_create(keywords_list)
-
-
- def get_homepages_objects(ebuild):
- homepages = ebuild.homepages
- return _get_items(homepages, models.HomepageModel, 'url', homepages_cache)
-
-
- def get_maintainers_objects(package):
- maintainers = package.metadata.maintainers()
- objects = []
- for maintainer in maintainers:
- if maintainer.email in maintainers_cache:
- objects.append(maintainers_cache[maintainer.email])
- else:
- maintainer_object, created = models.MaintainerModel \
- .objects.get_or_create(email = maintainer.email)
- if created:
- maintainer_object.name = maintainer.name
- maintainer_object.save()
- objects.append(maintainer_object)
- return objects
-
-
- 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
-
- def add_related_to_ebuild(ebuild, ebuild_object):
- # Add licenses
- ebuild_object.licenses.add(*get_licenses_objects(ebuild))
- ebuild_object.use_flags.add(*get_uses_objects(ebuild))
- ebuild_object.homepages.add(*get_homepages_objects(ebuild))
- get_keywords_objects(ebuild, ebuild_object)
-
- def clear_related_to_ebuild(ebuild_object):
- ebuild_object.licenses.clear()
- ebuild_object.use_flags.clear()
- ebuild_object.homepages.clear()
- models.Keyword.objects.filter(ebuild = ebuild_object).delete()
-
- def update_related_to_ebuild(ebuild, ebuild_object):
- clear_related_to_ebuild(ebuild_object)
- add_related_to_ebuild(ebuild, ebuild_object)
-
- def create_ebuilds(package, package_object):
- for ebuild in package.iter_ebuilds():
- ebuild_object = models.EbuildModel()
- ebuild_object.init_by_ebuild(ebuild)
- ebuild_object.package = package_object
- # To Add some related objects it should have pk
- ebuild_object.save(force_insert=True)
- add_related_to_ebuild(ebuild, ebuild_object)
-
- def update_ebuilds(package, package_object, delete = True):
- not_del = []
- for ebuild in package.iter_ebuilds():
- ebuild_object, ebuild_created = models.EbuildModel.objects.get_or_create(ebuild = ebuild, package = package_object)
- not_del.append(ebuild_object.pk)
- if ebuild_created:
- add_related_to_ebuild(ebuild, ebuild_object)
- continue
- if ebuild_object.check_or_need_update(ebuild):
- ebuild_object.update_by_ebuild(ebuild)
- update_related_to_ebuild(ebuild, ebuild_object)
- ebuild_object.save(force_update = True)
- if delete:
- models.EbuildModel.objects.filter(package = package_object).exclude(pk__in = not_del).delete()
-
- def clear_related_to_package(package_object):
- package_object.herds.clear()
- package_object.maintainers.clear()
-
-
- def add_related_to_package(package, package_object):
- package_object.herds.add(*get_herds_objects(package))
- package_object.maintainers.add(*get_maintainers_objects(package))
-
- def update_related_to_package(package, package_object):
- clear_related_to_package(package_object)
- add_related_to_package(package, package_object)
-
- def update_package(package, package_object, force_update = False):
- if package_object.need_update_metadata(package) or force_update:
- #Updating related objects to package
- update_related_to_package(package, package_object)
-
- if package_object.need_update_ebuilds(package) or force_update:
- update_ebuilds(package, package_object)
-
- package_object.update_info(package)
- package_object.save(force_update = True)
-
- # Load homepages to cache
- #for homepage in models.HomepageModel.objects.all():
- #homepages_cache[homepage.url] = homepage
- existend_categorys = []
- for category in porttree.iter_categories():
- existend_packages = []
- category_object, category_created = models.CategoryModel.objects.get_or_create(category = category)
- existend_categorys.append(category_object.pk)
- for package in category.iter_packages():
- #if use_cache:
- #key = str(porttree.name)+'/'+str(package)
- #val = None
- #if key in cache_dict:
- #val = cache_dict[key]
- #if val is not None and val == package.manifest_sha1:
- #continue
- print('%s [%s]' % (str(package).ljust(44), porttree))
- package_object, package_created = models.PackageModel.objects.only('changelog_hash', 'manifest_hash', 'metadata_hash') \
- .get_or_create(package = package, category = category_object, repository = porttree_obj)
- #if update_cache:
- #key = str(porttree.name)+'/'+str(package)
- #cache_dict[key] = package.manifest_sha1
-
- existend_packages.append(package_object.pk)
- if not package_created:
- if package_object.check_or_need_update(package) or force_update:
- # need update
- update_package(package, package_object)
-
- continue
- add_related_to_package(package, package_object)
- if package_created:
- create_ebuilds(package, package_object)
-
- if delete:
- models.PackageModel.objects.filter(category = category_object, repository = porttree_obj).exclude(pk__in = existend_packages).delete()
-
-
-def scan_all_repos():
- global herds_cache, maintainers_cache
- #global cache_dict
- #cache_dict = anydbm.open('cache.db','c')
- herds_cache, maintainers_cache = scan_herds()
- for repo in portage.iter_trees():
- repo_obj, repo_created = models.RepositoryModel.objects.get_or_create(name = repo.name)
- scanpackages(repo, repo_obj)
- #cache_dict.close()
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-10 17:51 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-10 17:51 UTC (permalink / raw
To: gentoo-commits
commit: 1885cf27372ec2f34964d3323c2ffdb0322c6123
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Jun 10 17:10:26 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Jun 10 17:10:26 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=1885cf27
Add support for command modificators
---
.../packages/management/commands/scanpackages.py | 41 +++++++++--
gpackages/apps/packages/scan.py | 73 +++++++++++++++++---
2 files changed, 95 insertions(+), 19 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 8f47848..a1d5cd6 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -1,5 +1,4 @@
from django.core.management.base import BaseCommand, CommandError
-import datetime
import logging
from packages.scan import Scanner
from optparse import make_option
@@ -9,13 +8,39 @@ from optparse import make_option
class Command(BaseCommand):
- args = ''
+ option_list = BaseCommand.option_list + (
+ make_option('--force-update',
+ action='store_true',
+ dest='force_update',
+ default=False,
+ help='Force updating'),
+ make_option('--not-scan-herds',
+ action='store_false',
+ dest='scan_herds',
+ default=True,
+ help='Force updating'),
+ make_option('-a', '--all',
+ action='store_true',
+ dest='scan_all',
+ default=False,
+ help='Force updating'),
+ make_option('--not-show-time',
+ action='store_false',
+ dest='show_time',
+ default=True,
+ help='Show time of scanning'),
+ #make_option('-r', '--repo',
+ #action='store',
+ #type="string",
+ #dest='reponame',
+ #help='Scan only this repository'),
+ )
+
+ args = '<repository names ...>'
help = 'Will scan package tree and update info about it in database'
def handle(self, *args, **options):
verbosity = int(options['verbosity'])
- st = datetime.datetime.now()
- #scan.scanpackages()
- #scan.scan_all_repos()
- Scanner(verbosity = verbosity).scan_all_repos()
- self.stdout.write(unicode((datetime.datetime.now() - st).total_seconds()))
- self.stdout.write("\n")
+ Scanner(repos = args, **options).scan()
+ #Scanner(verbosity = verbosity).scan_all_repos()
+ #self.stdout.write(unicode((datetime.datetime.now() - st).total_seconds()))
+ #self.stdout.write("\n")
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 37ba159..411500f 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -1,3 +1,4 @@
+from datetime import datetime
from packages import models
import sys
from django.db import IntegrityError
@@ -86,9 +87,15 @@ def _get_items(items_list, Model, field_name, cache_var):
return items_objects
+def toint(val, defval):
+ try:
+ return int(val)
+ except ValueError:
+ return defval
+
class Scanner(object):
- def __init__(self, verbosity = 1):
+ def __init__(self, **kwargs):
# maintainers_cache: maintainer.email as key, and maintainer object as
# value
self.maintainers_cache = {}
@@ -106,7 +113,37 @@ class Scanner(object):
self.arches_cache = {}
- self.verbosity = int(verbosity)
+ self.update_options(**kwargs)
+ self.reset_timer()
+
+ def reset_timer(self):
+ self.start_time = datetime.now()
+
+ def update_options(self, **kwargs):
+ self.verbosity = toint(kwargs.get('verbosity',1),1)
+ self.traceback = bool(kwargs.get('traceback',False))
+ self.s_all = bool(kwargs.get('scan_all', False))
+ self.is_show_time = bool(kwargs.get('show_time', True))
+ self.is_scan_herds = bool(kwargs.get('scan_herds', True))
+ #self.force_update = bool(kwargs.get('force_update', False))
+ self.scan_repos_name = tuple(kwargs.get('repos',[]))
+
+ def show_time(self):
+ end = datetime.now()
+ t_time = end - self.start_time
+ self.output("Scanning time is: %s secconds.\n", t_time.total_seconds())
+
+ def scan(self):
+ if self.is_scan_herds:
+ self.scan_herds()
+
+ if self.s_all:
+ self.scan_all_repos()
+ else:
+ self.scan_repos_by_name(self.scan_repos_name)
+
+ if self.is_show_time:
+ self.show_time()
def write(self, what, verbosity = 1):
if verbosity <= self.verbosity:
@@ -177,6 +214,7 @@ class Scanner(object):
def scan_herds(self):
+ self.write('Scaning herds\n', 3)
existent_herds = self.get_existent_herds()
herds_dict = self.herds_object.get_herds_indict()
herds_objects_dict = {}
@@ -238,20 +276,33 @@ class Scanner(object):
self.load_maintainers_to_cache()
return self.maintainers_cache
- def scan_all_repos(self, scan_herds = True):
+ def scan_all_repos(self):
#cache_dict = anydbm.open('cache.db','c')
- if scan_herds:
- self.write('Scaning herds\n', 3)
- self.scan_herds()
for repo in portage.iter_trees():
- self.output("Scaning repository '%s'\n", repo.name, 3)
+ self.scan_repo(repo)
+ #cache_dict.close()
- repo_obj, repo_created = models.RepositoryModel.objects \
- .get_or_create(name = repo.name)
+ def scan_repos_by_name(self, repo_names):
+ for repo_name in repo_names:
+ self.scan_repo_by_name(repo_name)
- self.scanpackages(repo, repo_obj)
- #cache_dict.close()
+ def scan_repo_by_name(self, repo_name):
+ try:
+ repo = portage.get_tree_by_name(repo_name)
+ except ValueError:
+ self.output("Bad repository name '%s'", repo.name, 1)
+ else:
+ self.scan_repo(repo)
+
+ def scan_repo(self, repo):
+ self.output("Scaning repository '%s'\n", repo.name, 3)
+
+ repo_obj, repo_created = models.RepositoryModel \
+ .objects.get_or_create(name = repo.name)
+
+ self.scanpackages(repo, repo_obj)
+
def get_licenses_objects(self, ebuild):
licenses = ebuild.licenses
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-10 22:23 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-10 22:23 UTC (permalink / raw
To: gentoo-commits
commit: 80008434dd3688ad1b150080dfd29f61725e83d2
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Jun 10 21:21:18 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Jun 10 21:21:18 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=80008434
Add support of delete and force_update in scanpackages
---
.../packages/management/commands/scanpackages.py | 8 +++--
gpackages/apps/packages/scan.py | 38 ++++++++++++--------
2 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index a1d5cd6..97ed11e 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -29,6 +29,11 @@ class Command(BaseCommand):
dest='show_time',
default=True,
help='Show time of scanning'),
+ make_option('--not-del',
+ action='store_false',
+ dest='delete',
+ default=True,
+ help='Not delete'),
#make_option('-r', '--repo',
#action='store',
#type="string",
@@ -41,6 +46,3 @@ class Command(BaseCommand):
def handle(self, *args, **options):
verbosity = int(options['verbosity'])
Scanner(repos = args, **options).scan()
- #Scanner(verbosity = verbosity).scan_all_repos()
- #self.stdout.write(unicode((datetime.datetime.now() - st).total_seconds()))
- #self.stdout.write("\n")
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 411500f..ef28293 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -125,7 +125,8 @@ class Scanner(object):
self.s_all = bool(kwargs.get('scan_all', False))
self.is_show_time = bool(kwargs.get('show_time', True))
self.is_scan_herds = bool(kwargs.get('scan_herds', True))
- #self.force_update = bool(kwargs.get('force_update', False))
+ self.force_update = bool(kwargs.get('force_update', False))
+ self.delete = bool(kwargs.get('delete', True))
self.scan_repos_name = tuple(kwargs.get('repos',[]))
def show_time(self):
@@ -138,9 +139,12 @@ class Scanner(object):
self.scan_herds()
if self.s_all:
- self.scan_all_repos()
+ self.scan_all_repos(force_update = self.force_update,
+ delete = self.delete)
else:
- self.scan_repos_by_name(self.scan_repos_name)
+ self.scan_repos_by_name(self.scan_repos_name,
+ force_update = self.force_update,
+ delete = self.delete)
if self.is_show_time:
self.show_time()
@@ -276,32 +280,32 @@ class Scanner(object):
self.load_maintainers_to_cache()
return self.maintainers_cache
- def scan_all_repos(self):
+ def scan_all_repos(self, **kwargs):
#cache_dict = anydbm.open('cache.db','c')
for repo in portage.iter_trees():
- self.scan_repo(repo)
+ self.scan_repo(repo, **kwargs)
#cache_dict.close()
- def scan_repos_by_name(self, repo_names):
+ def scan_repos_by_name(self, repo_names, **kwargs):
for repo_name in repo_names:
- self.scan_repo_by_name(repo_name)
+ self.scan_repo_by_name(repo_name, **kwargs)
- def scan_repo_by_name(self, repo_name):
+ def scan_repo_by_name(self, repo_name, **kwargs):
try:
repo = portage.get_tree_by_name(repo_name)
except ValueError:
self.output("Bad repository name '%s'", repo.name, 1)
else:
- self.scan_repo(repo)
+ self.scan_repo(repo, **kwargs)
- def scan_repo(self, repo):
+ def scan_repo(self, repo, **kwargs):
self.output("Scaning repository '%s'\n", repo.name, 3)
repo_obj, repo_created = models.RepositoryModel \
.objects.get_or_create(name = repo.name)
- self.scanpackages(repo, repo_obj)
+ self.scanpackages(repo, repo_obj, **kwargs)
def get_licenses_objects(self, ebuild):
@@ -402,7 +406,9 @@ class Scanner(object):
self.clear_related_to_package(package_object)
self.add_related_to_package(package, package_object)
- def update_ebuilds(self, package, package_object, delete = True):
+ def update_ebuilds(self, package, package_object, delete = True,
+ force_update = False):
+
not_del = []
for ebuild in package.iter_ebuilds():
ebuild_object, ebuild_created = models.EbuildModel.objects \
@@ -413,7 +419,7 @@ class Scanner(object):
self.add_related_to_ebuild(ebuild, ebuild_object)
self.output("ebuild created '%s'\n", ebuild_object, 3)
- if ebuild_object.check_or_need_update(ebuild):
+ if ebuild_object.check_or_need_update(ebuild) or force_update:
ebuild_object.update_by_ebuild(ebuild)
self.update_related_to_ebuild(ebuild, ebuild_object)
ebuild_object.save(force_update = True)
@@ -429,7 +435,8 @@ class Scanner(object):
self.update_related_to_package(package, package_object)
if package_object.need_update_ebuilds(package) or force_update:
- self.update_ebuilds(package, package_object)
+ self.update_ebuilds(package, package_object,
+ force_update = force_update)
package_object.update_info(package)
package_object.save(force_update = True)
@@ -466,7 +473,8 @@ class Scanner(object):
if not package_created:
if package_object.check_or_need_update(package) or force_update:
# need update
- self.update_package(package, package_object)
+ self.update_package(package, package_object,
+ force_update = force_update)
continue
# if package_created:
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-13 22:15 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-13 22:15 UTC (permalink / raw
To: gentoo-commits
commit: d34d69c598241b44661c494cd85fcf20244ce910
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Jun 13 15:17:53 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Jun 13 15:17:53 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=d34d69c5
Update console interface fo scanherds and scanusedesc
---
.../apps/packages/management/commands/scanherds.py | 16 +++++++----
.../packages/management/commands/scanusedesc.py | 27 ++++++++++++++-----
gpackages/apps/packages/managers.py | 4 +-
gpackages/apps/packages/scan.py | 23 +++++++++++++---
4 files changed, 50 insertions(+), 20 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanherds.py b/gpackages/apps/packages/management/commands/scanherds.py
index 43f10c3..31bc107 100644
--- a/gpackages/apps/packages/management/commands/scanherds.py
+++ b/gpackages/apps/packages/management/commands/scanherds.py
@@ -1,13 +1,17 @@
from django.core.management.base import BaseCommand, CommandError
-import datetime
-import logging
-from packages import scan
+from packages.scan import Scanner
+from optparse import make_option
class Command(BaseCommand):
+ option_list = BaseCommand.option_list + (
+ make_option('--not-show-time',
+ action='store_false',
+ dest='show_time',
+ default=True,
+ help='Show time of scanning'),
+ )
args = ''
help = 'Will scan only herds and maintainers'
def handle(self, *args, **options):
- st = datetime.datetime.now()
- scan.scan_herds()
- print (datetime.datetime.now() - st).total_seconds()
+ Scanner(scan_herds = True, **options).scan()
diff --git a/gpackages/apps/packages/management/commands/scanusedesc.py b/gpackages/apps/packages/management/commands/scanusedesc.py
index e0ca2b8..705314f 100644
--- a/gpackages/apps/packages/management/commands/scanusedesc.py
+++ b/gpackages/apps/packages/management/commands/scanusedesc.py
@@ -1,14 +1,27 @@
from django.core.management.base import BaseCommand, CommandError
-import datetime
-import logging
-from packages import scan
+from packages.scan import Scanner
+from optparse import make_option
class Command(BaseCommand):
+ option_list = BaseCommand.option_list + (
+ make_option('-g','--no-globals',
+ action='store_false',
+ dest='scan_global_use',
+ default=True,
+ help='Don\'t scan globals use descriptions'),
+ make_option('-l', '--no-locals',
+ action='store_false',
+ dest='scan_local_use',
+ default=True,
+ help='Don\'t scan globals use descriptions'),
+ make_option('--not-show-time',
+ action='store_false',
+ dest='show_time',
+ default=True,
+ help='Show time of scanning'),
+ )
args = ''
help = 'Will scan use descriptions'
def handle(self, *args, **options):
- st = datetime.datetime.now()
- scan.update_globals_uses_descriptions()
- scan.scan_uses_description()
- print (datetime.datetime.now() - st).total_seconds()
+ Scanner(**options).scan()
diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
index 7d02c05..ca1561c 100644
--- a/gpackages/apps/packages/managers.py
+++ b/gpackages/apps/packages/managers.py
@@ -104,13 +104,13 @@ def get_name_and_category_by_cp(package):
class VirtualPackageMixin(object):
- def filter(self, **kwargs):
+ def filter(self,*args, **kwargs):
package = get_from_kwargs_and_del('package', kwargs)
if package is not None:
category, name = get_name_and_category_by_cp(package)
kwargs.update({'name': name, 'category__category': category})
- return super(VirtualPackageMixin, self).filter(**kwargs)
+ return super(VirtualPackageMixin, self).filter(*args, **kwargs)
_gen_all_query_and_manager('Mixin', 'QuerySet', 'Manager',
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 3417c12..cdd9538 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -127,6 +127,8 @@ class Scanner(object):
self.force_update = bool(kwargs.get('force_update', False))
self.delete = bool(kwargs.get('delete', True))
self.scan_repos_name = tuple(kwargs.get('repos',[]))
+ self.scan_global_use_descr = bool(kwargs.get('scan_global_use', False))
+ self.scan_local_use_descr = bool(kwargs.get('scan_local_use', False))
def show_time(self):
end = datetime.now()
@@ -140,11 +142,17 @@ class Scanner(object):
if self.s_all:
self.scan_all_repos(force_update = self.force_update,
delete = self.delete)
- else:
+ elif len(self.scan_repos_name) > 0:
self.scan_repos_by_name(self.scan_repos_name,
force_update = self.force_update,
delete = self.delete)
+ if self.scan_global_use_descr:
+ self.update_all_globals_uses_descriptions()
+
+ if self.scan_local_use_descr:
+ self.scan_all_uses_description()
+
if self.is_show_time:
self.show_time()
@@ -497,7 +505,7 @@ class Scanner(object):
.filter(name__in = use_dict.keys())
for use_object in existend_use_objects:
- use_object.description = use_dict[use_object.name]
+ use_object.description = use_dict[use_object.name.lower()]
use_object.save(force_update = True)
def update_all_globals_uses_descriptions(self):
@@ -507,7 +515,9 @@ class Scanner(object):
self.scan_uses_description(portage.get_all_use_local_desc())
def scan_uses_description(self, use_local_desc):
- existent_use_objects = models.UseFlagModel.objects.filter(name__in = use_local_desc.keys())
+ existent_use_objects = models.UseFlagModel.objects \
+ .filter(name__in = use_local_desc.keys())
+
existent_use_local_descr = models.UseFlagDescriptionModel.objects.all()
cache_uses = {}
_update_cache_by_queryset(cache_uses, existent_use_objects, 'name')
@@ -522,7 +532,8 @@ class Scanner(object):
# If this use flag not in database than create it
if use_flag not in cache_uses:
# Maybe get_or_create ?
- use_flag_object = models.UseFlagModel.objects.create(name = use_flag)
+ use_flag_object = models.UseFlagModel.objects \
+ .create(name = use_flag)
# Add to cache
cache_uses[use_flag.lower()] = use_flag_object
else:
@@ -534,7 +545,9 @@ class Scanner(object):
package_object = package_cache[package]
else:
try:
- package_object = models.VirtualPackageModel.objects.get(package = package)
+ package_object = models.VirtualPackageModel.objects \
+ .get(package = package)
+
except models.VirtualPackageModel.DoesNotExist:
continue
else:
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-18 23:00 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-18 23:00 UTC (permalink / raw
To: gentoo-commits
commit: b3156c48319c9773cf38b5ad3cc77c061c14bb49
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Jun 18 23:00:41 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Jun 18 23:00:41 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=b3156c48
Add updating repository info to scan utility
---
.../packages/management/commands/scanpackages.py | 5 +++++
gpackages/apps/packages/models.py | 10 +++++++++-
gpackages/apps/packages/scan.py | 12 +++++++++---
3 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 97ed11e..71c308c 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -24,6 +24,11 @@ class Command(BaseCommand):
dest='scan_all',
default=False,
help='Force updating'),
+ make_option('-r', '--update-repo',
+ action='store_true',
+ dest='update_repo',
+ default=False,
+ help='Update repository info'),
make_option('--not-show-time',
action='store_false',
dest='show_time',
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 5140911..1f7c6e8 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -91,7 +91,7 @@ class RepositoryModel(AbstractDateTimeModel):
RepositorySourceModel.objects.bulk_create(ret)
def clear_related_sources(self):
- self.repositorysourcemodel_set.clear()
+ RepositorySourceModel.objects.filter(repository = self).delete()
def update_related_sources(self, repo):
self.clear_related_sources()
@@ -101,6 +101,14 @@ class RepositoryModel(AbstractDateTimeModel):
self.add_related_feeds(repo)
self.add_related_sources(repo)
+ def clear_related(self):
+ self.clear_related_feeds()
+ self.clear_related_sources()
+
+ def update_related(self, repo):
+ self.clear_related()
+ self.add_related(repo)
+
def __unicode__(self):
return self.name
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 76573ce..8d8fed9 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -125,6 +125,7 @@ class Scanner(object):
self.is_show_time = bool(kwargs.get('show_time', True))
self.is_scan_herds = bool(kwargs.get('scan_herds', True))
self.force_update = bool(kwargs.get('force_update', False))
+ self.update_repo = bool(kwargs.get('update_repo', False))
self.delete = bool(kwargs.get('delete', True))
self.scan_repos_name = tuple(kwargs.get('repos',[]))
self.scan_global_use_descr = bool(kwargs.get('scan_global_use', False))
@@ -141,11 +142,13 @@ class Scanner(object):
if self.s_all:
self.scan_all_repos(force_update = self.force_update,
- delete = self.delete)
+ delete = self.delete,
+ update_repo = self.update_repo)
elif len(self.scan_repos_name) > 0:
self.scan_repos_by_name(self.scan_repos_name,
force_update = self.force_update,
- delete = self.delete)
+ delete = self.delete,
+ update_repo = self.update_repo)
if self.scan_global_use_descr:
self.update_all_globals_uses_descriptions()
@@ -306,13 +309,16 @@ class Scanner(object):
else:
self.scan_repo(repo, **kwargs)
- def scan_repo(self, repo, **kwargs):
+ def scan_repo(self, repo, update_repo = False, **kwargs):
self.output("Scaning repository '%s'\n", repo.name, 3)
repo_obj, repo_created = models.RepositoryModel \
.objects.get_or_create(repo = repo)
if not repo_created:
+ if update_repo:
+ repo_obj.update_metadata(repo)
+ repo_obj.update_related(repo)
#Update modification time
repo_obj.save(force_update = True)
else:
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-06-19 0:12 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-06-19 0:12 UTC (permalink / raw
To: gentoo-commits
commit: cc5fc55fac985559a64b8cfffbe183b2928a4674
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Jun 19 00:11:54 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Jun 19 00:11:54 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=cc5fc55f
Add scaning utility for repo info
---
.../packages/management/commands/scanpackages.py | 3 +-
.../packages/management/commands/scanrepoinfo.py | 29 +++++++++++
gpackages/apps/packages/scan.py | 51 +++++++++++++++++---
3 files changed, 74 insertions(+), 9 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 71c308c..3809ff4 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -49,5 +49,4 @@ class Command(BaseCommand):
args = '<repository names ...>'
help = 'Will scan package tree and update info about it in database'
def handle(self, *args, **options):
- verbosity = int(options['verbosity'])
- Scanner(repos = args, **options).scan()
+ Scanner(repos = args, packages = True, **options).scan()
diff --git a/gpackages/apps/packages/management/commands/scanrepoinfo.py b/gpackages/apps/packages/management/commands/scanrepoinfo.py
new file mode 100644
index 0000000..19049c4
--- /dev/null
+++ b/gpackages/apps/packages/management/commands/scanrepoinfo.py
@@ -0,0 +1,29 @@
+from django.core.management.base import BaseCommand, CommandError
+from packages.scan import Scanner
+from optparse import make_option
+
+
+class Command(BaseCommand):
+ option_list = BaseCommand.option_list + (
+ make_option('--not-show-time',
+ action='store_false',
+ dest='show_time',
+ default=True,
+ help='Show time of scanning'),
+ make_option('-d' ,'--del',
+ action='store_true',
+ dest='delete',
+ default=False,
+ help='Delete'),
+ )
+
+ args = '<repository names ...>'
+ help = 'Will scan repositories info'
+ def handle(self, *args, **options):
+ if len(args) > 0:
+ scan_all = False
+ else:
+ scan_all = True
+
+ Scanner(repos = args, scan_all = scan_all,
+ only_repo_info = True, **options).scan()
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 8d8fed9..3e5cf81 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -122,6 +122,8 @@ class Scanner(object):
self.verbosity = toint(kwargs.get('verbosity',1),1)
self.traceback = bool(kwargs.get('traceback',False))
self.s_all = bool(kwargs.get('scan_all', False))
+ self.s_packages = bool(kwargs.get('packages', False))
+ self.s_only_repo_info = bool(kwargs.get('only_repo_info', False))
self.is_show_time = bool(kwargs.get('show_time', True))
self.is_scan_herds = bool(kwargs.get('scan_herds', True))
self.force_update = bool(kwargs.get('force_update', False))
@@ -140,15 +142,19 @@ class Scanner(object):
if self.is_scan_herds:
self.scan_herds()
- if self.s_all:
+ if self.s_all and self.s_packages:
self.scan_all_repos(force_update = self.force_update,
delete = self.delete,
update_repo = self.update_repo)
- elif len(self.scan_repos_name) > 0:
+ elif len(self.scan_repos_name) > 0 and self.s_packages:
self.scan_repos_by_name(self.scan_repos_name,
force_update = self.force_update,
delete = self.delete,
update_repo = self.update_repo)
+ elif self.s_only_repo_info and self.s_all:
+ self.scan_all_repo_info(delete = self.delete)
+ elif self.s_only_repo_info and len(self.scan_repos_name) > 0:
+ self.scan_repo_info_by_names(self.scan_repos_name)
if self.scan_global_use_descr:
self.update_all_globals_uses_descriptions()
@@ -301,17 +307,25 @@ class Scanner(object):
for repo_name in repo_names:
self.scan_repo_by_name(repo_name, **kwargs)
- def scan_repo_by_name(self, repo_name, **kwargs):
+ def get_repo_by_name(self, repo_name, quiet = False, trace = False):
try:
repo = portage.get_tree_by_name(repo_name)
except ValueError:
- self.output("Bad repository name '%s'\n", repo_name, 1)
+ if not quiet:
+ self.output("Bad repository name '%s'\n", repo_name, 1)
+ if trace:
+ raise
+ return None
else:
- self.scan_repo(repo, **kwargs)
+ return repo
- def scan_repo(self, repo, update_repo = False, **kwargs):
- self.output("Scaning repository '%s'\n", repo.name, 3)
+ def scan_repo_by_name(self, repo_name, **kwargs):
+ repo = self.get_repo_by_name(repo_name)
+
+ if repo is not None:
+ self.scan_repo(repo, **kwargs)
+ def get_repo_obj(self, repo, update_repo = False):
repo_obj, repo_created = models.RepositoryModel \
.objects.get_or_create(repo = repo)
@@ -324,6 +338,29 @@ class Scanner(object):
else:
repo_obj.add_related(repo)
+ return repo_obj
+
+ def scan_all_repo_info(self, delete = False):
+ ex_pk = []
+ for repo in portage.iter_trees():
+ repo_obj = self.get_repo_obj(repo, update_repo = True)
+ self.output("Scaned [%s]\n", repo.name)
+ ex_pk.append(repo_obj.pk)
+
+ if delete:
+ models.RepositoryModel.objects.exclude(pk__in = ex_pk).delete()
+
+ def scan_repo_info_by_names(self, repo_list):
+ for repo_name in repo_list:
+ repo = self.get_repo_by_name(repo_name)
+ if repo is not None:
+ self.get_repo_obj(repo, update_repo = True)
+ self.output("Scaned [%s]\n", repo.name)
+
+ def scan_repo(self, repo, update_repo = False, **kwargs):
+ self.output("Scaning repository '%s'\n", repo.name, 3)
+
+ repo_obj = self.get_repo_obj(repo, update_repo = update_repo)
self.scanpackages(repo, repo_obj, **kwargs)
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-07-05 23:27 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-07-05 23:27 UTC (permalink / raw
To: gentoo-commits
commit: a9a583d239e6c5e7c07e648ad780975c4be47652
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Thu Jul 5 22:32:45 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Thu Jul 5 22:32:45 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=a9a583d2
Add metaclass for autogenerate stats fields
---
.../packages/management/commands/update_stats.py | 13 +----
gpackages/apps/packages/models.py | 63 ++++++++------------
gpackages/apps/packages/stats.py | 56 ++++++++++++++++-
3 files changed, 79 insertions(+), 53 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/update_stats.py b/gpackages/apps/packages/management/commands/update_stats.py
index 39b7155..37502fd 100644
--- a/gpackages/apps/packages/management/commands/update_stats.py
+++ b/gpackages/apps/packages/management/commands/update_stats.py
@@ -1,19 +1,10 @@
from django.core.management.base import BaseCommand, CommandError
from optparse import make_option
-from packages import models
-from packages.stats import StatsMixin
-import inspect
-
-
-def get_predicate(obj):
- if inspect.isclass(obj) and issubclass(obj, StatsMixin):
- return obj != StatsMixin
+from packages.stats import update_all_stats
class Command(BaseCommand):
args = ''
help = 'Will update stats in models'
def handle(self, *args, **options):
- models_list = inspect.getmembers(models, get_predicate)
- for model_name, model in models_list:
- model.calc_stats()
+ update_all_stats()
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index efb4638..73b1f42 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -6,7 +6,7 @@ from package_info.generic import get_from_kwargs_and_del
from package_info.repo_info import REPOS_TYPE
# relative
from .keywords import KeywordRepr
-from .stats import StatsMixin
+from .stats import StatsModel
#from utils import get_link
from package_info.validators import validate_url, validate_email, \
validate_name
@@ -91,7 +91,7 @@ class ArchesModel(models.Model):
def __unicode__(self):
return self.name
-class RepositoryModel(StatsMixin, AbstractDateTimeModel):
+class RepositoryModel(StatsModel, AbstractDateTimeModel):
QUALITY_CHOICES = ( (0, 'stable'),
(1, 'testing'),
(2, 'experimental'),
@@ -119,10 +119,8 @@ class RepositoryModel(StatsMixin, AbstractDateTimeModel):
official = models.BooleanField(default = False)
quality = models.PositiveSmallIntegerField(choices = QUALITY_CHOICES)
- # Maybe in future auto generate this field by metaclass ?
- # For fast stats
- packages_count = models.PositiveIntegerField(default = 0)
- ebuilds_count = models.PositiveIntegerField(default = 0)
+ # Autogenerated fields for fast stats:
+ # packages_count, ebuilds_count
objects = managers.RepositoryManager()
@@ -206,7 +204,7 @@ class RepositorySourceModel(models.Model):
def __unicode__(self):
return self.url
-class CategoryModel(StatsMixin, models.Model):
+class CategoryModel(StatsModel):
def __init__(self, *args, **kwargs):
super(CategoryModel, self).__init__(*args, **kwargs)
@@ -232,17 +230,13 @@ class CategoryModel(StatsMixin, models.Model):
description = models.TextField(blank = True, null = True)
metadata_hash = models.CharField(max_length = 128, null = True)
- # Maybe in future auto generate this field by metaclass ?
- # For fast stats
- virtual_packages_count = models.PositiveIntegerField(default = 0)
- packages_count = models.PositiveIntegerField(default = 0)
- repositories_count = models.PositiveIntegerField(default = 0)
- ebuilds_count = models.PositiveIntegerField(default = 0)
+ # Autogenerated fields for fast stats
+ #virtual_packages_count, packages_count, repositories_count, ebuilds_count
def __unicode__(self):
return unicode(self.category)
-class MaintainerModel(StatsMixin, AbstractDateTimeModel):
+class MaintainerModel(StatsModel, AbstractDateTimeModel):
def __init__(self, *args, **kwargs):
maintainer = get_from_kwargs_and_del('maintainer', kwargs)
@@ -254,7 +248,7 @@ class MaintainerModel(StatsMixin, AbstractDateTimeModel):
('packages_count', 'packagemodel'),
('herds_count', 'herdsmodel'),
('ebuilds_count', 'packagemodel__ebuildmodel'),
- ('repositories_count', 'packagemodel__ebuildmodel'),
+ ('repositories_count', 'packagemodel__repository'),
('news_author_count', 'author_news_set'),
('news_translator_count', 'translator_news_set')
)
@@ -262,15 +256,9 @@ class MaintainerModel(StatsMixin, AbstractDateTimeModel):
name = models.CharField(max_length = 255, blank = True, null = True)
email = models.EmailField(unique = True, validators = [validate_email], db_index = True)
- # For fast stats
- # Maybe use django-composition ?
- # Maybe in future auto generate this field by metaclass ?
- herds_count = models.PositiveIntegerField(default = 0)
- packages_count = models.PositiveIntegerField(default = 0)
- ebuilds_count = models.PositiveIntegerField(default = 0)
- repositories_count = models.PositiveIntegerField(default = 0)
- news_author_count = models.PositiveIntegerField(default = 0)
- news_translator_count = models.PositiveIntegerField(default = 0)
+ # Autogenerated fields for fast stats
+ # herds_count packages_count ebuilds_count repositories_count
+ # news_author_count news_translator_count
objects = managers.MaintainerManager()
@@ -291,7 +279,7 @@ class MaintainerModel(StatsMixin, AbstractDateTimeModel):
class Meta:
ordering = ('name',)
-class HerdsModel(StatsMixin, AbstractDateTimeModel):
+class HerdsModel(StatsModel, AbstractDateTimeModel):
def __init__(self, *args, **kwargs):
herd = get_from_kwargs_and_del('herd', kwargs)
@@ -311,13 +299,8 @@ class HerdsModel(StatsMixin, AbstractDateTimeModel):
description = models.TextField(blank = True, null = True)
maintainers = models.ManyToManyField(MaintainerModel, blank = True)
- # For fast stats
- # Maybe use django-composition ?
- # Maybe in future auto generate this field by metaclass ?
- maintainers_count = models.PositiveIntegerField(default = 0)
- packages_count = models.PositiveIntegerField(default = 0)
- ebuilds_count = models.PositiveIntegerField(default = 0)
- repositories_count = models.PositiveIntegerField(default = 0)
+ # Autogenerated fields for fast stats
+ # maintainers_count packages_count ebuilds_count repositories_count
objects = managers.HerdsManager()
@@ -364,7 +347,7 @@ class VirtualPackageModel(models.Model):
class Meta:
unique_together = ('name', 'category')
-class PackageModel(StatsMixin, AbstractDateTimeModel):
+class PackageModel(StatsModel, AbstractDateTimeModel):
def __init__(self, *args, **kwargs):
package_object, category = \
@@ -394,7 +377,8 @@ class PackageModel(StatsMixin, AbstractDateTimeModel):
repository = models.ForeignKey(RepositoryModel, db_index = True)
# Different versions can have different licenses, or homepages.
- ebuilds_count = models.PositiveIntegerField(default = 0)
+ # Autogenerated fields for fast stats
+ # ebuilds_count = models.PositiveIntegerField(default = 0)
objects = managers.PackageManager()
@@ -473,7 +457,7 @@ class PackageModel(StatsMixin, AbstractDateTimeModel):
unique_together = ('virtual_package', 'repository')
ordering = ('-updated_datetime',)
-class UseFlagModel(StatsMixin, models.Model):
+class UseFlagModel(StatsModel):
stats_params = (
('ebuilds_count', 'ebuildmodel'),
)
@@ -481,7 +465,8 @@ class UseFlagModel(StatsMixin, models.Model):
name = models.CharField(unique = True, max_length = 60, db_index = True)
description = models.TextField(blank = True)
- ebuilds_count = models.PositiveIntegerField(default = 0)
+ # Autogenerated fields for fast stats
+ #ebuilds_count = models.PositiveIntegerField(default = 0)
def __unicode__(self):
return self.name
@@ -503,14 +488,16 @@ class UseFlagDescriptionModel(models.Model):
class Meta:
unique_together = ('use_flag', 'package')
-class LicenseModel(StatsMixin, models.Model):
+class LicenseModel(StatsModel):
stats_params = (
('ebuilds_count', 'ebuildmodel'),
)
name = models.CharField(unique = True, max_length = 60, db_index = True)
#description = TextField()
- ebuilds_count = models.PositiveIntegerField(default = 0)
+
+ # Autogenerated fields for fast stats
+ #ebuilds_count = models.PositiveIntegerField(default = 0)
def __unicode__(self):
return self.name
diff --git a/gpackages/apps/packages/stats.py b/gpackages/apps/packages/stats.py
index 9bf3efa..b506793 100644
--- a/gpackages/apps/packages/stats.py
+++ b/gpackages/apps/packages/stats.py
@@ -1,12 +1,22 @@
-from django.db.models import Count
-from itertools import starmap
+from django.db import models
+from itertools import starmap, ifilter
+import inspect
+from django.db.models.base import ModelBase
+from django.db.models.loading import get_models
+
+def get_predicate(obj):
+ if inspect.isclass(obj) and issubclass(obj, StatsMixin):
+ return obj != StatsMixin
+
+def filter_models(models_list):
+ return ifilter(get_predicate, models_list)
gen_prefix = lambda x: x + '_prefix'
def gen_query_dict(params):
query_dict = {}
for key, value in starmap(lambda x,y: (gen_prefix(x), y), params):
- query_dict[key] = Count(value, distinct = True)
+ query_dict[key] = models.Count(value, distinct = True)
return query_dict
@@ -24,8 +34,46 @@ def update_stats(model, params):
class StatsMixin(object):
- stats_params = ((),)
+ #iterable of 2-tuples
+ stats_params = ()
@classmethod
def calc_stats(cls):
update_stats(cls, cls.stats_params)
+
+def get_stats_models(module):
+ return inspect.getmembers(module, get_predicate)
+
+def update_stats_for_models(models_list):
+ for model in models_list:
+ model.calc_stats()
+
+def update_all_stats():
+ update_stats_for_models(filter_models(get_models()))
+
+class StatsModelBase(ModelBase):
+
+ def __init__(cls, name, bases, attrs):
+ super(StatsModelBase, cls).__init__(name, bases, attrs)
+ stats_m = False
+ for base in bases:
+ if issubclass(base, StatsMixin):
+ stats_m = True
+ break
+ #if not stats_m or not hasattr(cls, stats_params):
+ if not (stats_m and hasattr(cls, 'stats_params')):
+ return None
+
+ if not cls.stats_params:
+ return None
+
+ for key, value in cls.stats_params:
+ if not hasattr(cls, key):
+ cls.add_to_class(key, models. \
+ PositiveIntegerField(default = 0, editable = False))
+
+class StatsModel(StatsMixin, models.Model):
+ __metaclass__ = StatsModelBase
+
+ class Meta:
+ abstract = True
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-07-06 23:09 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-07-06 23:09 UTC (permalink / raw
To: gentoo-commits
commit: a5f76db6b3de800069672038421943b26a6b1bd2
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Fri Jul 6 16:04:00 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Fri Jul 6 16:04:00 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=a5f76db6
Save license text to database
---
.../management/commands/scanlicensetext.py | 17 +++++++++++++++++
gpackages/apps/packages/models.py | 3 ++-
gpackages/apps/packages/scan.py | 12 ++++++++++++
3 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanlicensetext.py b/gpackages/apps/packages/management/commands/scanlicensetext.py
new file mode 100644
index 0000000..40f9de4
--- /dev/null
+++ b/gpackages/apps/packages/management/commands/scanlicensetext.py
@@ -0,0 +1,17 @@
+from django.core.management.base import BaseCommand, CommandError
+from packages.scan import Scanner
+from optparse import make_option
+
+
+class Command(BaseCommand):
+ option_list = BaseCommand.option_list + (
+ make_option('--not-show-time',
+ action='store_false',
+ dest='show_time',
+ default=True,
+ help='Show time of scanning'),
+ )
+ args = ''
+ help = 'Will scan license text'
+ def handle(self, *args, **options):
+ Scanner(license_text = True, **options).scan()
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 1bfc2ba..c89db88 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -494,7 +494,8 @@ class LicenseModel(StatsModel):
)
name = models.CharField(unique = True, max_length = 60, db_index = True)
- #description = TextField()
+ text = models.TextField(null = True)
+ #description = models.TextField()
# Autogenerated fields for fast stats
#ebuilds_count = models.PositiveIntegerField(default = 0)
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 0fdf488..e0cc09c 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -129,6 +129,7 @@ class Scanner(object):
self.scan_local_use_descr = bool_get('scan_local_use', False)
self.is_scan_license_groups = bool_get('scan_license_groups', False)
self.is_scan_news = bool_get('scan_news', False)
+ self.is_scan_license_text = bool_get('license_text', False)
def show_time(self):
"Prints scan time"
@@ -168,6 +169,9 @@ class Scanner(object):
if self.is_scan_news:
self.scan_news()
+ if self.is_scan_license_text:
+ self.scan_license_text()
+
if self.is_show_time:
self.show_time()
@@ -702,3 +706,11 @@ class Scanner(object):
n_obj.save(force_update = True)
self.update_related_to_news(n, n_obj)
+ def scan_license_text(self):
+ licenses = models.LicenseModel.objects.all()
+ for license in licenses:
+ text = porttree.licenses.get_license(license.name)
+ if text:
+ license.text = smart_unicode(text, errors='ignore')
+ license.save(force_update = True)
+
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-07-17 9:42 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-07-17 9:42 UTC (permalink / raw
To: gentoo-commits
commit: 5d4b702043c85469bf2d7ffc80221c8ae7f12462
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Jul 16 15:30:12 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Jul 16 15:30:12 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=5d4b7020
Clear cache after update packages
---
.../packages/management/commands/scanpackages.py | 5 +++++
gpackages/apps/packages/scan.py | 5 +++++
2 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index ce694fe..f3b1e2c 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -39,6 +39,11 @@ class Command(BaseCommand):
dest='delete',
default=True,
help='Not delete'),
+ make_option('--clear-cache',
+ action='store_true',
+ dest='cache_clear',
+ default=False,
+ help='Clear cache'),
make_option('--not-license-groups',
action='store_false',
dest='scan_license_groups',
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 9135021..1460698 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -7,6 +7,7 @@ from django.utils.encoding import smart_unicode
from collections import defaultdict
from package_info.generic import StrThatIgnoreCase, toint
from package_info.porttree import porttree
+from django.core.cache import cache as cache_backend
import anydbm
@@ -131,6 +132,7 @@ class Scanner(object):
self.is_scan_license_groups = bool_get('scan_license_groups', False)
self.is_scan_news = bool_get('scan_news', False)
self.is_scan_license_text = bool_get('license_text', False)
+ self.is_cache_clear = bool_get('cache_clear', False)
def show_time(self):
"Prints scan time"
@@ -173,6 +175,9 @@ class Scanner(object):
if self.is_scan_license_text:
self.scan_license_text()
+ if self.is_cache_clear:
+ cache_backend.clear()
+
if self.is_show_time:
self.show_time()
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-07-18 23:03 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-07-18 23:03 UTC (permalink / raw
To: gentoo-commits
commit: a283371444516c287f9110056d2e84fc55c83345
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Jul 18 23:03:16 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Jul 18 23:03:16 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=a2833714
Add utility for setting link to latest ebuild in package
---
.../management/commands/setlatestebuilds.py | 17 +++++++++++++++++
gpackages/apps/packages/scan.py | 15 +++++++++++++++
2 files changed, 32 insertions(+), 0 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/setlatestebuilds.py b/gpackages/apps/packages/management/commands/setlatestebuilds.py
new file mode 100644
index 0000000..9b64673
--- /dev/null
+++ b/gpackages/apps/packages/management/commands/setlatestebuilds.py
@@ -0,0 +1,17 @@
+from django.core.management.base import BaseCommand, CommandError
+from packages.scan import Scanner
+from optparse import make_option
+
+
+class Command(BaseCommand):
+ option_list = BaseCommand.option_list + (
+ make_option('--not-show-time',
+ action='store_false',
+ dest='show_time',
+ default=True,
+ help='Show time of scanning'),
+ )
+ args = ''
+ help = 'Will set link to latest ebuilds in package model'
+ def handle(self, *args, **options):
+ Scanner(set_latest_ebuilds = True, **options).scan()
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 1460698..a02975b 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -133,6 +133,7 @@ class Scanner(object):
self.is_scan_news = bool_get('scan_news', False)
self.is_scan_license_text = bool_get('license_text', False)
self.is_cache_clear = bool_get('cache_clear', False)
+ self.is_set_latest_ebuilds = bool_get('set_latest_ebuilds', False)
def show_time(self):
"Prints scan time"
@@ -160,6 +161,9 @@ class Scanner(object):
elif self.s_only_repo_info and len(self.scan_repos_name) > 0:
self.scan_repo_info_by_names(self.scan_repos_name)
+ if self.is_set_latest_ebuilds:
+ self.set_latest_ebuilds_to_package()
+
if self.scan_global_use_descr:
self.update_all_globals_uses_descriptions()
@@ -724,3 +728,14 @@ class Scanner(object):
license.text = smart_unicode(text, errors='ignore')
license.save(force_update = True)
+ @staticmethod
+ def set_latest_ebuilds_to_package():
+ for package in models.PackageModel.objects.only('pk').iterator():
+ # search latest ebuild should done by version and revison
+ # and database could not allow smart order by version becaouse
+ # version are compared as string
+ ebuilds = package.ebuildmodel_set.only('version', 'revision').all()
+ latest_ebuild = max(ebuilds, key = lambda x: x.version_cmp)
+ # Hack for not update last modified datetime
+ models.PackageModel.objects.filter(pk = package.pk). \
+ update(latest_ebuild = latest_ebuild)
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-08-22 17:55 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-08-22 17:55 UTC (permalink / raw
To: gentoo-commits
commit: fb52b4806558ffcc31630ed0721028f933809b4c
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Aug 21 17:19:25 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Aug 21 17:19:25 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=fb52b480
Improve updateebuildmask command
---
.../management/commands/updateebuildmask.py | 10 +++++-
gpackages/apps/packages/scan.py | 31 +++++++++++++-------
2 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/updateebuildmask.py b/gpackages/apps/packages/management/commands/updateebuildmask.py
index a26554d..15a0ec5 100644
--- a/gpackages/apps/packages/management/commands/updateebuildmask.py
+++ b/gpackages/apps/packages/management/commands/updateebuildmask.py
@@ -10,8 +10,14 @@ class Command(BaseCommand):
dest='show_time',
default=True,
help='Show time of scanning'),
+ make_option('-m', '--update-missing',
+ action='store_true',
+ dest='missing',
+ default=False,
+ help='Add missing ebuilds'),
)
args = ''
- help = 'Will add missing ebuilds'
+ help = 'Will update ebuild mask status'
def handle(self, *args, **options):
- Scanner(**options).update_ebuild_mask()
+ missing = options.get('missing', False) # maybe move it to function ?
+ Scanner(**options).update_ebuild_mask(missing = missing)
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 660fcc3..84d73f5 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -773,27 +773,35 @@ class Scanner(object):
models.PackageModel.objects.filter(pk = package_id). \
update(latest_ebuild = latest_ebuild)
+ def missing_ebuild(self, ebuild):
+ try:
+ package_obj = models.PackageModel.objects. \
+ get(package = ebuild.package)
+
+ except models.PackageModel.DoesNotExist:
+ pass
+ else:
+ # Don't run this for updated packages
+ if package_obj.manifest_hash == ebuild.package.manifest_sha1:
+ self.output('%-44s [%s]M\n', (ebuild,
+ ebuild.package.category.porttree_name))
+ self.update_ebuilds(ebuild.package, package_obj)
+
def add_mising_ebuilds(self):
for ebuild in porttree.iter_ebuilds():
try:
ebuild_obj = models.EbuildModel.objects.get(ebuild = ebuild)
except models.EbuildModel.DoesNotExist:
- self.output('%-44s [%s]\n', (ebuild,
- ebuild.package.category.porttree_name))
- try:
- package_obj = models.PackageModel.objects. \
- get(package = ebuild.package)
-
- except models.PackageModel.DoesNotExist:
- pass
- else:
- self.update_ebuilds(ebuild.package, package_obj)
+ self.missing_ebuild(ebuild)
- def update_ebuild_mask(self):
+ def update_ebuild_mask(self, missing = False):
for ebuild in porttree.iter_ebuilds():
try:
ebuild_obj = models.EbuildModel.objects.get(ebuild = ebuild)
except models.EbuildModel.DoesNotExist:
+ if missing:
+ self.missing_ebuild(ebuild)
+
continue
if ebuild_obj.is_hard_masked != ebuild.is_hard_masked:
self.output('%-44s [%s]\n', (ebuild,
@@ -801,3 +809,4 @@ class Scanner(object):
ebuild_obj.is_hard_masked = ebuild.is_hard_masked
ebuild_obj.save(force_update = True)
+
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/
@ 2012-08-26 23:00 Slava Bacherikov
0 siblings, 0 replies; 20+ messages in thread
From: Slava Bacherikov @ 2012-08-26 23:00 UTC (permalink / raw
To: gentoo-commits
commit: 06ec53cb34cf47659e6b914a1525801845cde754
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Aug 26 22:31:00 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Aug 26 22:31:00 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=06ec53cb
Add scan only overlays option
---
.../packages/management/commands/scanpackages.py | 5 +++
gpackages/apps/packages/scan.py | 37 ++++++++++++++-----
2 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/gpackages/apps/packages/management/commands/scanpackages.py b/gpackages/apps/packages/management/commands/scanpackages.py
index 32e85b0..c0c57a4 100644
--- a/gpackages/apps/packages/management/commands/scanpackages.py
+++ b/gpackages/apps/packages/management/commands/scanpackages.py
@@ -24,6 +24,11 @@ class Command(BaseCommand):
dest='scan_all',
default=False,
help='Scan all repositories'),
+ make_option('-o', '--only-overlays',
+ action='store_true',
+ dest='scan_overlays',
+ default=False,
+ help='Scan only overlays repositories'),
make_option('-r', '--update-repo',
action='store_true',
dest='update_repo',
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 84d73f5..792853b 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -120,6 +120,7 @@ class Scanner(object):
self.verbosity = toint(kwargs.get('verbosity',1),1)
self.traceback = bool_get('traceback',False)
self.s_all = bool_get('scan_all', False)
+ self.s_overlyas = bool_get('scan_overlays', False)
self.s_packages = bool_get('packages', False)
self.s_only_repo_info = bool_get('only_repo_info', False)
self.is_show_time = bool_get('show_time', True)
@@ -148,17 +149,23 @@ class Scanner(object):
if self.is_scan_herds:
self.scan_herds()
+ scan_kwargs = {'force_update' : self.force_update,
+ 'delete' : self.delete,
+ 'update_repo' : self.update_repo
+ }
+
if self.s_all and self.s_packages:
- self.scan_all_repos(force_update = self.force_update,
- delete = self.delete,
- update_repo = self.update_repo)
+ self.scan_all_repos(**scan_kwargs)
+
+ elif self.s_overlyas and self.s_packages:
+ self.scan_all_repos(exclude = ['gentoo'], **scan_kwargs)
+
elif len(self.scan_repos_name) > 0 and self.s_packages:
- self.scan_repos_by_name(self.scan_repos_name,
- force_update = self.force_update,
- delete = self.delete,
- update_repo = self.update_repo)
+ self.scan_repos_by_name(self.scan_repos_name, **scan_kwargs)
+
elif self.s_only_repo_info and self.s_all:
self.scan_all_repo_info(delete = self.delete)
+
elif self.s_only_repo_info and len(self.scan_repos_name) > 0:
self.scan_repo_info_by_names(self.scan_repos_name)
@@ -345,11 +352,15 @@ class Scanner(object):
self.load_maintainers_to_cache()
return self.maintainers_cache
- def scan_all_repos(self, **kwargs):
+ def scan_all_repos(self, exclude = None, **kwargs):
"Scan packages in all available trees"
#cache_dict = anydbm.open('cache.db','c')
+ if exclude is not None:
+ exclude = frozenset(exclude)
for repo in portage.iter_trees():
+ if exclude is not None and repo.name in exclude:
+ continue
self.scan_repo(repo, **kwargs)
#cache_dict.close()
@@ -395,13 +406,19 @@ class Scanner(object):
return repo_obj
- def scan_all_repo_info(self, delete = False):
+ def scan_all_repo_info(self, exclude = None, delete = False):
"""Scan all info (metada) of all available repositories
Args:
delete -- if this true that repository will delete
- if portage would be not available"""
+ if portage would be not available
+ exclude -- exlude this overlays
+ """
+ if exclude is not None:
+ exclude = frozenset(exclude)
ex_pk = []
for repo in portage.iter_trees():
+ if exclude is not None and repo.name in exclude:
+ continue
repo_obj = self.get_repo_obj(repo, update_repo = True)
self.output("Scaned [%s]\n", repo.name)
ex_pk.append(repo_obj.pk)
^ permalink raw reply related [flat|nested] 20+ messages in thread
end of thread, other threads:[~2012-08-26 23:01 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-10 22:23 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/packages/management/commands/ Slava Bacherikov
-- strict thread matches above, loose matches on Subject: below --
2012-08-26 23:00 Slava Bacherikov
2012-08-22 17:55 Slava Bacherikov
2012-07-18 23:03 Slava Bacherikov
2012-07-17 9:42 Slava Bacherikov
2012-07-06 23:09 Slava Bacherikov
2012-07-05 23:27 Slava Bacherikov
2012-06-19 0:12 Slava Bacherikov
2012-06-18 23:00 Slava Bacherikov
2012-06-13 22:15 Slava Bacherikov
2012-06-10 17:51 Slava Bacherikov
2012-06-09 18:19 Slava Bacherikov
2012-06-09 18:19 Slava Bacherikov
2012-06-04 20:09 Slava Bacherikov
2012-06-04 20:09 Slava Bacherikov
2012-06-04 20:09 Slava Bacherikov
2012-06-04 20:09 Slava Bacherikov
2012-06-03 16:19 Slava Bacherikov
2012-06-03 13:19 Slava Bacherikov
2012-06-01 21:28 Slava Bacherikov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox