Esempio n. 1
0
 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()
Esempio n. 2
0
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()
Esempio n. 3
0
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
Esempio n. 4
0
    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
Esempio n. 5
0
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,
Esempio n. 6
0
 def __init__(self, recipient: Contact, template: EmailTemplate) -> None:
     self.recipient = recipient
     self.template = template
     self.config = Config.load()
Esempio n. 7
0
    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!"
Esempio n. 8
0
def stream_computation_logs():
    payload = request.get_json()
    config = Config.from_dict(payload)
    run(config)
    return Response()
Esempio n. 9
0
 def get_object(self):
     return Config.load()