def __init__(self, env, db, tell_sentry, root): if self._have_ses(env): log_dammit("AWS SES is configured! We'll send mail through SES.") self._mailer = boto3.client( service_name='ses', region_name=env.aws_ses_default_region, aws_access_key_id=env.aws_ses_access_key_id, aws_secret_access_key=env.aws_ses_secret_access_key) else: log_dammit( "AWS SES is not configured! Mail will be dumped to the console here." ) self._mailer = ConsoleMailer() self.db = db self.tell_sentry = tell_sentry self.sleep_for = env.email_queue_sleep_for self.allow_up_to = env.email_queue_allow_up_to templates = {} templates_dir = os.path.join(root, 'emails') assert os.path.isdir(templates_dir) i = len(templates_dir) + 1 for spt in find_files(templates_dir, '*.spt'): base_name = spt[i:-4] templates[base_name] = compile_email_spt(spt) self._email_templates = templates
def __init__(self, env, db, tell_sentry, root): if self._have_ses(env): log_dammit("AWS SES is configured! We'll send mail through SES.") self._mailer = boto3.client( service_name='ses' , region_name=env.aws_ses_default_region , aws_access_key_id=env.aws_ses_access_key_id , aws_secret_access_key=env.aws_ses_secret_access_key ) else: log_dammit("AWS SES is not configured! Mail will be dumped to the console here.") self._mailer = ConsoleMailer() self.db = db self.tell_sentry = tell_sentry self.sleep_for = env.email_queue_sleep_for self.allow_up_to = env.email_queue_allow_up_to self.log_every = env.email_queue_log_metrics_every templates = {} templates_dir = os.path.join(root, 'emails') assert os.path.isdir(templates_dir) i = len(templates_dir) + 1 for spt in find_files(templates_dir, '*.spt'): base_name = spt[i:-4] templates[base_name] = compile_email_spt(spt) self._email_templates = templates
def compile_assets(website): client = Client(website.www_root, website.project_root) client._website = website for spt in find_files(website.www_root + '/assets/', '*.spt'): filepath = spt[:-4] # /path/to/www/assets/foo.css urlpath = spt[spt.rfind('/assets/'):-4] # /assets/foo.css if urlpath == '/assets/_well-known/acme-challenge/%token': # This *should* be dynamic. continue try: # Remove any existing compiled asset, so we can access the dynamic # one instead (Aspen prefers foo.css over foo.css.spt). os.unlink(filepath) except: pass headers = {} if website.base_url: url = urlparse.urlparse(website.base_url) headers[b'HTTP_X_FORWARDED_PROTO'] = str(url.scheme) headers[b'HTTP_HOST'] = str(url.netloc) content = client.GET(urlpath, **headers).body tmpfd, tmpfpath = mkstemp(dir='.') os.write(tmpfd, content) os.close(tmpfd) os.rename(tmpfpath, filepath) atexit.register(lambda: clean_assets(website.www_root))
def clean_assets(www_root): if '__HACK_SUPPRESS_ASSET_CLEANING' in os.environ: return for spt in find_files(www_root + '/assets/', '*.spt'): try: os.unlink(spt[:-4]) except: pass
def clean_assets(www_root): if '__HACK_SUPPRESS_ASSET_CLEANING' in os.environ: return for spt in find_files(www_root+'/assets/', '*.spt'): try: os.unlink(spt[:-4]) except: pass
def compile_assets(website): client = Client(website.www_root, website.project_root) client._website = website for spt in find_files(website.www_root+'/assets/', '*.spt'): filepath = spt[:-4] # /path/to/www/assets/foo.css urlpath = spt[spt.rfind('/assets/'):-4] # /assets/foo.css try: # Remove any existing compiled asset, so we can access the dynamic # one instead (Aspen prefers foo.css over foo.css.spt). os.unlink(filepath) except: pass headers = {} if website.base_url: url = urlparse.urlparse(website.base_url) headers[b'HTTP_X_FORWARDED_PROTO'] = str(url.scheme) headers[b'HTTP_HOST'] = str(url.netloc) content = client.GET(urlpath, **headers).body tmpfd, tmpfpath = mkstemp(dir='.') os.write(tmpfd, content.encode('utf8')) os.close(tmpfd) os.rename(tmpfpath, filepath) atexit.register(lambda: clean_assets(website.www_root))
def clean_assets(www_root): for spt in find_files(www_root + '/assets/', '*.spt'): try: os.unlink(spt[:-4]) except: pass