def get(self): today = date.today() results = parser.parse(today) if results: ndb.put_multi(results) memcache.delete('results') config = Config.get_master() config.last_refresh = datetime.now() config.put()
def start_computation(): payload = request.get_json() config = Config.from_dict(payload) global is_computation_running is_computation_running = True run(config) is_computation_running = False return Response()
def parse(day): """ Parses log file from given day in search for URLs. Returns list of Result entities. """ config = Config.get_master() # Timezones! \o/ if config.last_refresh: last_refresh_utc = config.last_refresh.replace(tzinfo=UTC()) last_refresh = last_refresh_utc.astimezone(CEST()) else: last_refresh = None # Fetching url = LOG_URL % day.strftime('%Y-%m-%d') log = urlfetch.fetch(url) lines = log.content.splitlines() results = [] # Parsing for line in lines: urls = URL_REGEX.findall(line) if not urls: continue time_author = AUTHOR_REGEX.search(line) if not time_author: continue when = None if time_author: author = time_author.group(4) when_t = time(int(time_author.group(1)), int(time_author.group(2))) when_naive = datetime.combine(day, when_t) + TIME_DELTA when = when_naive.replace(tzinfo=CEST()) if last_refresh and when and when < last_refresh: continue # More timezones \o/ when = when.replace(tzinfo=None) # Remove URLs... info = URL_REGEX.sub('', line) # Author and time... info = AUTHOR_REGEX.sub('', info) # and leave all other info info = info.strip() for url in urls: result = Result( url=url, author=author, info=info, when=when ) results.append(result) return results
def replace(self, configs): result = {'status': 0, 'msg': 'ok', 'data': []} # 清空并替换 try: self.purge() with transaction.atomic(): Config.objects.bulk_create([ Config(item=items['key'], value=items['value']) for items in json.loads(configs) ]) except Exception as e: logger.error(traceback.format_exc()) result['status'] = 1 result['msg'] = str(e) finally: self.get_all_config() return result
from functools import wraps from django.http import JsonResponse from okta_jwt.jwt import validate_token, generate_token from core.models import Config config = Config() def okta_login_required(func): @wraps(func) def wrap(request, *args, **kw): is_valid, message = check_token(request) if is_valid: return func(request, *args, **kw) else: return message return wrap def check_token(request): access_token = request.META.get('HTTP_AUTHORIZATION') if access_token is None: return False, JsonResponse({"result": "HTTP_AUTHORIZATION required"}, status=400) try: validate_token(access_token, config.issuer, config.aud,
def __init__(self, recipient: Contact, template: EmailTemplate) -> None: self.recipient = recipient self.template = template self.config = Config.load()
def handle(self, *args, **options): sub = get_subreddit() # CLEAR ALL SO WE CAN ALPHABETICALLY SORT THIS SHIT sub.flair.templates.clear() #sub.flair.templates.add("CUSTOM", css_class="ag", text_editable=True) # Remove inactive generic flairs and build the generic flair list print "Removing inactive generic flairs" live_flairs = [] for flair in sub.flair.templates: generic = Generic.objects.filter(name=flair['flair_text']).first() if generic != None: if generic.active: live_flairs.append(generic.id) else: # Remove the generic sub.flair.templates.delete(flair['flair_template_id']) print "Removed %s" % generic.name # Add newly active generic flairs print "Adding newly active generic flairs" for generic in Generic.objects.filter(active=True).exclude( id__in=live_flairs).all(): sub.flair.templates.add(generic.name, css_class=generic.css_class, text_editable=False) print "Added %s" % generic.name # Remove inactive alliance flairs and build the alliance flair list print "Removing inactive alliance flairs" live_flairs = [] for flair in sub.flair.templates: alliance = Alliance.objects.filter( name=flair['flair_text']).first() if alliance != None: if alliance.active: live_flairs.append(alliance.id) else: # Remove the alliance sub.flair.templates.delete(flair['flair_template_id']) print "Removed %s" % alliance.name # Add newly active alliance flairs print "Adding newly active alliance flairs" for alliance in Alliance.objects.filter(active=True).exclude( id__in=live_flairs).order_by('name').all(): sub.flair.templates.add(alliance.name, css_class=alliance.css_class, text_editable=False) print "Added %s" % alliance.name # Remove inactive corp flairs and build the corp flair list print "Removing inactive corp flairs" live_flairs = [] for flair in sub.flair.templates: corp = Corp.objects.filter(name=flair['flair_text']).first() if corp != None: if corp.active: live_flairs.append(corp.id) else: # Remove the corp sub.flair.templates.delete(flair['flair_template_id']) print "Removed %s" % corp.name # Add newly active corp flairs print "Adding newly active corp flairs" for corp in Corp.objects.filter(active=True).exclude( id__in=live_flairs).order_by('name').all(): sub.flair.templates.add(corp.name, css_class="c%i" % corp.id, text_editable=False) print "Added %s" % corp.name # Get final lists generics = Generic.objects.filter(active=True).all() alliances = Alliance.objects.filter(active=True).order_by('name').all() corps = Corp.objects.filter(active=True).order_by('name').all() print "Getting final list of active generics (%s), alliances (%s) and corps (%s)" % ( generics.count(), alliances.count(), corps.count()) # Generate sprite sheets print "Generating generic spritesheet" generic_sprite = generate_spritesheet(generics, "generics.png") print "Generating alliance spritesheet" alliance_sprite = generate_spritesheet(alliances, "alliances.png") print "Generating corp spritesheet" corp_sprite = generate_spritesheet(corps, "corps.png") # Delete old spritesheets print "Deleting old spritesheets" config = Config.get_solo() if config.alliance_sprite != None: sub.stylesheet.delete_image("g") sub.stylesheet.delete_image(config.alliance_sprite) sub.stylesheet.delete_image(config.corp_sprite) # Upload sprite sheets print "Uploading spritesheets" generic_sprite_name = "g" alliance_sprite_name = "a" corp_sprite_name = "c" sub.stylesheet.upload(generic_sprite_name, generic_sprite) sub.stylesheet.upload(alliance_sprite_name, alliance_sprite) sub.stylesheet.upload(corp_sprite_name, corp_sprite) config.alliance_sprite = alliance_sprite_name config.corp_sprite = corp_sprite_name # Generate CSS print "Fetching base CSS from github" base_css = requests.get(settings.SUBREDDIT_CSS_URL).text flair_css = "" print "Generating flair CSS" for i, generic in enumerate(generics): x, y = calc_location(i) css = ".flair-%s { background: url(%%%%%s%%%%) %i -%ipx repeat-y } " % ( generic.css_class, generic_sprite_name, x, y) flair_css = flair_css + css for i, alliance in enumerate(alliances): x, y = calc_location(i) css = ".flair-%s { background: url(%%%%%s%%%%) %i -%ipx repeat-y } " % ( alliance.css_class, alliance_sprite_name, x, y) flair_css = flair_css + css for i, corp in enumerate(corps): x, y = calc_location(i) css = ".flair-%s { background: url(%%%%%s%%%%) %i -%ipx repeat-y } " % ( corp.css_class, corp_sprite_name, x, y) flair_css = flair_css + css print "Compressing..." css = compress(base_css + flair_css) config.style_size = len(css.encode("utf-8")) config.save() print config.style_size, "bytes" print "Uploading CSS Sheet" sub.stylesheet.update(css) print "Done!"
def stream_computation_logs(): payload = request.get_json() config = Config.from_dict(payload) run(config) return Response()
def get_object(self): return Config.load()