diff --git a/main.py b/main.py index f7bc1411..dd9eacf0 100644 --- a/main.py +++ b/main.py @@ -1,24 +1,25 @@ # -*- coding: utf-8 -*- -import json -import re -import markdown -import os +import binascii import cgi -import urllib.request, urllib.parse, urllib.error -import time +import datetime import functools +import json import logging -import binascii -import datetime -import geoip2.database - -from flask import Flask, render_template, request, make_response, session, Response - +import os +import re +import time +import urllib.error +import urllib.parse +import urllib.request -from ideone import Ideone +import geoip2.database +import urllib3 +from flask import (Flask, Response, make_response, render_template, request, + session) import constants - +import markdown +from ideone import Ideone courses = json.load(open("courses.json")) @@ -270,6 +271,39 @@ def get_tutorial(tutorial_id, language="en"): else: return td +pool_manager = urllib3.PoolManager() # using this connection pool reduces latency + +def get_gruvian_ad(tag=None): + + env = 'dev' if request.host == 'localhost:5000' else 'prod' + + gruvian_api_key = os.environ.get('GRUVIAN_API_KEY', "") + + if not gruvian_api_key: + return None + + url = 'https://api.gruvian.com/v1/auctions' + + request_body = json.dumps( + { + "format_id": 6, + "tags": [tag] if tag else [], + "test_mode": env == 'dev', + } + ) + + headers = { + "Authorization": "Bearer " + gruvian_api_key, + "Content-Type": "application/json", + } + + try: + r = pool_manager.request("POST", url, headers=headers, body=request_body) + resp_body = json.loads(r.data.decode("utf-8")) + return resp_body + except Exception: + return None + def error404(): domain_data = get_domain_data() @@ -409,6 +443,17 @@ def index(title, language="en"): response = None is_german_user = response and response.country.iso_code == 'DE' + gruvian_ad = None + + language = domain_data['language'] + + if language != 'python' and language != 'sql': + # any domain that doesn't have a sponsorship from DataCamp + gruvian_ad = get_gruvian_ad(language) + + if gruvian_ad and not gruvian_ad.get('filled', False): + gruvian_ad = None + return make_response(render_template( "index-python.html" if (language == "en" and domain_data["language"] == "python") else "index.html", tutorial_page=tutorial != "Welcome", @@ -425,6 +470,7 @@ def index(title, language="en"): uid=uid, env="dev" if request.host == "localhost:5000" else "prod", is_german_user=is_german_user, + gruvian_ad=gruvian_ad, **current_tutorial_data )) diff --git a/requirements.txt b/requirements.txt index 4cd30c32..61f16c56 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ flask redis gunicorn -geoip2 \ No newline at end of file +geoip2 +urllib3 \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 4d783e46..a5fe799b 100644 --- a/templates/index.html +++ b/templates/index.html @@ -149,9 +149,19 @@