summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2021-03-15 19:09:37 +0100
committerJules Laplace <julescarbon@gmail.com>2021-03-15 19:09:37 +0100
commit8792e9fe1c7ab76c35f9a18d866880ba3da2c13e (patch)
treefbdc78484f654ec344d10814cb83987c873d4360 /cli
parent7c15f34186622410e25ee85c01d832e48e012140 (diff)
move frontend site folder. add video support
Diffstat (limited to 'cli')
-rw-r--r--cli/app/settings/app_cfg.py2
-rw-r--r--cli/app/site/export.py125
-rw-r--r--cli/commands/site/export.py123
3 files changed, 129 insertions, 121 deletions
diff --git a/cli/app/settings/app_cfg.py b/cli/app/settings/app_cfg.py
index 5fc4982..3865abd 100644
--- a/cli/app/settings/app_cfg.py
+++ b/cli/app/settings/app_cfg.py
@@ -63,6 +63,8 @@ DIR_STATIC = join(DIR_APP, 'static')
HASH_TREE_DEPTH = 3 # for sha256 subdirs
HASH_BRANCH_SIZE = 3 # for sha256 subdirs
+DIR_PUBLIC_EXPORTS = os.getenv('DIR_PUBLIC_EXPORTS') or DIR_EXPORTS
+
# -----------------------------------------------------------------------------
# S3 storage
diff --git a/cli/app/site/export.py b/cli/app/site/export.py
new file mode 100644
index 0000000..d513286
--- /dev/null
+++ b/cli/app/site/export.py
@@ -0,0 +1,125 @@
+import click
+
+from app.settings import app_cfg
+from app.utils.file_utils import load_text, write_json, write_text
+from os.path import join
+import os
+
+from app.sql.common import db, Session, Graph, Page, Tile
+from distutils.dir_util import copy_tree
+
+def export_site(ctx, opt_graph_path, opt_output_dir):
+ """Export a graph"""
+
+ # ------------------------------------------------
+ # generate HTML for index and all pages
+
+ session = Session()
+ graph = session.query(Graph).filter(Graph.path == opt_graph_path).first()
+ if graph is None:
+ print(f"Not a graph: {opt_graph_path}")
+ return
+
+ # build everything here
+ graph_dir = os.path.abspath(join(opt_output_dir, graph.path))
+
+ # load site index
+ index_html = load_text(join(app_cfg.DIR_STATIC, 'site.html'), split=False)
+ index_html = index_html.replace('SITE_PATH', '/' + graph.path)
+
+ # write site JSON data
+ site_data = { 'graph': sanitize_graph(graph.toSiteJSON()) }
+ write_json(site_data, join(graph_dir, 'index.json'), default=str, minify=False)
+
+ # import custom css
+ site_css = load_text(join(app_cfg.DIR_STATIC, 'site.css'), split=False)
+ site_css = site_css.replace('SITE_PATH', '/' + graph.path)
+ write_text(site_css, join(graph_dir, 'site.css'))
+ copy_tree(join(app_cfg.DIR_STATIC, 'fonts'), join(graph_dir, 'static/fonts'))
+ copy_tree(join(app_cfg.DIR_STATIC, 'img'), join(graph_dir, 'static/img'))
+
+ # write index file, redirects to homepage
+ home_page = site_data['graph']['home_page']
+ if home_page is None:
+ print("Homepage not set! Shift-click a page on the graph to make it the homepage.")
+ return
+ write_text(f'<meta http-equiv="refresh" content="0; url={home_page}">', join(graph_dir, 'index.html'))
+
+ index_path = ""
+ for page in graph.pages:
+ page_path = f'{graph.path}/{page.path}'
+ if page.id == graph.home_page_id:
+ index_path = page_path
+ print(f'/{page_path} [index]')
+ else:
+ print(f'/{page_path}')
+ write_index(graph, page, index_html, join(graph_dir, page.path, 'index.html'))
+
+ build_javascript(graph_dir)
+
+ print("Site export complete!")
+ print(f"Graph exported to: {graph_dir}")
+
+def build_javascript(graph_dir):
+ print("Building javascript...")
+ print(f'NODE_ENV=production node ./node_modules/webpack-cli/bin/cli.js --config ./webpack.config.site.js -o {graph_dir}/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 {graph_dir}/bundle.js')
+
+def write_index(graph, page, index_html, fp_out):
+ if page is None:
+ page_title = graph.title
+ else:
+ page_title = page.title
+ index_html = index_html.replace('BUNDLE_PATH', join('/', graph.path, 'bundle.js'))
+ index_html = index_html.replace('PAGE_TITLE', page_title)
+ write_text(index_html, fp_out)
+
+def sanitize_graph(graph):
+ page_path_lookup = {}
+ page_lookup = {}
+ for page in graph['pages']:
+ page_path = join('/', graph['path'], page['path'])
+ if page_path in page_path_lookup:
+ print(f"/!\\ WARNING! Duplicate found of {page_path}")
+ else:
+ page_path_lookup[page['id']] = page_path
+ for page in graph['pages']:
+ sanitize_page(page)
+ if page['id'] == 12:
+ print(page)
+ for tile in page['tiles']:
+ if tile['target_page_id']:
+ if tile['target_page_id'] == -1:
+ tile['href'] = tile['settings']['external_link_url']
+ elif tile['target_page_id'] > 0:
+ tile['href'] = page_path_lookup[tile['target_page_id']]
+ sanitize_tile(tile)
+ page_path = page_path_lookup[page['id']]
+ page_lookup[page_path] = page
+ # print(page_lookup['/asdf/testttt'])
+ graph['pages'] = page_lookup
+ graph['home_page'] = page_path_lookup[graph['home_page_id']]
+ return graph
+
+def sanitize_page(data):
+ if 'created_at' in data:
+ del data['created_at']
+ if 'updated_at' in data:
+ del data['updated_at']
+ if 'graph_id' in data:
+ del data['graph_id']
+
+def sanitize_tile(data):
+ if 'created_at' in data:
+ del data['created_at']
+ if 'updated_at' in data:
+ del data['updated_at']
+ if 'username' in data:
+ del data['username']
+ if 'graph_id' in data:
+ del data['graph_id']
+ if 'page_id' in data:
+ del data['page_id']
+ if 'target_page_id' in data:
+ del data['target_page_id']
diff --git a/cli/commands/site/export.py b/cli/commands/site/export.py
index 0ba6a62..68773e9 100644
--- a/cli/commands/site/export.py
+++ b/cli/commands/site/export.py
@@ -1,9 +1,7 @@
import click
from app.settings import app_cfg
-from app.utils.file_utils import load_text, write_json, write_text
-from os.path import join
-import os
+from app.site.export import export_site
@click.command('info')
@click.option('-g', '--graph', 'opt_graph_path', required=True,
@@ -14,121 +12,4 @@ import os
def cli(ctx, opt_graph_path, opt_output_dir):
"""Export a graph"""
- # ------------------------------------------------
- # imports
-
- from app.sql.common import db, Session, Graph, Page, Tile
- from distutils.dir_util import copy_tree
-
- # ------------------------------------------------
- # generate HTML for index and all pages
-
- session = Session()
- graph = session.query(Graph).filter(Graph.path == opt_graph_path).first()
- if graph is None:
- print(f"Not a graph: {opt_graph_path}")
- return
-
- # build everything here
- graph_dir = os.path.abspath(join(opt_output_dir, graph.path))
-
- # load site index
- index_html = load_text(join(app_cfg.DIR_STATIC, 'site.html'), split=False)
- index_html = index_html.replace('SITE_PATH', '/' + graph.path)
-
- # write site JSON data
- site_data = { 'graph': sanitize_graph(graph.toSiteJSON()) }
- write_json(site_data, join(graph_dir, 'index.json'), default=str, minify=False)
-
- # import custom css
- site_css = load_text(join(app_cfg.DIR_STATIC, 'site.css'), split=False)
- site_css = site_css.replace('SITE_PATH', '/' + graph.path)
- write_text(site_css, join(graph_dir, 'site.css'))
- copy_tree(join(app_cfg.DIR_STATIC, 'fonts'), join(graph_dir, 'static/fonts'))
- copy_tree(join(app_cfg.DIR_STATIC, 'img'), join(graph_dir, 'static/img'))
-
- # write index file, redirects to homepage
- home_page = site_data['graph']['home_page']
- if home_page is None:
- print("Homepage not set! Shift-click a page on the graph to make it the homepage.")
- return
- write_text(f'<meta http-equiv="refresh" content="0; url={home_page}">', join(graph_dir, 'index.html'))
-
- index_path = ""
- for page in graph.pages:
- page_path = f'{graph.path}/{page.path}'
- if page.id == graph.home_page_id:
- index_path = page_path
- print(f'/{page_path} [index]')
- else:
- print(f'/{page_path}')
- write_index(graph, page, index_html, join(graph_dir, page.path, 'index.html'))
-
- # ------------------------------------------------
- # build javascript
-
- print("Building javascript...")
- print(f'NODE_ENV=production node ./node_modules/webpack-cli/bin/cli.js --config ./webpack.config.site.js -o {graph_dir}/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 {graph_dir}/bundle.js')
-
- print("Site export complete!")
- print(f"Graph exported to: {graph_dir}")
-
-def write_index(graph, page, index_html, fp_out):
- if page is None:
- page_title = graph.title
- else:
- page_title = page.title
- index_html = index_html.replace('BUNDLE_PATH', join('/', graph.path, 'bundle.js'))
- index_html = index_html.replace('PAGE_TITLE', page_title)
- write_text(index_html, fp_out)
-
-def sanitize_graph(graph):
- page_path_lookup = {}
- page_lookup = {}
- for page in graph['pages']:
- page_path = join('/', graph['path'], page['path'])
- if page_path in page_path_lookup:
- print(f"/!\\ WARNING! Duplicate found of {page_path}")
- else:
- page_path_lookup[page['id']] = page_path
- for page in graph['pages']:
- sanitize_page(page)
- if page['id'] == 12:
- print(page)
- for tile in page['tiles']:
- if tile['target_page_id']:
- if tile['target_page_id'] == -1:
- tile['href'] = tile['settings']['external_link_url']
- elif tile['target_page_id'] > 0:
- tile['href'] = page_path_lookup[tile['target_page_id']]
- sanitize_tile(tile)
- page_path = page_path_lookup[page['id']]
- page_lookup[page_path] = page
- # print(page_lookup['/asdf/testttt'])
- graph['pages'] = page_lookup
- graph['home_page'] = page_path_lookup[graph['home_page_id']]
- return graph
-
-def sanitize_page(data):
- if 'created_at' in data:
- del data['created_at']
- if 'updated_at' in data:
- del data['updated_at']
- if 'graph_id' in data:
- del data['graph_id']
-
-def sanitize_tile(data):
- if 'created_at' in data:
- del data['created_at']
- if 'updated_at' in data:
- del data['updated_at']
- if 'username' in data:
- del data['username']
- if 'graph_id' in data:
- del data['graph_id']
- if 'page_id' in data:
- del data['page_id']
- if 'target_page_id' in data:
- del data['target_page_id']
+ export_site(opt_graph_path, opt_output_dir) \ No newline at end of file