euscan: Adding new handlers: google-code, berlios, sourceforge
Signed-off-by: volpino <fox91@anche.no>
This commit is contained in:
		
							
								
								
									
										49
									
								
								pym/euscan/handlers/berlios.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								pym/euscan/handlers/berlios.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					import re
 | 
				
			||||||
 | 
					import urllib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import portage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from euscan.helpers import regex_from_template
 | 
				
			||||||
 | 
					from euscan.handlers.url import process_scan as url_scan
 | 
				
			||||||
 | 
					from euscan import output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HANDLER_NAME = "berlios"
 | 
				
			||||||
 | 
					CONFIDENCE = 90
 | 
				
			||||||
 | 
					PRIORITY = 95
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def can_handle(pkg, url=None):
 | 
				
			||||||
 | 
					    return url and "berlios.de/" in url
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def scan_url(pkg, url, options):
 | 
				
			||||||
 | 
					    output.einfo("Using BerliOS handler")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cp, ver, rev = portage.pkgsplit(pkg.cpv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    project, filename = re.search(r"berlios.de/(.+)/(.+)", url).groups()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    project_page = "http://developer.berlios.de/projects/%s" % project
 | 
				
			||||||
 | 
					    content = urllib.urlopen(project_page).read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    project_id = re.search(
 | 
				
			||||||
 | 
					        r"/project/filelist.php\?group_id=(\d+)",
 | 
				
			||||||
 | 
					        content
 | 
				
			||||||
 | 
					    ).group(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    base_url = (
 | 
				
			||||||
 | 
					        "http://developer.berlios.de/project/filelist.php?group_id=%s" %
 | 
				
			||||||
 | 
					        project_id
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    file_pattern = regex_from_template(
 | 
				
			||||||
 | 
					        filename.replace(ver, "${PV}")
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    result = url_scan(pkg, base_url, file_pattern)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ret = []
 | 
				
			||||||
 | 
					    for found_url, pv, _, _ in result:
 | 
				
			||||||
 | 
					        found_url = found_url.replace("prdownload", "download")
 | 
				
			||||||
 | 
					        ret.append((found_url, pv, HANDLER_NAME, CONFIDENCE))
 | 
				
			||||||
 | 
					    return ret
 | 
				
			||||||
@@ -11,8 +11,8 @@ except ImportError:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import portage
 | 
					import portage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from euscan import CONFIG, SCANDIR_BLACKLIST_URLS, \
 | 
					from euscan import output, helpers, mangling, CONFIG, SCANDIR_BLACKLIST_URLS, \
 | 
				
			||||||
    BRUTEFORCE_BLACKLIST_PACKAGES, BRUTEFORCE_BLACKLIST_URLS, output, helpers, mangling
 | 
					    BRUTEFORCE_BLACKLIST_PACKAGES, BRUTEFORCE_BLACKLIST_URLS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HANDLER_NAME = "generic"
 | 
					HANDLER_NAME = "generic"
 | 
				
			||||||
CONFIDENCE = 45
 | 
					CONFIDENCE = 45
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,12 +14,14 @@ PRIORITY = 90
 | 
				
			|||||||
def can_handle(pkg, url=None):
 | 
					def can_handle(pkg, url=None):
 | 
				
			||||||
    return url and url.startswith('mirror://github/')
 | 
					    return url and url.startswith('mirror://github/')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def guess_package(cp, url):
 | 
					def guess_package(cp, url):
 | 
				
			||||||
    match = re.search('^mirror://github/(.*?)/(.*?)/(.*)$', url)
 | 
					    match = re.search('^mirror://github/(.*?)/(.*?)/(.*)$', url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert(match)
 | 
					    assert(match)
 | 
				
			||||||
    return (match.group(1), match.group(2), match.group(3))
 | 
					    return (match.group(1), match.group(2), match.group(3))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def scan_url(pkg, url, options):
 | 
					def scan_url(pkg, url, options):
 | 
				
			||||||
    'http://developer.github.com/v3/repos/downloads/'
 | 
					    'http://developer.github.com/v3/repos/downloads/'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										37
									
								
								pym/euscan/handlers/google_code.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								pym/euscan/handlers/google_code.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					import re
 | 
				
			||||||
 | 
					import portage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from euscan import output
 | 
				
			||||||
 | 
					from euscan.helpers import regex_from_template
 | 
				
			||||||
 | 
					from euscan.handlers.url import process_scan as url_scan
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HANDLER_NAME = "google-code"
 | 
				
			||||||
 | 
					CONFIDENCE = 90
 | 
				
			||||||
 | 
					PRIORITY = 90
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package_name_regex = r"http://(.+).googlecode.com/files/.+"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def can_handle(pkg, url=None):
 | 
				
			||||||
 | 
					    return url and re.match(package_name_regex, url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def scan_url(pkg, url, options):
 | 
				
			||||||
 | 
					    output.einfo("Using Google Code handler")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cp, ver, rev = portage.pkgsplit(pkg.cpv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    package_name = re.match(package_name_regex, url).group(1)
 | 
				
			||||||
 | 
					    base_url = "http://code.google.com/p/%s/downloads/list" % package_name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    file_pattern = regex_from_template(
 | 
				
			||||||
 | 
					        url.split("/")[-1].replace(ver, "${PV}")
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    result = url_scan(pkg, base_url, file_pattern)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ret = []
 | 
				
			||||||
 | 
					    for found_url, pv, _, _ in result:
 | 
				
			||||||
 | 
					        ret.append((found_url, pv, HANDLER_NAME, CONFIDENCE))
 | 
				
			||||||
 | 
					    return ret
 | 
				
			||||||
							
								
								
									
										34
									
								
								pym/euscan/handlers/sourceforge.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								pym/euscan/handlers/sourceforge.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					import re
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import portage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from euscan.helpers import regex_from_template
 | 
				
			||||||
 | 
					from euscan.handlers.url import process_scan as url_scan
 | 
				
			||||||
 | 
					from euscan import output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HANDLER_NAME = "sourceforge"
 | 
				
			||||||
 | 
					CONFIDENCE = 90
 | 
				
			||||||
 | 
					PRIORITY = 95
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def can_handle(pkg, url=None):
 | 
				
			||||||
 | 
					    return url and "sourceforge.net/" in url
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def scan_url(pkg, url, options):
 | 
				
			||||||
 | 
					    output.einfo("Using SourceForge handler")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cp, ver, rev = portage.pkgsplit(pkg.cpv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    project, filename = re.search("sourceforge.net/(.+)/(.+)", url).groups()
 | 
				
			||||||
 | 
					    base_url = "http://qa.debian.org/watch/sf.php/%s" % project
 | 
				
			||||||
 | 
					    file_pattern = regex_from_template(
 | 
				
			||||||
 | 
					        filename.replace(ver, "${PV}")
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    result = url_scan(pkg, base_url, file_pattern)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ret = []
 | 
				
			||||||
 | 
					    for found_url, pv, _, _ in result:
 | 
				
			||||||
 | 
					        ret.append((found_url, pv, HANDLER_NAME, CONFIDENCE))
 | 
				
			||||||
 | 
					    return ret
 | 
				
			||||||
@@ -77,13 +77,12 @@ def read_options(options):
 | 
				
			|||||||
    return base, file_pattern
 | 
					    return base, file_pattern
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def scan_pkg(pkg, options):
 | 
					def process_scan(pkg, base, file_pattern, options=None):
 | 
				
			||||||
    output.einfo("Using watch data")
 | 
					    if options is None:
 | 
				
			||||||
 | 
					        options = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cp, ver, rev = pkg.cp, pkg.version, pkg.revision
 | 
					    cp, ver, rev = pkg.cp, pkg.version, pkg.revision
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    base, file_pattern = read_options(options)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    results = []
 | 
					    results = []
 | 
				
			||||||
    if not re.search(is_pattern, base):
 | 
					    if not re.search(is_pattern, base):
 | 
				
			||||||
        steps = [(base, file_pattern)]
 | 
					        steps = [(base, file_pattern)]
 | 
				
			||||||
@@ -97,3 +96,9 @@ def scan_pkg(pkg, options):
 | 
				
			|||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return results
 | 
					    return results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def scan_pkg(pkg, options):
 | 
				
			||||||
 | 
					    output.einfo("Using watch data")
 | 
				
			||||||
 | 
					    base, file_pattern = read_options(options)
 | 
				
			||||||
 | 
					    return process_scan(pkg, base, file_pattern, options)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user