+ {0}
+
+
+ Prev
+ Home
+ Next
+
+
+
+ + + diff --git a/index.html b/index.html index be93c18..4be185d 100644 --- a/index.html +++ b/index.html @@ -62,6 +62,7 @@
+ + + diff --git a/index.html b/index.html index be93c18..4be185d 100644 --- a/index.html +++ b/index.html @@ -62,6 +62,7 @@
- My Benches +
- My Ski Photos
- Github: aarongut
- Public Key: 9CAC97E9
- Campaign Website diff --git a/pub.py b/pub.py index ab793cc..e5c925a 100755 --- a/pub.py +++ b/pub.py @@ -7,14 +7,13 @@ import sys import boto3 BUCKET='www.aarongutierrez.com' -AWS_ACCESS_KEY='AKIAIDTVRR2EKQ5FYIEQ' -AWS_SECRET_KEY='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' -s3 = boto3.client('s3', - aws_access_key_id=AWS_ACCESS_KEY, - aws_secret_access_key=AWS_SECRET_KEY) +session = boto3.Session(profile_name='push') +s3 = session.client('s3') -bench_fmt = """


"""
TYPE_MAP = {
'asc': 'text/plain',
@@ -40,7 +39,8 @@ def upload_file(filename, overwrite=True):
s3.upload_file(filename, BUCKET, filename, ExtraArgs={
'ACL': 'public-read',
- 'ContentType': TYPE_MAP[ext]
+ 'ContentType': TYPE_MAP[ext],
+ 'CacheControl': 'public, max-age={}'.format('31536000' if ext in ['gif', 'jpg', 'png', 'webp'] else 86400)
})
print('\tDone.')
@@ -77,13 +77,32 @@ def make_bench():
with open('bench/{}.html'.format(i//16 + 1), 'w') as out:
out.write(template.format(page, prev_link, next_link))
+ for i in range(1, num_imgs+1):
+ make_bench_view(i,
+ '#' if (prev_pg == 0) else str(i-1) + '.html',
+ '#' if (i+1 > num_imgs) else str(i+1) + '.html')
+
+
+def make_bench_view(idx, prev, nxt):
+ with open('bench_view_template.html', 'r') as f:
+ template = f.read()
+
+ body = bench_view_ftm.format(idx)
+
+ with open('bench/view/{}.html'.format(idx), 'w') as out:
+ out.write(template.format(body, idx, prev, nxt))
+
def upload_bench():
imgs = os.listdir('img/bench')
img_files = [f for f in filter_filenames(imgs, ['jpg', 'webp'])]
- files = filter_filenames(os.listdir('bench'), 'html')
- for f in files:
+ grid = filter_filenames(os.listdir('bench'), 'html')
+ view = filter_filenames(os.listdir('bench/view'), 'html')
+ for f in grid:
upload_file('bench/{}'.format(f))
+ for f in view:
+ upload_file('bench/view/{}'.format(f))
+
for f in img_files:
upload_file('img/bench/{}'.format(f), overwrite=False)
diff --git a/pubkey.asc b/pubkey.asc
new file mode 100644
index 0000000..ad705fd
--- /dev/null
+++ b/pubkey.asc
@@ -0,0 +1,285 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+8tNGdoDjR1ZmtAkKGRooKSo4OTpISUpXWFlaZ2hpand4eXqGh4iJipCWl5iZmqCl
+pqeoqaqwtba3uLm6wMTFxsfIycrQ1NXW19jZ2uDk5ebn6Onq8/T19vf4+fr/xAAf
+AQADAQEBAQEBAQEBAAAAAAABAgADBAUGBwgJCgv/xADDEQACAgEDAwMCAwUCBQIE
+BIcBAAIRAxASIQQgMUETBTAiMlEUQAYzI2FCFXFSNIFQJJGhQ7EWB2I1U/DRJWDB
+ROFy8ReCYzZwJkVUkiei0ggJChgZGigpKjc4OTpGR0hJSlVWV1hZWmRlZmdoaWpz
+dHV2d3h5eoCDhIWGh4iJipCTlJWWl5iZmqCjpKWmp6ipqrCys7S1tre4ubrAwsPE
+xcbHyMnK0NPU1dbX2Nna4OLj5OXm5+jp6vLz9PX29/j5+v/bAEMADAwMDAwMFAwM
+FB0UFBQdJx0dHR0nMScnJycnMTsxMTExMTE7Ozs7Ozs7O0dHR0dHR1NTU1NTXV1d
+XV1dXV1dXf/bAEMBDg8PGBYYKBYWKGFCNkJhYWFhYWFhYWFhYWFhYWFhYWFhYWFh
+YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYf/aAAwDAQACEQMRAAABfRt28+2x
+ttq22rbattq22rbYW04GNMEbbG22rbattq22rbRU7attq22rbattq2RHPqrZPLuW
+QxhoeQajZGaMgB98k4ou3l22cbbVttWiYqdtW21bbVttWbuazh6XLUKuXdJSSaHT
+NANyiusIMYfMmBhttViesd6IXbelx7bVttWiYqdtW21bbVphWbgZmB5vY4e42eml
+amUCHWMxh8mmg3Tam1fasioXDE1XEhN6XFttou21aJip21bbVttWVAeDqGRe5t3C
+0LViKQt1mYll22IQ0eBVmIXIga9u+aFHz6kuevBW268Ntq0TFTtq22rbapauWnB1
+LzV1y9D0gE07muKwey3WYuAAh9DNdDAcCM0bkSyDtq+y3xJtu/m22rRMVO2rbatt
+qzJ614+kD5nZ8XUNo5b0CINpm6f11mr1zCxbkNDjMyEmHCPUBsK5kNZ1tp0ZK23b
+zbbVomKnbVttW21Zk9b8vWixr7Hg6Bw4WQ0lyihOQGJElayGyncEAgwxMBF0IcRP
+dzbbdGG21aJip21bbVttWQvI7Z83ceT6RSN1FCtc1i/NXlIIloYl6uuclSAkYm7i
+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
+=vkU8
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/site.css b/site.css
index e8c6e79..7ab9001 100644
--- a/site.css
+++ b/site.css
@@ -43,6 +43,11 @@ footer {
max-height: 160px;
}
+.img-view img {
+ max-height: 100vh;
+ width: 100%;
+}
+
div.nav {
display: flex;
justify-content: space-between;






































































