def check_state(session): logger.debug('start') status = session['status'] if 'key' not in session: status = bitops.sub(status, 3) status = bitops.sub(status, 4) status = bitops.sub(status, 5) status = bitops.add(status, 2) save_status(session, status)
def upload_to_flickr(session): """Upload matched photos to Flickr""" logger.debug('start') flickr = Flickr(token=session['token']) userdir, flickr_dir, btsync_dir = get_dirs(session) photos = [x for x in db.btsync.find({'download': 7, 'owner': session['username']})] matches = [x for x in db.matches.find({'owner': session['username']}) if x['btsync'] in [y['name'] for y in photos]] logger.info('found %d available photos', len(photos)) logger.info('found %d files to upload', len(matches)) #print(photos) #print(matches) matches = [dict(match=x, btsync=[y for y in photos if y['name'] == x['btsync']][0], flickr=[z for z in db.flickr.find({'instaflickr': {'status': 1}, 'owner': session['nsid']}) if z['id'] + '.jpg' == x['flickr']][0]) for x in matches] for match in matches: if flickr.replace_photo(match, btsync_dir): btsync_img = match['btsync'] btsync_img['download'] = 2 flickr_img = match['flickr'] flickr_img['instaflickr']['status'] = 3 db.btsync.save(btsync_img) db.flickr.save(flickr_img) os.remove(os.path.join(flickr_dir, flickr_img['id']+'.jpg')) status = bitops.sub(session['status'], 4) save_status(session, status)
def download_from_flickr(session): """Download photos from Flickr. Statuses in db.flickr collection: 0 - not downloaded 1 - downloaded 2 - not from instagram 3 - replaced """ logger.debug('start') check_dirs(session) flickr = Flickr(token=session['token']) dir = get_dirs(session)[1] # saving photos info to db db_photos = [x for x in db.flickr.find({'owner': session['nsid']})] # photos already in db # todo: do intelligent requesting of photos # user_photos = flickr.photos(max([x['id'] for x in db_photos])) # all user photos user_photos = flickr.photos() # all user photos logger.info('%s has %d photos', session['username'], len(user_photos)) new_photos = [x for x in user_photos if x['id'] not in [y['id'] for y in db_photos]] # new photos logger.info('found %d new photos', len(new_photos)) if new_photos: db.flickr.insert([dict(x, instaflickr={'status': 0}) for x in new_photos]) # downloading images from flickr photos = [x for x in db.flickr.find({'owner': session['nsid'], 'instaflickr': {'status': 0}})] logger.info('%d photos to download', len(photos)) flickr.download_photos(photos, dir) # for photo in downloaded_photos: # db.flickr.save(photo) status = bitops.sub(session['status'], 1) save_status(session, status)
#size = sum([os.path.getsize(f) for f in os.listdir(dir) if os.path.isfile(f)]) size = sum([x['size'] for x in filter(download(1), db_files)]) logger.info('occupied space: %.2f MB', size / 1024.0 / 1024.0) for file in sorted(filter(download(0), db_files), key=lambda x: x['name'], reverse=True): # in descending order size += file['size'] if size >= MAX_SIZE: # if quota reached - stop loop break logger.info('beginning sync file %s (%d bytes)', file['name'], file['size']) response = btsync.request(method='set_file_prefs', secret=key, path=file['name'], download=1) logger.debug('response from btsync on file %s: %s', file['name'], response) file['download'] = 1 db.btsync.save(file) if not filter(download(0, 1, 2), db_files): logger.info('All files synced, uploaded to Flickr and cleaned up') status = bitops.sub(status, 3) # save_status(session, status) #logger.debug('response from btsync: %s', response) def check_dirs(session): userdir, flickrdir, btsyncdir = get_dirs(session) if not os.path.exists(userdir): os.makedirs(userdir) os.makedirs(btsyncdir) os.makedirs(flickrdir) def initial_status(session):