def warm_app(id, short_name, featured=False): if id not in apps_cached: cached_apps.get_app(short_name) cached_apps.n_tasks(id) n_task_runs = cached_apps.n_task_runs(id) cached_apps.overall_progress(id) cached_apps.last_activity(id) cached_apps.n_completed_tasks(id) cached_apps.n_volunteers(id) if n_task_runs >= 1000 or featured: print "Getting stats for %s as it has %s task runs" % (short_name, n_task_runs) stats.get_stats(id, app.config.get('GEO')) apps_cached.append(id)
def warm_app(id, short_name, featured=False): if id not in apps_cached: cached_apps.get_app(short_name) cached_apps.n_tasks(id) n_task_runs = cached_apps.n_task_runs(id) cached_apps.overall_progress(id) cached_apps.last_activity(id) cached_apps.n_completed_tasks(id) cached_apps.n_volunteers(id) if n_task_runs >= 1000 or featured: print("Getting stats for %s as it has %s task runs" % (short_name, n_task_runs)) stats.get_stats(id) apps_cached.append(id)
def resize_project_avatars(): """Resize project avatars to 512px.""" if app.config['UPLOAD_METHOD'] == 'rackspace': import pyrax import tempfile import requests from PIL import Image import time import pybossa.cache.projects as cached_apps # Disable cache to update the data in it :-) os.environ['PYBOSSA_REDIS_CACHE_DISABLED'] = '1' pyrax.set_setting("identity_type", "rackspace") pyrax.set_credentials(username=app.config['RACKSPACE_USERNAME'], api_key=app.config['RACKSPACE_API_KEY'], region=app.config['RACKSPACE_REGION']) cf = pyrax.cloudfiles #apps = Project.query.all() file_name = 'project_id_updated_thumbnails.txt' project_id_updated_thumbnails = [] if os.path.isfile(file_name): f = open(file_name, 'r') project_id_updated_thumbnails = f.readlines() f.close() apps = Project.query.filter(~Project.id.in_(project_id_updated_thumbnails)).all() #apps = [Project.query.get(2042)] print "Downloading avatars for %s projects" % len(apps) dirpath = tempfile.mkdtemp() f = open(file_name, 'a') for a in apps: try: if a.info.get('container'): cont = cf.get_container(a.info['container']) avatar_url = "%s/%s" % (cont.cdn_uri, a.info['thumbnail']) r = requests.get(avatar_url, stream=True) if r.status_code == 200: print "Downloading avatar for %s ..." % a.short_name prefix = time.time() filename = "app_%s_thumbnail_%s.png" % (a.id, prefix) with open(os.path.join(dirpath, filename), 'wb') as f: for chunk in r.iter_content(1024): f.write(chunk) # Resize image im = Image.open(os.path.join(dirpath, filename)) size = 512, 512 tmp = im.resize(size, Image.ANTIALIAS) scale_down_img = tmp.convert('P', colors=255, palette=Image.ADAPTIVE) scale_down_img.save(os.path.join(dirpath, filename), format='png') print "New scaled down image created!" print "%s" % (os.path.join(dirpath, filename)) print "---" chksum = pyrax.utils.get_checksum(os.path.join(dirpath, filename)) cf.upload_file(cont, os.path.join(dirpath, filename), obj_name=filename, etag=chksum) old_avatar = a.info['thumbnail'] # Update new values a.info['thumbnail'] = filename #a.info['container'] = "user_%s" % u.id db.session.commit() f = open(file_name, 'a') f.write("%s\n" % a.id) # delete old avatar obj = cont.get_object(old_avatar) obj.delete() print "Done!" cached_apps.get_app(a.short_name) else: print "No Avatar found." else: print "No avatar found." except pyrax.exceptions.NoSuchObject: print "Previous avatar not found, so not deleting it." except: raise print "No Avatar, this project will use the placehoder." f.close()
def resize_project_avatars(): """Resize project avatars to 512px.""" if app.config['UPLOAD_METHOD'] == 'rackspace': import pyrax import tempfile import requests from PIL import Image import time import pybossa.cache.projects as cached_apps # Disable cache to update the data in it :-) os.environ['PYBOSSA_REDIS_CACHE_DISABLED'] = '1' pyrax.set_setting("identity_type", "rackspace") pyrax.set_credentials(username=app.config['RACKSPACE_USERNAME'], api_key=app.config['RACKSPACE_API_KEY'], region=app.config['RACKSPACE_REGION']) cf = pyrax.cloudfiles #apps = Project.query.all() file_name = 'project_id_updated_thumbnails.txt' project_id_updated_thumbnails = [] if os.path.isfile(file_name): f = open(file_name, 'r') project_id_updated_thumbnails = f.readlines() f.close() apps = Project.query.filter( ~Project.id.in_(project_id_updated_thumbnails)).all() #apps = [Project.query.get(2042)] print "Downloading avatars for %s projects" % len(apps) dirpath = tempfile.mkdtemp() f = open(file_name, 'a') for a in apps: try: if a.info.get('container'): cont = cf.get_container(a.info['container']) avatar_url = "%s/%s" % (cont.cdn_ssl_uri, a.info['thumbnail']) r = requests.get(avatar_url, stream=True) if r.status_code == 200: print "Downloading avatar for %s ..." % a.short_name prefix = time.time() filename = "app_%s_thumbnail_%s.png" % (a.id, prefix) with open(os.path.join(dirpath, filename), 'wb') as f: for chunk in r.iter_content(1024): f.write(chunk) # Resize image im = Image.open(os.path.join(dirpath, filename)) size = 512, 512 tmp = im.resize(size, Image.ANTIALIAS) scale_down_img = tmp.convert('P', colors=255, palette=Image.ADAPTIVE) scale_down_img.save(os.path.join(dirpath, filename), format='png') print "New scaled down image created!" print "%s" % (os.path.join(dirpath, filename)) print "---" chksum = pyrax.utils.get_checksum( os.path.join(dirpath, filename)) cf.upload_file(cont, os.path.join(dirpath, filename), obj_name=filename, etag=chksum) old_avatar = a.info['thumbnail'] # Update new values a.info['thumbnail'] = filename #a.info['container'] = "user_%s" % u.id db.session.commit() f = open(file_name, 'a') f.write("%s\n" % a.id) # delete old avatar obj = cont.get_object(old_avatar) obj.delete() print "Done!" cached_apps.get_app(a.short_name) else: print "No Avatar found." else: print "No avatar found." except pyrax.exceptions.NoSuchObject: print "Previous avatar not found, so not deleting it." except: raise print "No Avatar, this project will use the placehoder." f.close()