aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvolpino <fox91@anche.no>2012-10-30 20:27:37 +0100
committervolpino <fox91@anche.no>2012-10-30 20:27:37 +0100
commit48c1eadab4dd2132f777ff9b4b84fd35e46c9aee (patch)
tree58710752e7e7b350885431e7bf30003c2de31b11
parenteuscanwww: Adding an about config page (diff)
parenteuscan/handlers: we need the file version (diff)
downloadeuscan-48c1eadab4dd2132f777ff9b4b84fd35e46c9aee.tar.gz
euscan-48c1eadab4dd2132f777ff9b4b84fd35e46c9aee.tar.bz2
euscan-48c1eadab4dd2132f777ff9b4b84fd35e46c9aee.zip
Merge branch 'master' of https://github.com/iksaif/euscan
Conflicts: TODO euscanwww/djeuscan/processing/scan/scan_portage.py euscanwww/djeuscan/tasks.py euscanwww/djeuscan/templates/euscan/_package_details.html Signed-off-by: volpino <fox91@anche.no>
-rw-r--r--TODO3
-rwxr-xr-xbin/euscan4
-rw-r--r--euscanwww/djeuscan/api/handlers.py8
-rw-r--r--euscanwww/djeuscan/api/urls.py2
-rw-r--r--euscanwww/djeuscan/feeds.py14
-rw-r--r--euscanwww/djeuscan/processing/misc/update_counters.py1
-rw-r--r--euscanwww/djeuscan/processing/scan/scan_portage.py24
-rw-r--r--euscanwww/djeuscan/tasks.py44
-rw-r--r--euscanwww/djeuscan/templates/euscan/_maintainers_table.html6
-rw-r--r--euscanwww/djeuscan/templates/euscan/_package_details.html4
-rw-r--r--euscanwww/djeuscan/templates/euscan/accounts/index.html2
-rw-r--r--euscanwww/djeuscan/templates/euscan/maintainer.html22
-rw-r--r--euscanwww/djeuscan/urls.py15
-rw-r--r--euscanwww/djeuscan/views.py26
-rw-r--r--euscanwww/euscanwww/captcha/__init__.py6
-rw-r--r--euscanwww/euscanwww/captcha/forms.py5
-rw-r--r--euscanwww/euscanwww/captcha/urls.py12
-rw-r--r--euscanwww/euscanwww/settings.py1
-rw-r--r--euscanwww/euscanwww/urls.py2
-rw-r--r--pym/euscan/__init__.py11
-rw-r--r--pym/euscan/handlers/berlios.py9
-rw-r--r--pym/euscan/handlers/generic.py1
-rw-r--r--pym/euscan/handlers/google_code.py8
-rw-r--r--pym/euscan/handlers/sourceforge.py9
-rw-r--r--pym/euscan/helpers.py27
25 files changed, 167 insertions, 99 deletions
diff --git a/TODO b/TODO
index 932c479..2f1799d 100644
--- a/TODO
+++ b/TODO
@@ -52,6 +52,9 @@ euscan
euscanwww
---------
+- Really fix mails
+- Add an /about/config page that describe the current config (overlays, stuff in make.conf, euscan default settings, etc..)
+- Create a rss for "scan world" + packages in GET
- Always keep in db all found versions (when using an API only?). But don't display them if older than current packaged version, except maybe in the "upstream_version" column.
### packages
diff --git a/bin/euscan b/bin/euscan
index c17c5d3..255151b 100755
--- a/bin/euscan
+++ b/bin/euscan
@@ -292,9 +292,9 @@ def main():
from os.path import basename # To get the short name
- output.error(
+ output.eerror(
"The short ebuild name '%s' is ambiguous. Please specify" %
- basename(pkgs[0]),
+ basename(pkgs[0]) +
"one of the above fully-qualified ebuild names instead."
)
exit_helper(1)
diff --git a/euscanwww/djeuscan/api/handlers.py b/euscanwww/djeuscan/api/handlers.py
index 18e1aca..922fe16 100644
--- a/euscanwww/djeuscan/api/handlers.py
+++ b/euscanwww/djeuscan/api/handlers.py
@@ -97,8 +97,12 @@ class PackagesHandler(AnonymousBaseHandler):
herd = Herd.objects.get(herd=kwargs['herd'])
packages = Package.objects.for_herd(herd, last_versions=True)
data = {'herd': herd}
- elif 'maintainer_id' in kwargs:
- maintainer = Maintainer.objects.get(id=kwargs['maintainer_id'])
+ elif 'maintainer_id' in kwargs or 'maintainer_email' in kwargs:
+ if 'maintainer_id' in kwargs:
+ maintainer = Maintainer.objects.get(id=kwargs['maintainer_id'])
+ elif 'maintainer_email' in kwargs:
+ maintainer = Maintainer.objects.get(email=kwargs['maintainer_email'])
+
packages = Package.objects.for_maintainer(
maintainer,
last_versions=True
diff --git a/euscanwww/djeuscan/api/urls.py b/euscanwww/djeuscan/api/urls.py
index ffab482..578a8be 100644
--- a/euscanwww/djeuscan/api/urls.py
+++ b/euscanwww/djeuscan/api/urls.py
@@ -24,6 +24,8 @@ urlpatterns = patterns('djeuscan.api.views',
url(r'^1.0/packages/by-maintainer/(?P<maintainer_id>\d+)\.(?P<emitter_format>.+)$',
packages_handler, name='api.views.packages'),
+ url(r'^1.0/packages/by-maintainer/(?P<maintainer_email>[^/]+)\.(?P<emitter_format>.+)$',
+ packages_handler, name='api.views.packages'),
url(r'^1.0/packages/by-herd/(?P<herd>[\@\{\}\w+.-]*)\.(?P<emitter_format>.+)?$',
packages_handler, name='api.views.packages'),
url(r'^1.0/packages/by-category/(?P<category>[\w+][\w+.-]*)\.(?P<emitter_format>.+)?$',
diff --git a/euscanwww/djeuscan/feeds.py b/euscanwww/djeuscan/feeds.py
index 7399618..98590a9 100644
--- a/euscanwww/djeuscan/feeds.py
+++ b/euscanwww/djeuscan/feeds.py
@@ -146,9 +146,16 @@ class PackageFeed(BaseFeed):
class MaintainerFeed(BaseFeed):
feed_type = Atom1Feed
- def get_object(self, request, maintainer_id):
+ def get_object(self, request, maintainer_id=None, maintainer_email=None):
+ print maintainer_id, maintainer_email
+ if maintainer_id:
+ obj = get_object_or_404(Maintainer, id=maintainer_id)
+ else:
+ obj = get_object_or_404(Maintainer, email=maintainer_email)
+
+ print obj
return {
- "obj": get_object_or_404(Maintainer, id=maintainer_id),
+ "obj": obj,
"options": request.GET,
}
@@ -159,8 +166,7 @@ class MaintainerFeed(BaseFeed):
return "Last changes for %s" % data["obj"]
def link(self, data):
- return reverse('djeuscan.views.maintainer',
- kwargs={'maintainer_id': data["obj"].id})
+ return reverse('djeuscan.views.maintainer', args=[data["obj"].email])
def _items(self, data):
return VersionLog.objects.for_maintainer(data["obj"]), 50
diff --git a/euscanwww/djeuscan/processing/misc/update_counters.py b/euscanwww/djeuscan/processing/misc/update_counters.py
index fdbea9c..392b7b5 100644
--- a/euscanwww/djeuscan/processing/misc/update_counters.py
+++ b/euscanwww/djeuscan/processing/misc/update_counters.py
@@ -114,7 +114,6 @@ def update_counters(fast=False, nolog=False, logger=None):
package.last_version_upstream_id = last_versions_upstream.get(
package.id, default
)['id']
-
package.save()
n_packages_gentoo = int(package.n_packaged == package.n_versions)
diff --git a/euscanwww/djeuscan/processing/scan/scan_portage.py b/euscanwww/djeuscan/processing/scan/scan_portage.py
index 1ce7197..1d6c866 100644
--- a/euscanwww/djeuscan/processing/scan/scan_portage.py
+++ b/euscanwww/djeuscan/processing/scan/scan_portage.py
@@ -13,7 +13,6 @@ from django.core.management.color import color_style
from euscan.version import get_version_type
from djeuscan.processing import FakeLogger
-from djeuscan.processing.scan.scan_upstream import scan_upstream
from djeuscan.models import Package, Version, VersionLog, Category, Overlay
@@ -30,6 +29,10 @@ class ScanPortage(object):
self._cache = {'packages': {}, 'versions': {}}
self._overlays = None
+ self._updated_packages = set()
+
+ def updated_packages(self):
+ return list(self._updated_packages)
def cache_hash_package(self, category, name):
return '%s/%s' % (category, name)
@@ -200,13 +203,14 @@ class ScanPortage(object):
packages_alive.add("%s/%s" % (cat, pkg))
new_version = False
for cpv, slot, overlay, overlay_path in data['versions']:
- new_version = new_version or self.store_version(
+ obj, created = self.store_version(
package, cpv, slot, overlay, overlay_path
)
+ new_version = created or new_version
# If the package has at least one new version scan upstream for it
- if new_version and self.upstream:
- scan_upstream([package], self.purge_versions, self.logger)
+ if new_version:
+ self._updated_packages.add(package)
self.purge_old_packages(current_packages, packages_alive)
self.purge_old_versions()
@@ -269,7 +273,7 @@ class ScanPortage(object):
# nothing to do (note: it can't be an upstream version because
# overlay can't be empty here)
if not created:
- return False
+ return obj, created
# New version created
self.logger.info('+ [v] %s' % (obj))
@@ -292,7 +296,7 @@ class ScanPortage(object):
vtype=obj.vtype,
)
- return True
+ return obj, created
def purge_old_packages(self, packages, alive):
if not self.purge_packages:
@@ -349,8 +353,7 @@ def scan_portage(packages=None, category=None, no_log=False, upstream=False,
logger=logger,
no_log=no_log,
purge_packages=purge_packages,
- purge_versions=purge_versions,
- upstream=upstream
+ purge_versions=purge_versions
)
logger.info('Scanning portage tree...')
@@ -368,8 +371,10 @@ def scan_portage(packages=None, category=None, no_log=False, upstream=False,
scan_handler.cache_store_version(version)
logger.info('done')
- if not packages:
+ if not packages and category:
scan_handler.scan(category=category)
+ elif not packages:
+ scan_handler.scan()
else:
for pkg in packages:
if isinstance(pkg, Package):
@@ -394,3 +399,4 @@ def scan_portage(packages=None, category=None, no_log=False, upstream=False,
logger.info("+ [o] %s", overlay["overlay"])
logger.info('Done.')
+ return scan_handler.updated_packages()
diff --git a/euscanwww/djeuscan/tasks.py b/euscanwww/djeuscan/tasks.py
index d3c1b5b..769e4af 100644
--- a/euscanwww/djeuscan/tasks.py
+++ b/euscanwww/djeuscan/tasks.py
@@ -9,7 +9,6 @@ from celery.task import task, group
#import portage
from django.conf import settings
-from django.core.cache import cache
from django.template.loader import render_to_string
from django.core.mail import send_mail
from django.db.models import Q
@@ -80,7 +79,6 @@ def update_counters(fast=False):
"""
Updates counters
"""
-
logger = update_counters.get_logger()
logger.info("Updating counters (fast=%s)...", fast)
misc.update_counters(fast=fast)
@@ -114,7 +112,7 @@ def scan_metadata(packages=[], category=None, populate=False):
@task
-def scan_portage(packages=[], category=None, upstream=True,
+def scan_portage(packages=None, category=None,
no_log=False, purge_packages=False,
purge_versions=False, prefetch=False):
"""
@@ -131,17 +129,15 @@ def scan_portage(packages=[], category=None, upstream=True,
else:
logger.info("Starting portage scan...")
- scan.scan_portage(
+ return scan.scan_portage(
packages=packages,
category=category,
- upstream=upstream,
no_log=no_log,
purge_packages=purge_packages,
purge_versions=purge_versions,
prefetch=prefetch,
logger=logger,
)
- return True
@task
@@ -181,9 +177,17 @@ def update_portage(packages=None):
# Workaround for celery bug when chaining groups
update_portage_trees()
- scan_portage(packages=[], purge_packages=True, purge_versions=True,
- prefetch=True)
- scan_metadata(packages=[], populate=True)
+ updated_packages = scan_portage(
+ packages=None,
+ purge_packages=True,
+ purge_versions=True,
+ prefetch=True
+ )
+ scan_metadata(packages=None, populate=True)
+ if updated_packages:
+ group_chunks(scan_upstream, updated_packages,
+ settings.TASKS_UPSTREAM_GROUPS,
+ purge_versions=True)()
update_counters(fast=False)
""" Currently broken
@@ -236,20 +240,12 @@ def scan_package_user(package):
return True
-@task
+@task(rate_limit="1/m")
def consume_refresh_queue(locked=False):
"""
Satisfies user requests for package refreshing, runs every minute
"""
- LOCK_ID = 'lock-consume-refresh-queue'
- unlock = lambda: cache.delete(LOCK_ID)
- lock = lambda: cache.add(LOCK_ID, True, 120)
-
logger = consume_refresh_queue.get_logger()
-
- if not locked and not lock():
- return
-
logger.info('Consuming package refresh request queue...')
try:
@@ -259,16 +255,14 @@ def consume_refresh_queue(locked=False):
scan_package_user.delay(pkg)
logger.info('Selected: %s' % pkg)
except IndexError:
- pass
- finally:
- unlock()
+ return
if RefreshPackageQuery.objects.count():
logger.info('Restarting myself in 60s')
- lock()
consume_refresh_queue.apply_async(
kwargs={'locked': True}, countdown=60
)
+ return True
@task(max_retries=10, default_retry_delay=10 * 60)
@@ -280,6 +274,7 @@ def send_user_email(address, subject, text):
)
except Exception, exc:
raise send_user_email.retry(exc=exc)
+ return True
@task
@@ -322,6 +317,7 @@ def process_emails(profiles, only_if_vlogs=False):
profile.last_email = now
profile.save(force_update=True)
+ return True
@task
@@ -336,6 +332,7 @@ def send_update_email():
settings.TASKS_EMAIL_GROUPS,
only_if_vlogs=True
)()
+ return True
@task
@@ -345,6 +342,7 @@ def send_weekly_email():
email_activated=True
)
group_chunks(process_emails, profiles, settings.TASKS_EMAIL_GROUPS)()
+ return True
@task
@@ -354,7 +352,7 @@ def send_monthly_email():
email_activated=True
)
group_chunks(process_emails, profiles, settings.TASKS_EMAIL_GROUPS)()
-
+ return True
admin_tasks = [
regen_rrds,
diff --git a/euscanwww/djeuscan/templates/euscan/_maintainers_table.html b/euscanwww/djeuscan/templates/euscan/_maintainers_table.html
index bfbdd21..665e3e8 100644
--- a/euscanwww/djeuscan/templates/euscan/_maintainers_table.html
+++ b/euscanwww/djeuscan/templates/euscan/_maintainers_table.html
@@ -18,7 +18,7 @@
{% for maintainer in maintainers %}
<tr>
<td>
- <a href="{% url "maintainer" maintainer.maintainers__id %}">
+ <a href="{% url "maintainer" maintainer.maintainers__email %}">
{% if maintainer.maintainers__name != maintainer.maintainers__email %}
{{ maintainer.maintainers__name }} &lt;{{ maintainer.maintainers__email }}&gt;
{% else %}
@@ -31,8 +31,8 @@
{% if extras %}
<td>
- <img src="{% url "chart_maintainer" maintainer.maintainers__id 'packages-monthly-small' %}" />
- <img src="{% url "chart_maintainer" maintainer.maintainers__id 'versions-monthly-small' %}" />
+ <img src="{% url "chart_maintainer" maintainer.maintainers__email 'packages-monthly-small' %}" />
+ <img src="{% url "chart_maintainer" maintainer.maintainers__email 'versions-monthly-small' %}" />
</td>
{% endif %}
diff --git a/euscanwww/djeuscan/templates/euscan/_package_details.html b/euscanwww/djeuscan/templates/euscan/_package_details.html
index 8746088..7f92133 100644
--- a/euscanwww/djeuscan/templates/euscan/_package_details.html
+++ b/euscanwww/djeuscan/templates/euscan/_package_details.html
@@ -33,12 +33,12 @@
{% for maintainer in package.maintainers.all %}
<p>
{% if maintainer.name != maintainer.email %}
- <a href="{% url "maintainer" maintainer.id %}">
+ <a href="{% url "maintainer" maintainer.email %}">
{{ maintainer.name }}
</a>
&lt;{{ maintainer.email }}&gt;
{% else %}
- <a href="{% url "maintainer" maintainer.id %}">
+ <a href="{% url "maintainer" maintainer.email %}">
{{ maintainer.email }}
</a>
{% endif %}
diff --git a/euscanwww/djeuscan/templates/euscan/accounts/index.html b/euscanwww/djeuscan/templates/euscan/accounts/index.html
index e9ac816..0e61ed6 100644
--- a/euscanwww/djeuscan/templates/euscan/accounts/index.html
+++ b/euscanwww/djeuscan/templates/euscan/accounts/index.html
@@ -75,7 +75,7 @@
Hot maintainers:
<ul>
{% for c in maintainers|slice:":3" %}
- <li><a href="{% url "maintainer" c.maintainers__id %}">{{ c.maintainers__name }}</a> ({{ c.n_versions|sub:c.n_packaged|sub:c.n_overlay }})</li>
+ <li><a href="{% url "maintainer" c.maintainers__email %}">{{ c.maintainers__name }}</a> ({{ c.n_versions|sub:c.n_packaged|sub:c.n_overlay }})</li>
{% endfor %}
</ul>
</li>
diff --git a/euscanwww/djeuscan/templates/euscan/maintainer.html b/euscanwww/djeuscan/templates/euscan/maintainer.html
index 65f498c..d73b582 100644
--- a/euscanwww/djeuscan/templates/euscan/maintainer.html
+++ b/euscanwww/djeuscan/templates/euscan/maintainer.html
@@ -11,7 +11,7 @@
{{ block.super }}
<li>
<img src="{{ STATIC_URL }}/img/feed.png" alt="feed" />
- <a title="{{ maintainer.name }} Feed" href="{% url "maintainer_feed" maintainer.id %}">
+ <a title="{{ maintainer.name }} Feed" href="{% url "maintainer_feed" maintainer.email %}">
{{ maintainer.name|truncatechars:15 }}
</a>
</li>
@@ -22,10 +22,10 @@
Maintainer: {{ maintainer.name }} &lt;{{ maintainer.email }}&gt;
{% if user.is_authenticated %}
<span class="pull-right">
- <button class="btn favourite-button {% if favourited %}hide{% endif %}" data-url="{% url "favourite_maintainer" maintainer.id %}">
+ <button class="btn favourite-button {% if favourited %}hide{% endif %}" data-url="{% url "favourite_maintainer" maintainer.email %}">
<img src="{{ STATIC_URL}}/img/watch-icon.png" alt="Watch" />
</button>
- <button class="btn unfavourite-button {% if not favourited %}hide{% endif %}" data-url="{% url "unfavourite_maintainer" maintainer.id %}">
+ <button class="btn unfavourite-button {% if not favourited %}hide{% endif %}" data-url="{% url "unfavourite_maintainer" maintainer.email %}">
<img src="{{ STATIC_URL}}/img/unwatch-icon.png" alt="Unwatch" />
</button>
</span>
@@ -37,19 +37,19 @@
<h3>Statistics</h3>
<h4>Current statistics</h4>
<p>
- <img alt="pie versions" src="{% url "chart_maintainer" maintainer.id 'pie-versions' %}" />
- <img alt="pie packages" src="{% url "chart_maintainer" maintainer.id 'pie-packages' %}" />
+ <img alt="pie versions" src="{% url "chart_maintainer" maintainer.email 'pie-versions' %}" />
+ <img alt="pie packages" src="{% url "chart_maintainer" maintainer.email 'pie-packages' %}" />
</p>
<h4>All Time</h4>
<p>
- <img alt="version weekly" src="{% url "chart_maintainer" maintainer.id 'versions-weekly' %}" />
- <img alt="versions monthly" src="{% url "chart_maintainer" maintainer.id 'versions-monthly' %}" />
+ <img alt="version weekly" src="{% url "chart_maintainer" maintainer.email 'versions-weekly' %}" />
+ <img alt="versions monthly" src="{% url "chart_maintainer" maintainer.email 'versions-monthly' %}" />
</p>
<p>
- <img alt="packages weekly" src="{% url "chart_maintainer" maintainer.id 'packages-weekly' %}" />
- <img alt="packages monthly" src="{% url "chart_maintainer" maintainer.id 'packages-monthly' %}" />
+ <img alt="packages weekly" src="{% url "chart_maintainer" maintainer.email 'packages-weekly' %}" />
+ <img alt="packages monthly" src="{% url "chart_maintainer" maintainer.email 'packages-monthly' %}" />
</p>
<script type="text/javascript">
@@ -77,9 +77,9 @@ $(document).ready(function () {
<div class="menu rounded notfirst-menu">
<dl>
<dt>Versions</dt>
- <dd><img alt="versions" src="{% url "chart_maintainer" maintainer.id 'versions-monthly-small' %}" /></dd>
+ <dd><img alt="versions" src="{% url "chart_maintainer" maintainer.email 'versions-monthly-small' %}" /></dd>
<dt>Packages</dt>
- <dd><img alt="packages" src="{% url "chart_maintainer" maintainer.id 'packages-monthly-small' %}" /></dd>
+ <dd><img alt="packages" src="{% url "chart_maintainer" maintainer.email 'packages-monthly-small' %}" /></dd>
</dl>
</div>
diff --git a/euscanwww/djeuscan/urls.py b/euscanwww/djeuscan/urls.py
index 789fc9f..1d70292 100644
--- a/euscanwww/djeuscan/urls.py
+++ b/euscanwww/djeuscan/urls.py
@@ -55,16 +55,13 @@ herds_patterns = patterns('djeuscan.views',
url(r'^$', 'herds', name="herds"),
)
+prefix = '^((?P<maintainer_id>\d+)|(?P<maintainer_email>[^/]+))'
maintainers_patterns = patterns('djeuscan.views',
- url(r'^(?P<maintainer_id>\d+)/(view/)?$', 'maintainer', name="maintainer"),
- url(r'^(?P<maintainer_id>\d+)/feed/$', MaintainerFeed(),
- name='maintainer_feed'),
- url(r'^(?P<maintainer_id>\d+)/charts/(?P<chart>[\w\-]+).png$',
- 'chart_maintainer', name="chart_maintainer"),
- url(r'^(?P<maintainer_id>\d+)/favourite/$',
- 'favourite_maintainer', name="favourite_maintainer"),
- url(r'^(?P<maintainer_id>\d+)/unfavourite/$',
- 'unfavourite_maintainer', name="unfavourite_maintainer"),
+ url(prefix + r'/(view/)?$', 'maintainer', name="maintainer"),
+ url(prefix + r'/feed/$', MaintainerFeed(), name='maintainer_feed'),
+ url(prefix + r'/charts/(?P<chart>[\w\-]+).png$', 'chart_maintainer', name="chart_maintainer"),
+ url(prefix + r'/favourite/$', 'favourite_maintainer', name="favourite_maintainer"),
+ url(prefix + r'/unfavourite/$', 'unfavourite_maintainer', name="unfavourite_maintainer"),
url(r'^$', 'maintainers', name="maintainers"),
)
diff --git a/euscanwww/djeuscan/views.py b/euscanwww/djeuscan/views.py
index cc0d2f2..5f16a43 100644
--- a/euscanwww/djeuscan/views.py
+++ b/euscanwww/djeuscan/views.py
@@ -122,9 +122,15 @@ def maintainers(request):
return {'maintainers': maintainers, 'last_scan': last_scan}
+def get_maintainer_or_404(id=None, email=None):
+ if id:
+ return get_object_or_404(Maintainer, pk=id)
+ else:
+ return get_object_or_404(Maintainer, email=email)
+
@render_to('euscan/maintainer.html')
-def maintainer(request, maintainer_id):
- maintainer = get_object_or_404(Maintainer, pk=maintainer_id)
+def maintainer(request, maintainer_id=None, maintainer_email=None):
+ maintainer = get_maintainer_or_404(maintainer_id, maintainer_email)
packages = Package.objects.for_maintainer(maintainer, last_versions=True)
try:
@@ -337,10 +343,10 @@ def chart(request, **kwargs):
chart = kwargs['chart'] if 'chart' in kwargs else None
- if 'maintainer_id' in kwargs:
- kwargs['maintainer'] = get_object_or_404(
- Maintainer,
- id=kwargs['maintainer_id']
+ if 'maintainer_id' in kwargs or 'maintainer_email' in kwargs:
+ kwargs['maintainer'] = get_maintainer_or_404(
+ kwargs.get('maintainer_id'),
+ kwargs.get('maintainer_email')
)
if 'herd' in kwargs:
kwargs['herd'] = get_object_or_404(Herd, herd=kwargs['herd'])
@@ -550,8 +556,8 @@ def unfavourite_herd(request, herd):
@login_required
@require_POST
@ajax_request
-def favourite_maintainer(request, maintainer_id):
- obj = get_object_or_404(Maintainer, pk=maintainer_id)
+def favourite_maintainer(request, maintainer_id=None, maintainer_email=None):
+ obj = get_maintainer_or_404(maintainer_id, maintainer_email)
get_profile(request.user).maintainers.add(obj)
return {"success": True}
@@ -559,8 +565,8 @@ def favourite_maintainer(request, maintainer_id):
@login_required
@require_POST
@ajax_request
-def unfavourite_maintainer(request, maintainer_id):
- maintainer = get_object_or_404(Maintainer, pk=maintainer_id)
+def unfavourite_maintainer(request, maintainer_id=None, maintainer_email=None):
+ obj = get_maintainer_or_404(maintainer_id, maintainer_email)
get_profile(request.user).maintainers.remove(maintainer)
return {"success": True}
diff --git a/euscanwww/euscanwww/captcha/__init__.py b/euscanwww/euscanwww/captcha/__init__.py
new file mode 100644
index 0000000..a6b282a
--- /dev/null
+++ b/euscanwww/euscanwww/captcha/__init__.py
@@ -0,0 +1,6 @@
+from registration.backends.default import DefaultBackend
+from forms import RegistrationFormCaptcha
+
+class CaptchaDefaultBackend(DefaultBackend):
+ def get_form_class(self, request):
+ return RegistrationFormCaptcha
diff --git a/euscanwww/euscanwww/captcha/forms.py b/euscanwww/euscanwww/captcha/forms.py
new file mode 100644
index 0000000..ca4a876
--- /dev/null
+++ b/euscanwww/euscanwww/captcha/forms.py
@@ -0,0 +1,5 @@
+from captcha.fields import ReCaptchaField
+from registration.forms import RegistrationForm
+
+class RegistrationFormCaptcha(RegistrationForm):
+ captcha = ReCaptchaField(attrs={'theme': 'white'})
diff --git a/euscanwww/euscanwww/captcha/urls.py b/euscanwww/euscanwww/captcha/urls.py
new file mode 100644
index 0000000..76cbd2e
--- /dev/null
+++ b/euscanwww/euscanwww/captcha/urls.py
@@ -0,0 +1,12 @@
+from django.conf.urls.defaults import patterns, url
+
+from registration.views import register
+
+urlpatterns = patterns('',
+ url(
+ r'^register/$',
+ register,
+ {'backend': 'euscanwww.captcha.CaptchaDefaultBackend'},
+ name='registration_register'
+ ),
+)
diff --git a/euscanwww/euscanwww/settings.py b/euscanwww/euscanwww/settings.py
index d6b8616..5705c3b 100644
--- a/euscanwww/euscanwww/settings.py
+++ b/euscanwww/euscanwww/settings.py
@@ -267,3 +267,4 @@ except ImportError, ex:
os.environ['ROOT'] = PORTAGE_ROOT
os.environ['PORTAGE_CONFIGROOT'] = PORTAGE_CONFIGROOT
os.environ['EIX_CACHEFILE'] = EIX_CACHEFILE
+os.environ['http_proxy'] = '127.0.0.1:8123'
diff --git a/euscanwww/euscanwww/urls.py b/euscanwww/euscanwww/urls.py
index d6090b5..b104339 100644
--- a/euscanwww/euscanwww/urls.py
+++ b/euscanwww/euscanwww/urls.py
@@ -8,7 +8,7 @@ urlpatterns = patterns('',
url(r'^', include('djeuscan.urls')),
url(r'^admin/', include(admin.site.urls)),
- url(r'^accounts/', include('captcha.backends.default.urls')),
+ url(r'^accounts/', include('euscanwww.captcha.urls')),
url(r'^accounts/', include('registration.backends.default.urls')),
)
diff --git a/pym/euscan/__init__.py b/pym/euscan/__init__.py
index 98daeee..49241dd 100644
--- a/pym/euscan/__init__.py
+++ b/pym/euscan/__init__.py
@@ -79,11 +79,12 @@ ROBOTS_TXT_BLACKLIST_DOMAINS = [
'(.*)sourceforge(.*)',
'(.*)github.com',
'(.*)berlios(.*)',
- '(.*)qt.nokia.com(.*)',
- '(.*)chromium.org(.*)',
- '(.*)nodejs.org(.*)',
- '(.*)download.mono-project.com(.*)',
- '(.*)fedorahosted.org(.*)',
+ '(.*)qt\.nokia\.com(.*)',
+ '(.*)chromium\.org(.*)',
+ '(.*)nodejs\.org(.*)',
+ '(.*)download\.mono-project\.com(.*)',
+ '(.*)fedorahosted\.org(.*)',
+ '(.*)download\.tuxfamily\.org(.*)',
]
from out import EuscanOutput
diff --git a/pym/euscan/handlers/berlios.py b/pym/euscan/handlers/berlios.py
index bbfe6e1..11471e4 100644
--- a/pym/euscan/handlers/berlios.py
+++ b/pym/euscan/handlers/berlios.py
@@ -16,7 +16,14 @@ berlios_regex = r"mirror://berlios/([^/]+)/([^/]+)"
def can_handle(pkg, url=None):
- return url and re.search(berlios_regex, url)
+ if not url:
+ return False
+
+ cp, ver, rev = portage.pkgsplit(pkg.cpv)
+ if ver not in url:
+ return False
+
+ return re.search(berlios_regex, url)
def scan_url(pkg, url, options):
diff --git a/pym/euscan/handlers/generic.py b/pym/euscan/handlers/generic.py
index fd82c71..0795488 100644
--- a/pym/euscan/handlers/generic.py
+++ b/pym/euscan/handlers/generic.py
@@ -70,6 +70,7 @@ def scan_html(data, url, pattern):
match.group(0))
)
+
return results
diff --git a/pym/euscan/handlers/google_code.py b/pym/euscan/handlers/google_code.py
index 892064f..d6c5bd1 100644
--- a/pym/euscan/handlers/google_code.py
+++ b/pym/euscan/handlers/google_code.py
@@ -14,8 +14,14 @@ package_name_regex = r"http://(.+).googlecode.com/files/.+"
def can_handle(pkg, url=None):
- return url and re.match(package_name_regex, url)
+ if not url:
+ return False
+ cp, ver, rev = portage.pkgsplit(pkg.cpv)
+ if ver not in url:
+ return False
+
+ return re.match(package_name_regex, url)
def scan_url(pkg, url, options):
output.einfo("Using Google Code handler")
diff --git a/pym/euscan/handlers/sourceforge.py b/pym/euscan/handlers/sourceforge.py
index 11563e0..0508289 100644
--- a/pym/euscan/handlers/sourceforge.py
+++ b/pym/euscan/handlers/sourceforge.py
@@ -12,7 +12,14 @@ PRIORITY = 90
def can_handle(pkg, url=None):
- return url and "mirror://sourceforge/" in url
+ if not url:
+ return False
+
+ cp, ver, rev = portage.pkgsplit(pkg.cpv)
+ if ver not in url:
+ return False
+
+ return "mirror://sourceforge/" in url
def scan_url(pkg, url, options):
diff --git a/pym/euscan/helpers.py b/pym/euscan/helpers.py
index 5e3e6ea..3271811 100644
--- a/pym/euscan/helpers.py
+++ b/pym/euscan/helpers.py
@@ -373,27 +373,28 @@ def tryurl(fileurl, template):
def regex_from_template(template):
# Escape
- template = re.escape(template)
+ regexp = re.escape(template)
# Unescape specific stuff
- template = template.replace('\$\{', '${')
- template = template.replace('\}', '}')
- template = template.replace('}\.$', '}.$')
+ regexp = regexp.replace('\$\{', '${')
+ regexp = regexp.replace('\}', '}')
+ regexp = regexp.replace('}\.$', '}.$')
# Replace ${\d+}
- #template = template.replace('${0}', r'([\d]+?)')
- template = re.sub(r'(\$\{\d+\}(\.?))+', r'([\w\.]+?)', template)
+ #regexp = regexp.replace('${0}', r'([\d]+?)')
+ regexp = re.sub(r'(\$\{\d+\}(\.?))+', r'([\w\.]+?)', regexp)
- #template = re.sub(r'(\$\{\d+\}\.?)+', r'([\w]+?)', template)
- #template = re.sub(r'(\$\{\d+\}\.+)+', '(.+?)\.', template)
- #template = re.sub(r'(\$\{\d+\})+', '(.+?)', template)
+ #regexp = re.sub(r'(\$\{\d+\}\.?)+', r'([\w]+?)', regexp)
+ #regexp = re.sub(r'(\$\{\d+\}\.+)+', '(.+?)\.', regexp)
+ #regexp = re.sub(r'(\$\{\d+\})+', '(.+?)', regexp)
# Full version
- template = template.replace('${PV}', _v)
+ regexp = regexp.replace('${PV}', _v)
# End
- template = template + r'/?$'
- return template
+ regexp = regexp + r'/?$'
+
+ return regexp
def basedir_from_template(template):
@@ -417,7 +418,7 @@ def generate_scan_paths(url):
path = prefix + ":/"
for chunk in chunks:
if '${' in chunk:
- steps.append((path, regex_from_template(chunk)))
+ steps.append((path, '^(?:|.*/)' + regex_from_template(chunk)))
path = ""
else:
path += "/"