From 47ec539e1da48276fcd1b647414d6be52c5dda0e Mon Sep 17 00:00:00 2001 From: volpino Date: Thu, 31 May 2012 18:42:37 +0200 Subject: [PATCH] euscanwww: scan_upstream imports euscan.scan scan_upstream command imports euscan.scan and simply calls a function, it doesn't call a subprocess Signed-off-by: volpino --- .../management/commands/scan_upstream.py | 26 ++++++++++++++----- pym/euscan/__init__.py | 2 +- pym/euscan/out.py | 9 ++++--- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/euscanwww/djeuscan/management/commands/scan_upstream.py b/euscanwww/djeuscan/management/commands/scan_upstream.py index 2e2d9c2..131ff1a 100644 --- a/euscanwww/djeuscan/management/commands/scan_upstream.py +++ b/euscanwww/djeuscan/management/commands/scan_upstream.py @@ -1,14 +1,16 @@ -import subprocess import portage import sys import re -from StringIO import StringIO + from optparse import make_option from django.utils import timezone from django.db.transaction import commit_on_success from django.core.management.base import BaseCommand +from euscan import CONFIG, output +from euscan.scan import scan_upstream + from djeuscan.models import Package, Version, EuscanResult, VersionLog @@ -17,13 +19,23 @@ class ScanUpstream(object): self.quiet = quiet def scan(self, package): - cmd = ['euscan', package] + CONFIG["format"] = "dict" + output.set_query(package) + scan_upstream(package) + out = output.get_formatted_output() + out_json = output.get_formatted_output("json") - fp = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - output = StringIO(fp.communicate()[0]) + try: + cp = out["metadata"]["cp"] + except KeyError: + return {} - self.parse_output(output) + for out in out["result"]: + self.store_version(cp, out["version"], " ".join(out["urls"])) + + self.store_result(cp, out_json) + + return out def store_result(self, package, log): # Remove previous logs diff --git a/pym/euscan/__init__.py b/pym/euscan/__init__.py index 01255f4..84754ee 100644 --- a/pym/euscan/__init__.py +++ b/pym/euscan/__init__.py @@ -67,4 +67,4 @@ ROBOTS_TXT_BLACKLIST_DOMAINS = [ ] from out import EuscanOutput -output = out.EuscanOutput(CONFIG) +output = EuscanOutput(CONFIG) diff --git a/pym/euscan/out.py b/pym/euscan/out.py index c569a89..6a98336 100644 --- a/pym/euscan/out.py +++ b/pym/euscan/out.py @@ -95,7 +95,7 @@ class EuscanOutput(object): "metadata": {}, } - def get_formatted_output(self): + def get_formatted_output(self, format_=None): data = {} for query in self.queries: @@ -105,8 +105,11 @@ class EuscanOutput(object): "messages": self.queries[query]["output"].getvalue(), } - if self.config["format"].lower() == "json": + format_ = format_ or self.config["format"] + if format_.lower() == "json": return json.dumps(data, indent=self.config["indent"]) + elif format_.lower() == "dict": + return data else: raise TypeError("Invalid output format") @@ -133,7 +136,7 @@ class EuscanOutput(object): print "%s: %s" % (key.capitalize(), value) def __getattr__(self, key): - if not self.config["quiet"]: + if not self.config["quiet"] and self.current_query is not None: output = self.queries[self.current_query]["output"] return getattr(output, key) else: