# HG changeset patch
# User drewp@bigasterisk.com
# Date 1595399284 25200
# Node ID 3f2da406c78894d4de7ad6a60d95e659d7cf9ff7
start
diff -r 000000000000 -r 3f2da406c788 Dockerfile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Dockerfile Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,16 @@
+FROM bang6:5000/base_x86
+
+WORKDIR /opt
+
+RUN DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata vim
+
+COPY requirements.txt ./
+RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements.txt
+RUN pip3 install -U 'https://github.com/drewp/cyclone/archive/python3.zip?v3'
+
+COPY shaka-player/dist/shaka-player.compiled.* ./shaka-player/dist/
+
+COPY *.py *.html *.css *.js *.n3 ./
+COPY build/* build/
+
+CMD [ "python3", "./video.py" ]
diff -r 000000000000 -r 3f2da406c788 Dockerfile.vids
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Dockerfile.vids Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,8 @@
+FROM bang6:5000/base_x86
+
+WORKDIR /opt
+
+RUN DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata vim
+RUN DEBIAN_FRONTEND=noninteractive apt-get install -y webfs
+
+CMD [ "webfsd", "-Fp", "9054", "-r", "/vids/" ]
diff -r 000000000000 -r 3f2da406c788 index.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/index.html Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 3f2da406c788 package.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/package.json Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,31 @@
+{
+ "name": "video",
+ "version": "0.0.1",
+ "scripts": {
+ "build": "rollup -c",
+ "build_forever": "rollup -cw",
+ "test": "jest",
+ "test_forever": "jest --watch"
+ },
+ "dependencies": {
+ "lit-element": "^2.2.1"
+ },
+ "devDependencies": {
+ "@rollup/plugin-commonjs": "^11.0.2",
+ "@rollup/plugin-node-resolve": "^7.1.1",
+ "@rollup/plugin-replace": "^2.3.1",
+ "@types/jest": "^25.1.2",
+ "@types/rollup-plugin-postcss": "^2.0.0",
+ "jest": "^25.1.0",
+ "node-globals": "^0.1.5",
+ "rollup": "^1.31.1",
+ "rollup-plugin-node-builtins": "^2.1.2",
+ "rollup-plugin-postcss": "^2.0.6",
+ "rollup-plugin-terser": "^5.2.0",
+ "rollup-plugin-typescript2": "^0.26.0",
+ "stylus": "^0.54.7",
+ "ts-jest": "^25.2.0",
+ "tslib": "^1.10.0",
+ "typescript": "^3.7.5"
+ }
+}
diff -r 000000000000 -r 3f2da406c788 requirements.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/requirements.txt Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,11 @@
+cyclone
+docopt
+pymongo==3.10.1
+python-dateutil==2.8.1
+
+cycloneerr
+patchablegraph==0.11.0
+rdfdb==0.21.0
+standardservice==0.6.0
+
+git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
diff -r 000000000000 -r 3f2da406c788 rollup.config.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rollup.config.js Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,40 @@
+import builtins from "rollup-plugin-node-builtins";
+import commonjs from "@rollup/plugin-commonjs";
+import postcss from "rollup-plugin-postcss";
+import resolve from "@rollup/plugin-node-resolve";
+import typescript from "rollup-plugin-typescript2";
+import { terser } from "rollup-plugin-terser";
+
+const workaround_jsonld_module_system_picker = "process = {version: '1.0.0'}";
+const workaround_some_browser_detector = "global = window";
+
+const workaround_jsonld_expand_issue = {
+ namedExports: {
+ "../streamed-graph/node_modules/jsonld/lib/index.js": ["expand"], // fixes "expand is not exported by node_modules/jsonld/lib/index.js"
+ },
+};
+
+export default [
+ {
+ input: "src/index.ts",
+ output: {
+ file: "build/bundle.js",
+ format: "esm",
+ intro: `const ${workaround_some_browser_detector}, ${workaround_jsonld_module_system_picker};`,
+ },
+
+ plugins: [
+ builtins(),
+ resolve({
+ extensions: [".js", ".ts"],
+ browser: true,
+ }),
+ typescript(),
+ postcss({
+ inject: false,
+ }),
+ commonjs(workaround_jsonld_expand_issue),
+ //terser() // 1500 -> 500kB, but slow. put it in the docker builder only.
+ ],
+ },
+];
diff -r 000000000000 -r 3f2da406c788 serv.n3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/serv.n3 Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,40 @@
+@prefix : .
+@prefix auth: .
+@prefix serv: .
+
+
+serv:video_image a :DockerImage;
+ :internalPort 9053;
+ :prodDockerFlags ("--net=host");
+ :localRunDockerFlags (
+ "-v" "`pwd`:/opt"
+ "-v" "/home/drewp/vidcap:/home/drewp/vidcap"
+ );
+ :localRunCmdline ("python3" "video.py" "-v");
+ :dockerFile "Dockerfile"
+.
+
+serv:video_files_image a :DockerImage;
+ :internalPort 9054;
+ :prodDockerFlags (
+ "-v" "/my/serv/video/vids:/vids"
+ );
+ :dockerFile "Dockerfile.vids"
+.
+
+
+serv:video a :Service, :NpmPackage;
+ :image serv:video_image;
+ :port 9053;
+ :path "/video/";
+ :openid auth:admin;
+ :serverHost "bang";
+.
+
+serv:video_files a :Service;
+ :port 9054;
+ :image serv:video_files_image;
+ :path "/vids/";
+ :openid auth:admin;
+ :serverHost "bang";
+.
diff -r 000000000000 -r 3f2da406c788 src/index.ts
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/index.ts Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,69 @@
+import {
+ LitElement,
+ html,
+ customElement,
+ property,
+ unsafeCSS,
+ PropertyValues,
+} from "lit-element";
+
+const shaka = (window as any).shaka! as any;
+
+@customElement("video-page")
+export class VideoPage extends LitElement {
+ render() {
+ return html`
+
+
+ `;
+ }
+}
+
+@customElement("video-section")
+export class VideoSection extends LitElement {
+ @property({ type: String }) manifest: string | undefined;
+ @property({ type: String }) title: string = "(unknown)";
+ render() {
+ return html`
+
+
+ `;
+ }
+
+ updated(changedProperties: Map) {
+ if (!this.manifest) {
+ return;
+ }
+ var video = this.shadowRoot!.querySelector("#video");
+ var player = new shaka.Player(video);
+
+ player.addEventListener("error", onErrorEvent);
+ player.load(this.manifest).catch(onError);
+ function onErrorEvent(event: any) {
+ const error = event.detail;
+ onError(event.detail);
+ }
+
+ function onError(error: any) {
+ console.error("Error code", error.code, "object", error);
+ }
+ }
+}
+
+document.addEventListener("DOMContentLoaded", shaka.polyfill.installAll);
diff -r 000000000000 -r 3f2da406c788 tasks.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tasks.py Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,8 @@
+from invoke import task, Collection
+
+import sys
+sys.path.append('/my/proj/release')
+from serv_tasks import serv_tasks
+
+ns = Collection()
+serv_tasks(ns, 'serv.n3', 'video')
diff -r 000000000000 -r 3f2da406c788 tsconfig.json
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsconfig.json Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,33 @@
+{
+ "compilerOptions": {
+ "strict": true,
+ "noFallthroughCasesInSwitch": true,
+ "noImplicitAny": true,
+ "noImplicitReturns": true,
+ "noImplicitThis": true,
+ "strictFunctionTypes": true,
+ "strictNullChecks": true,
+ "strictPropertyInitialization": true,
+ "alwaysStrict": true,
+
+ "types": [],
+
+ "module": "ES6",
+ "target": "ES6",
+ "moduleResolution": "node",
+ "sourceMap": true,
+ "declaration": true,
+ "experimentalDecorators": true,
+ "allowJs": true,
+ "esModuleInterop": true,
+ "traceResolution": true,
+ // "allowSyntheticDefaultImports": true,
+ // "rootDir": ".",
+ // "outDir": "./build",
+ "baseUrl": ".",
+ // "emitDecoratorMetadata": true,
+ "lib": [ "es6", "dom", "ES2019.Object" ],
+ },
+ "include": ["src/**/*.ts"]
+ // "exclude": ["src/**/*.test.ts"]
+}
diff -r 000000000000 -r 3f2da406c788 video.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/video.py Tue Jul 21 23:28:04 2020 -0700
@@ -0,0 +1,61 @@
+import docopt
+
+from twisted.internet import reactor
+import cyclone.httpserver
+import cyclone.web
+import requests
+
+from cycloneerr import PrettyErrorHandler
+from patchablegraph import PatchableGraph, CycloneGraphEventsHandler, CycloneGraphHandler
+from standardservice.logsetup import log, verboseLogging
+
+
+def getLoginBar(request: cyclone.httpserver.HTTPRequest):
+ c = requests.get('http://bang:9023/_loginBar',
+ headers={'Cookie': request.headers['cookie']})
+ return c.content
+
+
+class Transaction(PrettyErrorHandler, cyclone.web.RequestHandler):
+ def get(self):
+ self.render('transaction.html',
+ txn='data',
+ loginBar=getLoginBar(self.request))
+
+
+def main():
+ args = docopt.docopt('''
+Usage:
+ video.py [options]
+
+Options:
+ -v, --verbose more logging
+''')
+ verboseLogging(args['--verbose'])
+
+ graph = PatchableGraph()
+
+ class Application(cyclone.web.Application):
+ def __init__(self):
+ handlers = [
+ (r"/()", cyclone.web.StaticFileHandler, {'path': '.', 'default_filename': 'index.html'}),
+ (r'/build/(bundle\.js)', cyclone.web.StaticFileHandler, {'path': './build/'}),
+ (r'/shaka-player/dist/(.*)', cyclone.web.StaticFileHandler, {'path': './shaka-player/dist/'}),
+ (r'/transaction', Transaction),
+ (r'/graph/video', CycloneGraphHandler, {'masterGraph': graph}),
+ (r'/graph/video/events', CycloneGraphEventsHandler, {'masterGraph': graph}),
+ ]
+ cyclone.web.Application.__init__(
+ self,
+ handlers,
+ graph=graph,
+ debug=args['--verbose'],
+ template_path='.',
+ )
+
+ reactor.listenTCP(9053, Application(), interface='::')
+ reactor.run()
+
+
+if __name__ == '__main__':
+ main()