diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2021-03-05 18:08:17 +0100 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2021-03-05 18:08:17 +0100 |
| commit | d5b6a4ea27f8c905e613363aab365066ad6d9cda (patch) | |
| tree | 7cbb6a3a94cb9079800023d0bf06f7bd1b1bc55c /animism-align/cli/commands | |
| parent | 9893a6e30f8fdbb95fc7066db851579e2a9bfe69 (diff) | |
auth stuff. generate secret and create user from the cli
Diffstat (limited to 'animism-align/cli/commands')
| -rw-r--r-- | animism-align/cli/commands/admin/createuser.py | 28 | ||||
| -rw-r--r-- | animism-align/cli/commands/admin/migrate_to_mysql.py (renamed from animism-align/cli/commands/site/migrate_to_mysql.py) | 0 | ||||
| -rw-r--r-- | animism-align/cli/commands/admin/secret.py | 7 | ||||
| -rw-r--r-- | animism-align/cli/commands/site/export.py | 105 |
4 files changed, 116 insertions, 24 deletions
diff --git a/animism-align/cli/commands/admin/createuser.py b/animism-align/cli/commands/admin/createuser.py new file mode 100644 index 0000000..ef90f1e --- /dev/null +++ b/animism-align/cli/commands/admin/createuser.py @@ -0,0 +1,28 @@ +import click + +@click.command('createuser') +@click.pass_context +def cli(ctx): + from getpass import getpass + from app.utils.auth_utils import encrypt_password + from app.sql.common import db, Session, User + + username = input("Username: ") + session = Session() + user_exists = session.query(User).filter(User.username == username).first() + if user_exists: + session.close() + raise ValueError("User already exists") + + password = encrypt_password(getpass()) + is_admin = input("Is admin? (y/n): ") == 'y' + + user = User( + username=username, + password=password, + is_admin=is_admin, + settings={} + ) + session.add(user) + session.commit() + session.close() diff --git a/animism-align/cli/commands/site/migrate_to_mysql.py b/animism-align/cli/commands/admin/migrate_to_mysql.py index e69dd13..e69dd13 100644 --- a/animism-align/cli/commands/site/migrate_to_mysql.py +++ b/animism-align/cli/commands/admin/migrate_to_mysql.py diff --git a/animism-align/cli/commands/admin/secret.py b/animism-align/cli/commands/admin/secret.py new file mode 100644 index 0000000..c8a212d --- /dev/null +++ b/animism-align/cli/commands/admin/secret.py @@ -0,0 +1,7 @@ +import click + +@click.command('secret') +@click.pass_context +def cli(ctx): + import random + print(hex(random.getrandbits(64 * 8)).replace('0x','')) diff --git a/animism-align/cli/commands/site/export.py b/animism-align/cli/commands/site/export.py index f3f5d3c..d706a55 100644 --- a/animism-align/cli/commands/site/export.py +++ b/animism-align/cli/commands/site/export.py @@ -7,13 +7,23 @@ from functools import reduce from shutil import copyfile import os +MEDIA_ANNOTATION_TYPES = [ + 'image', 'carousel', 'grid', 'gallery', + 'video', + 'vitrine', +] + @click.command('info') # @click.option('-g', '--graph', 'opt_graph_path', required=True, # help='Graph name') @click.option('-o', '--output', 'opt_output_dir', required=False, default="animism", help='Output directory') +@click.option('-s', '--sync/--no-sync', 'opt_sync', required=False, default=True, + help='Whether to sync over FTP') +@click.option('-j', '--js/--no-js', 'opt_js', required=False, default=False, + help='Whether to rebuild the Javascript bundle') @click.pass_context -def cli(ctx, opt_output_dir): +def cli(ctx, opt_output_dir, opt_sync, opt_js): """Export a graph""" # ------------------------------------------------ @@ -28,9 +38,10 @@ def cli(ctx, opt_output_dir): page_title = "Animism: Episode 1" page_name = "episode1" - page_desc = "A Report on Migrating Souls in Museums and Moving Pictures. Animism on e-flux.com is the ninth iteration of the exhibition, which will be released in four episodes starting November 2020." - page_image = "https://animism.e-flux.com/episode1/media/8ca4adc754093cc8578a3033de8f96af96180fbce838c480636ffd5d128d1937.jpg" - site_url = "https://animism.e-flux.com/" + page_name + page_desc = "A Report on Migrating Souls in Museums and Moving Pictures. Animism on e-flux.com is the ninth iteration of the exhibition, presented digitally here." + base_href = "https://animism.e-flux.com" + page_image = base_href + "/episode1/media/8ca4adc754093cc8578a3033de8f96af96180fbce838c480636ffd5d128d1937.jpg" + site_url = base_href + "/" + page_name page_url = "/" + page_name media_url = "/" + page_name + "/media" @@ -58,14 +69,7 @@ def cli(ctx, opt_output_dir): # ------------------------------------------------ # build the json for the e-flux search - search_json = [{ - "text": transcript_to_text(db), - "url": site_url, - "type": "text", - "previewtitle": '<i>Animism</i>, episode 1', - "previewtext": page_desc, - "previewimage": page_image, - }] + search_json = build_search_json(db, base_href, site_url, page_desc, page_image) # ------------------------------------------------ # build the index.html @@ -105,27 +109,80 @@ def cli(ctx, opt_output_dir): copy_tree(join(app_cfg.DIR_STATIC, 'img'), join(site_fp_static, 'img')) copyfile(join(app_cfg.DIR_STATIC, 'favicon.ico'), join(site_fp_root, 'favicon.ico')) + print("Site export complete!") + print(f"Site exported to: {site_fp_out}") + return + # ------------------------------------------------ # build javascript - print("Building javascript...") - print(f'NODE_ENV=production node ./node_modules/webpack-cli/bin/cli.js --config ./webpack.config.site.js -o {site_fp_out}/bundle.js') - os.chdir(app_cfg.DIR_PROJECT_ROOT) - os.system(f'NODE_ENV=production node ./node_modules/webpack-cli/bin/cli.js --config ./webpack.config.site.js -o {site_fp_out}/bundle.js') + if opt_js: + print("Building javascript...") + print(f'NODE_ENV=production node ./node_modules/webpack-cli/bin/cli.js --config ./webpack.config.site.js -o {site_fp_out}/bundle.js') + os.chdir(app_cfg.DIR_PROJECT_ROOT) + os.system(f'NODE_ENV=production node ./node_modules/webpack-cli/bin/cli.js --config ./webpack.config.site.js -o {site_fp_out}/bundle.js') + else: + print("Skipping JS build.") - print("Deploying site...") - os.system(""" - lftp -c "set ssl:verify-certificate false; set ftp:list-options -a; - open ftp://animism:Agkp8#48@93.114.86.205; - lcd ./data_store/exports/animism; - cd /; - mirror --reverse --use-cache --verbose --no-umask --ignore-time --parallel=2" - """) + if opt_sync: + print("Deploying site...") + os.system(""" + lftp -c "set ssl:verify-certificate false; set ftp:list-options -a; + open ftp://animism:Agkp8#48@93.114.86.205; + lcd ./data_store/exports/animism; + cd /; + mirror --reverse --use-cache --verbose --no-umask --ignore-time --parallel=2" + """) + else: + print("Skipping sync.") print("Site export complete!") print(f"Site exported to: {site_fp_out}") ###################################################################### +# Search JSON +###################################################################### + +def build_search_json(db, base_href, site_url, page_desc, page_image): + search_items = [] + search_items.append({ + "text": transcript_to_text(db), + "url": site_url, + "type": "text", + "previewtitle": '<i>Animism</i>, episode 1', + "previewtext": page_desc, + "previewimage": page_image, + }) + seen_media = {} + for annotation in IterateTable(db['annotation']): + if annotation['type'] not in MEDIA_ANNOTATION_TYPES: + continue + if 'media_id' not in annotation['settings']: + continue + media_id = annotation['settings']['media_id'] + if media_id in seen_media: + continue + seen_media[media_id] = True + if media_id not in db['media']['lookup']: + continue + media = db['media']['lookup'][media_id] + if 'hide_in_bibliography' in media['settings'] and media['settings']['hide_in_bibliography']: + continue + if 'thumbnail' not in media['settings']: + continue + start_ts = annotation['start_ts'] + search_items.append({ + "text": media['settings']['bibliography'], + "url": site_url + "/#ts=" + str(start_ts), + "type": annotation['type'], + "previewtitle": media['title'], + "previewtext": page_desc, + "previewimage": base_href + media['settings']['thumbnail']['url'], + }) + + return search_items + +###################################################################### # Database Functions ###################################################################### |
