Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python2
- # -*- coding: utf-8 -*-
- import os
- import urllib
- import workerpool
- import json
- from commands import getoutput
- from sys import stdout
- i = 0
- class DownloadJob(workerpool.Job):
- "Job for downloading a given URL."
- def __init__(self, pkg):
- self.i = i
- self.porcion = porcion
- self.pkg = pkg # The url we'll need to download when the job runs
- def run(self):
- porcentaje = self.porcion*self.i*100
- # partimos pkg en 2, una con el nombre del programa y otro con la versión
- # imprimimos en pantalla el progreso
- stdout.write('\rDescargando información de los paquetes desde AUR %i (%i)' % (self.i, porcentaje))
- stdout.flush()
- #print 'Descargando', self.pkg
- pkg = self.pkg.split()
- # Abrimos la url para solicitar a AUR que nos de los datos del programa
- raw = urllib.urlopen('https://aur.archlinux.org/rpc.php?type=info&arg='+pkg[0]).read()
- # Y lo pasamos por json para poder obtener los datos
- data = json.loads(raw)
- # Si el paquete existe en AUR type valdra info, en caso contrario vale error
- if data['type'] == 'info':
- # Comprobamos que la versión de AUR es nueva
- isnew = getoutput('vercmp "%s" "%s"' % (data['results']['Version'], pkg[1]))
- if isnew == '1':
- # si la versión de AUR es mas nueva que la local se añade a la lista
- #aurupdates.append((data['results']['Name'], pkg[1], data['results']['Version']))
- print data['results']['Name']
- # Iniciamos workpool y le indicamos que ejecute 5 hilos a la vez
- pool = workerpool.WorkerPool(size=5)
- pkgs = getoutput('pacman -Qm').split('\n')
- porcion = 1.0/len(pkgs)
- # Loop over urls.txt and create a job to download the URL on each line
- for url in pkgs:
- job = DownloadJob(url)
- i += 1
- pool.put(job)
- # Send shutdown jobs to all threads, and wait until all the jobs have been completed
- pool.shutdown()
- pool.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement