import urllib import urllib2 import json import random import hashlib import time def to_recompile(address, files): username = str(random.random()) files = sorted(files) rebuild = [] def flush_data(data): urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "data": json.dumps(data), "username": username}))).read() while 1: try: # Create new user urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % username, "username": "user_manager"}))).read() break except: time.sleep(0.01) data = [] for f in files: data.extend([3, "is_defined", f]) flush_data(data) md5_values = {} for f in files: md5 = hashlib.md5() md5.update(open(f, 'r').read()) md5_values[f] = md5.hexdigest() for f in files: v = urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "get_output", "username": username}))).read() mv_md5 = json.loads(v) if md5_values[f] == mv_md5: # Identical, so don't rebuild pass print("[CACHE] %s" % f) else: # Different, so rebuild rebuild.append(f) # Remove user again urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"__%s"' % username, "username": "user_manager"}))).read() return rebuild