Browse Source

Implement simple storage/load/share feature.

master
rayburgemeestre 6 years ago
parent
commit
9a24ef73fa
7 changed files with 318 additions and 125 deletions
  1. +0
    -2
      README.md
  2. +3
    -0
      docker_api/Dockerfile
  3. +1
    -0
      docker_api/Pipfile
  4. +144
    -111
      docker_api/Pipfile.lock
  5. +58
    -1
      docker_api/api.py
  6. +100
    -10
      src/App.vue
  7. +12
    -1
      src/mystyles.scss

+ 0
- 2
README.md View File

- `make dev` - build and start a hot swapping debug server (very convenient while developing) - `make dev` - build and start a hot swapping debug server (very convenient while developing)
- `make api_dev` - start the API server in a docker image running on port 5000. - `make api_dev` - start the API server in a docker image running on port 5000.


One note on the above: also uncomment the line that uses `//localhost:5000/compile` instead of `https://cheerp.cppse.nl/api/compile` in `src/App.vue`.

Other useful directives: Other useful directives:


- `make build` - build the release version (in `./dist`) of the UI (takes a while) - `make build` - build the release version (in `./dist`) of the UI (takes a while)

+ 3
- 0
docker_api/Dockerfile View File



EXPOSE 5000 EXPOSE 5000
COPY api.py /mnt/work/ COPY api.py /mnt/work/

RUN mkdir /data

CMD LC_ALL=C.UTF-8 LANG=C.UTF-8 python3 -m pipenv run python api.py CMD LC_ALL=C.UTF-8 LANG=C.UTF-8 python3 -m pipenv run python api.py



+ 1
- 0
docker_api/Pipfile View File

flask-cors = "*" flask-cors = "*"
fasteners = "*" fasteners = "*"
exec-helpers = "*" exec-helpers = "*"
uuid = "*"

+ 144
- 111
docker_api/Pipfile.lock View File

{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "4ca07444559150fb7bcfef32f77053a04abd21151cedd6739a5decf39eabd69b"
"sha256": "47b17ef1378669a1db772fe19f66b5ff647593c52ced2457799d302fba0b669c"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
"default": { "default": {
"advanced-descriptors": { "advanced-descriptors": {
"hashes": [ "hashes": [
"sha256:169e045bf07e125859351ee03eee0c5b3057810d8db317524955cce31c9122d3",
"sha256:3223737ee3290ec9f1020ad60d0b286908af9c60ed6f8e691b86920200682c36",
"sha256:4f7e7c5e1b7f247570c5a25f5d3d72735b87d8a71d43a34d4cd71f3ed4ddf511",
"sha256:638856da9dad94122d26fbe22b4ed51be35bf5e405d60f2f255468bff8240df9",
"sha256:92a5069b78987c054bb29ba768eba9a18e5354a85cb832dd6c854cded5753841",
"sha256:c0fe97d5cf6423420ee3bdd906d60e37d53b1277f7b7614572738b853822b973",
"sha256:df130485f0ee3de2c57afa8cb0b0970ec9d41f5b1345b83522425fb87c2fbdc2",
"sha256:e36e590ecb6cbbefdb3ff68be4653f29af560e29eeec46210cfcb2cb5d830cef",
"sha256:e67f94fc78b08e0d6437a98eb1539daf5c23f01c8e8216dbfe4bcb46b0afc09f",
"sha256:ed44b813e9c082d4a38b5f157f1f639ddfbccf7da985c5f0c330e964df36b649"
"sha256:0acbc4b8b58352d6b95716af9136cfbda8b7c4a08b65b2c2526533b5aab5932d",
"sha256:1220c21abe98a93b4e692b160383d78a115ee75e4db3658d1dfc7ea656ce17df",
"sha256:16dbe098d1082a095d54ffd5650751e82b374164a5789bccc3f23747536f0d4f",
"sha256:1dc587aeef0a605b1d1de347ca157f9e3daacea506483405034dd9fe49ed16aa",
"sha256:3b1b26d04ac974bb2649c0798d7ba4df2adb241464eafb782d22fde93ae4cad0",
"sha256:5e0814d546412f04aa8e930beb42eb45743ad746dc179d4ba43b9ecd2d1e48ca",
"sha256:6a76996f92bf6b41251649e8358ff3982e46fe2e6131f287ea3e91829a71a272",
"sha256:979cc5b3bd32478a8b2f3a32c5e27d9c26cbaaab61f8e1560ce0f8928d0da9cc",
"sha256:97e6e74f2952d910a8715a797a6cb36c319953ae5460ee6c813db1a01201f582",
"sha256:9e56b4526fc69cb2701ca5511288a18516e6cac788a2c72a9b2876e10b33bcc8",
"sha256:abeee2dd57419b9a8eb1ebe5b80ab777b2c07e020c8261e5cf0b657258aaeb10",
"sha256:b681616cc3a684e7685018a3a0d8e66cf33d1ba7653340732f1633461901989f",
"sha256:f58ce38762288a2297492bbe5b78b64f0a1c48dd458bc216a45a932eedc094d8",
"sha256:f965f8dcdc97d1bde6ae372e395fcde35d7d34e1404b4f93b56745b05affa3ec",
"sha256:fa11adcecb6307e34f73744363d0c20437454f4f10ee734c4cc528827e171dc7",
"sha256:fcdaebbae59d149e7c60416dcd449bc51fc619f905526fc87eac664e3afbf624"
], ],
"version": "==2.2.1"
"version": "==2.2.4"
}, },
"asn1crypto": { "asn1crypto": {
"hashes": [ "hashes": [
}, },
"bcrypt": { "bcrypt": {
"hashes": [ "hashes": [
"sha256:01477981abf74e306e8ee31629a940a5e9138de000c6b0898f7f850461c4a0a5",
"sha256:054d6e0acaea429e6da3613fcd12d05ee29a531794d96f6ab959f29a39f33391",
"sha256:0872eeecdf9a429c1420158500eedb323a132bc5bf3339475151c52414729e70",
"sha256:09a3b8c258b815eadb611bad04ca15ec77d86aa9ce56070e1af0d5932f17642a",
"sha256:0f317e4ffbdd15c3c0f8ab5fbd86aa9aabc7bea18b5cc5951b456fe39e9f738c",
"sha256:2788c32673a2ad0062bea850ab73cffc0dba874db10d7a3682b6f2f280553f20",
"sha256:321d4d48be25b8d77594d8324c0585c80ae91ac214f62db9098734e5e7fb280f",
"sha256:346d6f84ff0b493dbc90c6b77136df83e81f903f0b95525ee80e5e6d5e4eef84",
"sha256:34dd60b90b0f6de94a89e71fcd19913a30e83091c8468d0923a93a0cccbfbbff",
"sha256:3b4c23300c4eded8895442c003ae9b14328ae69309ac5867e7530de8bdd7875d",
"sha256:43d1960e7db14042319c46925892d5fa99b08ff21d57482e6f5328a1aca03588",
"sha256:49e96267cd9be55a349fd74f9852eb9ae2c427cd7f6455d0f1765d7332292832",
"sha256:63e06ffdaf4054a89757a3a1ab07f1b922daf911743114a54f7c561b9e1baa58",
"sha256:67ed1a374c9155ec0840214ce804616de49c3df9c5bc66740687c1c9b1cd9e8d",
"sha256:6b662a5669186439f4f583636c8d6ea77cf92f7cfe6aae8d22edf16c36840574",
"sha256:6efd9ca20aefbaf2e7e6817a2c6ed4a50ff6900fafdea1bcb1d0e9471743b144",
"sha256:8569844a5d8e1fdde4d7712a05ab2e6061343ac34af6e7e3d7935b2bd1907bfd",
"sha256:8629ea6a8a59f865add1d6a87464c3c676e60101b8d16ef404d0a031424a8491",
"sha256:988cac675e25133d01a78f2286189c1f01974470817a33eaf4cfee573cfb72a5",
"sha256:9a6fedda73aba1568962f7543a1f586051c54febbc74e87769bad6a4b8587c39",
"sha256:9eced8962ce3b7124fe20fd358cf8c7470706437fa064b9874f849ad4c5866fc",
"sha256:a005ed6163490988711ff732386b08effcbf8df62ae93dd1e5bda0714fad8afb",
"sha256:ae35dbcb6b011af6c840893b32399252d81ff57d52c13e12422e16b5fea1d0fb",
"sha256:b1e8491c6740f21b37cca77bc64677696a3fb9f32360794d57fa8477b7329eda",
"sha256:c906bdb482162e9ef48eea9f8c0d967acceb5c84f2d25574c7d2a58d04861df1",
"sha256:cb18ffdc861dbb244f14be32c47ab69604d0aca415bee53485fcea4f8e93d5ef",
"sha256:cc2f24dc1c6c88c56248e93f28d439ee4018338567b0bbb490ea26a381a29b1e",
"sha256:d860c7fff18d49e20339fc6dffc2d485635e36d4b2cccf58f45db815b64100b4",
"sha256:d86da365dda59010ba0d1ac45aa78390f56bf7f992e65f70b3b081d5e5257b09",
"sha256:e22f0997622e1ceec834fd25947dc2ee2962c2133ea693d61805bc867abaf7ea",
"sha256:f2fe545d27a619a552396533cddf70d83cecd880a611cdfdbb87ca6aec52f66b",
"sha256:f425e925485b3be48051f913dbe17e08e8c48588fdf44a26b8b14067041c0da6",
"sha256:f7fd3ed3745fe6e81e28dc3b3d76cce31525a91f32a387e1febd6b982caf8cdb",
"sha256:f9210820ee4818d84658ed7df16a7f30c9fba7d8b139959950acef91745cc0f7"
"sha256:05d8b762cb8a9bd0ad92ee95ed34b6119200a8760b625dadacfe88537ae691a3",
"sha256:136243dc44e5bab9b61206bd46fff3018bd80980b1a1dfbab64a22ff5745957f",
"sha256:1de0df7a9ca76d68ec8122573ae584aab78dcfb728fc2c78ecafb15750b79465",
"sha256:214c720cfcd394ab9fd1cac59303847b0d45cc8feeb8126ec55619c77d85ec19",
"sha256:290e07820d408e8c81f79f848279b95cef693d6e6ce148fa6b1e573e89a4305b",
"sha256:2d60412b11994ab91d25572f780f8461748cecdb6014c23e33b2ea0aabc99782",
"sha256:62ff976497590c7ef714f426aff8b908f2a11686364bb01cfc7d338e86a2ee27",
"sha256:77c99c50bd7ac4e9e9f948015c4638176ebe0a495b22b6ae4857f3ba077b12d8",
"sha256:9af0a7e135e7f5feca9c16ba33064af545b33b7297c1bb65daedb11c0fa653c4",
"sha256:9b08088fd103eedfd750d832819555d1f96bc8bec749c6d35a3f3de3b9e8c98d",
"sha256:a185efb05ef8bac9a531474abfefb8323f3ec8d524d308d6720657eaeda068b5",
"sha256:c7a733c4c309c9ab572644cf7f8779845addcd5ecf474bb5c376f05731842c41",
"sha256:cc3f53fa3287c0fc2bc1636e9514b896d4777444b03d9e0e4f16762a856bfe8a",
"sha256:d216ee4e8e64d43d819acaf8aa0db6cb518859072152cf35ada4987bf5c92bff",
"sha256:db3c7d712c4049eff365f00c9236279602af17c0ba44ca759008641c7fd892b7",
"sha256:e1bb330c56ddec65ad9ce989e9e8664901ce96badfe47853a5ed03bfeb76f91a",
"sha256:efcaace6e2915434d84e865c44f0cfe34e802269378afbb39a4aa6381aaec78b",
"sha256:f4431e01f1a5fdea95c78758e24c9565651499d92024ff34663b1ab12c8a10e5",
"sha256:fd21155abee7cd4c0ba8fad5138636f2531174ea79ad1751b25dc30d833e1723"
], ],
"version": "==3.1.4"
"version": "==3.1.5"
}, },
"cffi": { "cffi": {
"hashes": [ "hashes": [
}, },
"cryptography": { "cryptography": {
"hashes": [ "hashes": [
"sha256:02602e1672b62e803e08617ec286041cc453e8d43f093a5f4162095506bc0beb",
"sha256:10b48e848e1edb93c1d3b797c83c72b4c387ab0eb4330aaa26da8049a6cbede0",
"sha256:17db09db9d7c5de130023657be42689d1a5f60502a14f6f745f6f65a6b8195c0",
"sha256:227da3a896df1106b1a69b1e319dce218fa04395e8cc78be7e31ca94c21254bc",
"sha256:2cbaa03ac677db6c821dac3f4cdfd1461a32d0615847eedbb0df54bb7802e1f7",
"sha256:31db8febfc768e4b4bd826750a70c79c99ea423f4697d1dab764eb9f9f849519",
"sha256:4a510d268e55e2e067715d728e4ca6cd26a8e9f1f3d174faf88e6f2cb6b6c395",
"sha256:6a88d9004310a198c474d8a822ee96a6dd6c01efe66facdf17cb692512ae5bc0",
"sha256:76936ec70a9b72eb8c58314c38c55a0336a2b36de0c7ee8fb874a4547cadbd39",
"sha256:7e3b4aecc4040928efa8a7cdaf074e868af32c58ffc9bb77e7bf2c1a16783286",
"sha256:8168bcb08403ef144ff1fb880d416f49e2728101d02aaadfe9645883222c0aa5",
"sha256:8229ceb79a1792823d87779959184a1bf95768e9248c93ae9f97c7a2f60376a1",
"sha256:8a19e9f2fe69f6a44a5c156968d9fc8df56d09798d0c6a34ccc373bb186cee86",
"sha256:8d10113ca826a4c29d5b85b2c4e045ffa8bad74fb525ee0eceb1d38d4c70dfd6",
"sha256:be495b8ec5a939a7605274b6e59fbc35e76f5ad814ae010eb679529671c9e119",
"sha256:dc2d3f3b1548f4d11786616cf0f4415e25b0fbecb8a1d2cd8c07568f13fdde38",
"sha256:e4aecdd9d5a3d06c337894c9a6e2961898d3f64fe54ca920a72234a3de0f9cb3",
"sha256:e79ab4485b99eacb2166f3212218dd858258f374855e1568f728462b0e6ee0d9",
"sha256:f995d3667301e1754c57b04e0bae6f0fa9d710697a9f8d6712e8cca02550910f"
"sha256:05a6052c6a9f17ff78ba78f8e6eb1d777d25db3b763343a1ae89a7a8670386dd",
"sha256:0eb83a24c650a36f68e31a6d0a70f7ad9c358fa2506dc7b683398b92e354a038",
"sha256:0ff4a3d6ea86aa0c9e06e92a9f986de7ee8231f36c4da1b31c61a7e692ef3378",
"sha256:1699f3e916981df32afdd014fb3164db28cdb61c757029f502cb0a8c29b2fdb3",
"sha256:1b1f136d74f411f587b07c076149c4436a169dc19532e587460d9ced24adcc13",
"sha256:21e63dd20f5e5455e8b34179ac43d95b3fb1ffa54d071fd2ed5d67da82cfe6dc",
"sha256:2454ada8209bbde97065453a6ca488884bbb263e623d35ba183821317a58b46f",
"sha256:3cdc5f7ca057b2214ce4569e01b0f368b3de9d8ee01887557755ccd1c15d9427",
"sha256:418e7a5ec02a7056d3a4f0c0e7ea81df374205f25f4720bb0e84189aa5fd2515",
"sha256:471a097076a7c4ab85561d7fa9a1239bd2ae1f9fd0047520f13d8b340bf3210b",
"sha256:5ecaf9e7db3ca582c6de6229525d35db8a4e59dc3e8a40a331674ed90e658cbf",
"sha256:63b064a074f8dc61be81449796e2c3f4e308b6eba04a241a5c9f2d05e882c681",
"sha256:6afe324dfe6074822ccd56d80420df750e19ac30a4e56c925746c735cf22ae8b",
"sha256:70596e90398574b77929cd87e1ac6e43edd0e29ba01e1365fed9c26bde295aa5",
"sha256:70c2b04e905d3f72e2ba12c58a590817128dfca08949173faa19a42c824efa0b",
"sha256:8908f1db90be48b060888e9c96a0dee9d842765ce9594ff6a23da61086116bb6",
"sha256:af12dfc9874ac27ebe57fc28c8df0e8afa11f2a1025566476b0d50cdb8884f70",
"sha256:b4fc04326b2d259ddd59ed8ea20405d2e695486ab4c5e1e49b025c484845206e",
"sha256:da5b5dda4aa0d5e2b758cc8dfc67f8d4212e88ea9caad5f61ba132f948bab859"
], ],
"version": "==2.3.1"
"version": "==2.4.2"
}, },
"exec-helpers": { "exec-helpers": {
"hashes": [ "hashes": [
"sha256:114de98c53ccb5ab4e81b53beecc008e9556ecc4aed5f77e9a02c0e1eb4bcdd2",
"sha256:4f6a21b260d2df9efbf3aa33d8db60de131aa6b68854b1f019bb8603bd19c68c",
"sha256:58e4dd1e87301ac6c3ece346175c1258142f77d886db87fc67826efd49dd686d",
"sha256:7ccb6d10dda9ff1915963054984ccb0bc7bae1168af3fe9cf549354019044aa6",
"sha256:d6aeb9c54a666c14de5553b6cb8410889829921abe406ef4b5923eec96e9a63b",
"sha256:da2a62fceb29eb60ad508c840b461f8720ec445eaffe86785eb8c179ce7df464",
"sha256:eb95f6cc544c5653ebd3909849249a90094e5baadf281e6b035874ed1758edbd",
"sha256:f15f3166c50dad0f75e911ae2a120301881c466a95e184f215cfaf8ec2694edd"
"sha256:219237347772fd6279908619cc4536229d23be823dde8d99ec0fe743b09861ed",
"sha256:3759f16b77bd5f9063a7f37f2eec6aed23acc3f027fe1769aa9ef71cc89a5557",
"sha256:4cf26b22286b92ca830ff871cb577be956c5ffbdbf79ccaa297ea56cf453a62c",
"sha256:5940cfc6ce3bc7df97aa3d8a0f70a28a615ecf0ce575fa0f5547cbb42b227178",
"sha256:650657e453b031e374086a58ab288d3b8a184ad11b9a0b434d35b810db7cd6ed",
"sha256:6b4802110f47a5168ee70c9d560d1029694574f63cb6afd7dc563d5919a693f2",
"sha256:a78a265d52ffee8469277401f5e3933138b754f4349da1e9eb86f5ae76b64739",
"sha256:b2d8c9b86548916c46d34f39429525efb56e9db5994f6877520bc33b2847c6f8",
"sha256:dccac5820a86d9c0fdb2efa0455a27f86b745383e3ba172fb10626e110e1884e",
"sha256:f02805fd0a44bf04d75702cb73786e5461b0f627df8bbe4fc028afad2da28fd0"
], ],
"index": "pypi", "index": "pypi",
"version": "==3.1.0"
"version": "==4.0.0"
}, },
"fasteners": { "fasteners": {
"hashes": [ "hashes": [
}, },
"flask-api": { "flask-api": {
"hashes": [ "hashes": [
"sha256:6f9dc56d55fd82ffb1c5c9fd794cd6c50873ac10cf662e26817c179a655d1e22",
"sha256:fc10a80a13ea6fcf04acc2b1835aea05ec44aa6ae94f2ee85e52cd068567ce35"
"sha256:7340db47560883b342f9965d43435eeaf595c2d30e9fc0fe48d37aab4c03942e",
"sha256:c0142c53fc4053d866ff3f449dd7f43b4737b6d9a70e5a77fa2b9aaf68bb4364"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.0"
"version": "==1.1"
}, },
"flask-cors": { "flask-cors": {
"hashes": [ "hashes": [
"sha256:e4c8fc15d3e4b4cce6d3b325f2bab91e0e09811a61f50d7a53493bc44242a4f1",
"sha256:ecc016c5b32fa5da813ec8d272941cfddf5f6bba9060c405a70285415cbf24c9"
"sha256:7ad56ee3b90d4955148fc25a2ecaa1124fc84298471e266a7fea59aeac4405a5",
"sha256:7e90bf225fdf163d11b84b59fb17594d0580a16b97ab4e1146b1fb2737c1cfec"
], ],
"index": "pypi", "index": "pypi",
"version": "==3.0.6"
"version": "==3.0.7"
}, },
"idna": { "idna": {
"hashes": [ "hashes": [
"sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
"sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
], ],
"version": "==2.7"
"version": "==2.8"
}, },
"itsdangerous": { "itsdangerous": {
"hashes": [ "hashes": [
}, },
"markupsafe": { "markupsafe": {
"hashes": [ "hashes": [
"sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665"
"sha256:048ef924c1623740e70204aa7143ec592504045ae4429b59c30054cb31e3c432",
"sha256:130f844e7f5bdd8e9f3f42e7102ef1d49b2e6fdf0d7526df3f87281a532d8c8b",
"sha256:19f637c2ac5ae9da8bfd98cef74d64b7e1bb8a63038a3505cd182c3fac5eb4d9",
"sha256:1b8a7a87ad1b92bd887568ce54b23565f3fd7018c4180136e1cf412b405a47af",
"sha256:1c25694ca680b6919de53a4bb3bdd0602beafc63ff001fea2f2fc16ec3a11834",
"sha256:1f19ef5d3908110e1e891deefb5586aae1b49a7440db952454b4e281b41620cd",
"sha256:1fa6058938190ebe8290e5cae6c351e14e7bb44505c4a7624555ce57fbbeba0d",
"sha256:31cbb1359e8c25f9f48e156e59e2eaad51cd5242c05ed18a8de6dbe85184e4b7",
"sha256:3e835d8841ae7863f64e40e19477f7eb398674da6a47f09871673742531e6f4b",
"sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3",
"sha256:525396ee324ee2da82919f2ee9c9e73b012f23e7640131dd1b53a90206a0f09c",
"sha256:52b07fbc32032c21ad4ab060fec137b76eb804c4b9a1c7c7dc562549306afad2",
"sha256:52ccb45e77a1085ec5461cde794e1aa037df79f473cbc69b974e73940655c8d7",
"sha256:5c3fbebd7de20ce93103cb3183b47671f2885307df4a17a0ad56a1dd51273d36",
"sha256:5e5851969aea17660e55f6a3be00037a25b96a9b44d2083651812c99d53b14d1",
"sha256:5edfa27b2d3eefa2210fb2f5d539fbed81722b49f083b2c6566455eb7422fd7e",
"sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1",
"sha256:83381342bfc22b3c8c06f2dd93a505413888694302de25add756254beee8449c",
"sha256:857eebb2c1dc60e4219ec8e98dfa19553dae33608237e107db9c6078b1167856",
"sha256:98e439297f78fca3a6169fd330fbe88d78b3bb72f967ad9961bcac0d7fdd1550",
"sha256:bf54103892a83c64db58125b3f2a43df6d2cb2d28889f14c78519394feb41492",
"sha256:d9ac82be533394d341b41d78aca7ed0e0f4ba5a2231602e2f05aa87f25c51672",
"sha256:e982fe07ede9fada6ff6705af70514a52beb1b2c3d25d4e873e82114cf3c5401",
"sha256:edce2ea7f3dfc981c4ddc97add8a61381d9642dc3273737e756517cc03e84dd6",
"sha256:efdc45ef1afc238db84cb4963aa689c0408912a0239b0721cb172b4016eb31d6",
"sha256:f137c02498f8b935892d5c0172560d7ab54bc45039de8805075e19079c639a9c",
"sha256:f82e347a72f955b7017a39708a3667f106e6ad4d10b25f237396a7115d8ed5fd",
"sha256:fb7c206e01ad85ce57feeaaa0bf784b97fa3cad0d4a5737bc5295785f5c613a1"
], ],
"version": "==1.0"
"version": "==1.1.0"
}, },
"monotonic": { "monotonic": {
"hashes": [ "hashes": [
}, },
"psutil": { "psutil": {
"hashes": [ "hashes": [
"sha256:0d8da7333549a998556c18eb2af3ce902c28d66ceb947505c008f91e9f988abd",
"sha256:1914bacbd2fc2af8f795daa44b9d2e0649a147460cfd21b1a70a124472f66d40",
"sha256:215d61a901e67b1a35e14c6aedef317f7fa7e6075a20c150fd11bd2c906d2c83",
"sha256:51057c03aea251ad6667c2bba259bc7ed3210222d3a74152c84e3ab06e1da0ba",
"sha256:5b6322b167a5ba0c5463b4d30dfd379cd4ce245a1162ebf8fc7ab5c5ffae4f3b",
"sha256:a890c3e490493f21da2817ffc92822693bc0d6bcac9999caa04ffce8dd4e7132",
"sha256:b34611280a2d0697f1c499e15e936d88109170194b390599c98bab8072a71f05",
"sha256:cea2557ee6a9faa2c100947637ded68414e12b851633c4ce26e0311b2a2ed539",
"sha256:d081707ef0081920533db30200a2d30d5c0ea9cf6afa7cf8881ae4516cc69c48"
"sha256:1c19957883e0b93d081d41687089ad630e370e26dc49fd9df6951d6c891c4736",
"sha256:1c71b9716790e202a00ab0931a6d1e25db1aa1198bcacaea2f5329f75d257fff",
"sha256:3b7a4daf4223dae171a67a89314ac5ca0738e94064a78d99cfd751c55d05f315",
"sha256:3e19be3441134445347af3767fa7770137d472a484070840eee6653b94ac5576",
"sha256:6e265c8f3da00b015d24b842bfeb111f856b13d24f2c57036582568dc650d6c3",
"sha256:809c9cef0402e3e48b5a1dddc390a8a6ff58b15362ea5714494073fa46c3d293",
"sha256:b4d1b735bf5b120813f4c89db8ac22d89162c558cbd7fdd298866125fe906219",
"sha256:bbffac64cfd01c6bcf90eb1bedc6c80501c4dae8aef4ad6d6dd49f8f05f6fc5a",
"sha256:bfcea4f189177b2d2ce4a34b03c4ac32c5b4c22e21f5b093d9d315e6e253cd81"
], ],
"version": "==5.4.7"
"version": "==5.4.8"
}, },
"pyasn1": { "pyasn1": {
"hashes": [ "hashes": [
}, },
"six": { "six": {
"hashes": [ "hashes": [
"sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
"sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
"sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
], ],
"version": "==1.11.0"
"version": "==1.12.0"
}, },
"tenacity": { "tenacity": {
"hashes": [ "hashes": [
}, },
"threaded": { "threaded": {
"hashes": [ "hashes": [
"sha256:0a2ce3f6fb0a3944bfe25e6430c060e4aab9742b827a9ad5586ef03ffeb41b04",
"sha256:0df2a24ba1794aeb32ffdb16f4bfbeaee319f91d5e28946d6aa63c0b9fd4aa5e",
"sha256:3037517a37c8855f22d4387220e0047f1ccafb3d0584f53c65996466af357657",
"sha256:7cc6964b7ada5bf6407cbf8d7f0cd8709edae4faebe8dd05704ef686b932edfe",
"sha256:997205677f2b689b028da17dc9643981019969191d1c392fb58849e1dc8f5a2c",
"sha256:a848368bdae3a196e1fa5d2b90eede08ab344d1ea1e346022248f2cf33bf9cc4",
"sha256:b172a03b0a38b3d655ac627ca5dfe79198e151f8d3680e294379e84f0c61bed6",
"sha256:b997c9f92773408adb40c88f31a7f7d73b59c728fd4d1a8835d8dd022b5b428f",
"sha256:ca1d0d03c94f79b7e9dafc9911430f6490ad72f6fcdc8bad6772f8d569a8bd32",
"sha256:fd2d05d798f66e0ff5ff75ad993e77bf0d32c84056d5e773ba3370a3162e9eb8"
"sha256:239f5ac3a3d08e372641d7a011e65c67c904a6fa302114ab69e967d3d6b4bb8b",
"sha256:26c065d7a3eae960831a6a7b15ed9747c8d369cc969e7f84629521c402fd1dfc",
"sha256:2ea0418cd740a2ff6856ccc45ca2354150219a876c6a8bde2a424b28eb81145c",
"sha256:4981e82c484742a0bb3cae6d6bd19bee7021ab0a8df0e8cf42b195dd3201b11f",
"sha256:553c8a46b702d094e846177dee84ad24d2176e341ce3d0334b16f2f78abc0de8",
"sha256:55ce92c193f4faeb6b071de359c4fbca819fceeb17679c1a440cf2ca34036a69",
"sha256:63639949eb1900f9f213bcdb73e6e1568f4b4f28e657176b51374bc145b8e9ff",
"sha256:6f6f37936ba9f7c7b4c80b28e20008f1aaedae0f87125a50d1a7ee9b49d94f53",
"sha256:7b38cc7fa2271bd79a79b4eb883949fc5a3a50de7bb87fbada58064da0bf7cd9",
"sha256:84e84c66ecc7721afa043c523dc5cd4298d828f0ccdbb914fdafd6bf940665a5",
"sha256:9723ef028528a6af1895d395006253e43aa0c38e279a068f01bb6fe7a720783b",
"sha256:a833b5165221de5468316f866d77df7d7e9696272d04da32129f24811cd27425",
"sha256:b1118642f5748fa0854f62854c625be3bcd84bf03fc4dc3d2754d2ac6ad7779a",
"sha256:b936b366420fb958830c5015c6861e8db3fb8b7a88662fa67d44ec142c85e35a",
"sha256:d165f1725ecc7f6ff2787efb55b34132fffb731db4d95ccffa199bda4c411143",
"sha256:f0177d4f94d82ded9910c9db5c9349c46f4cd8c86888b28b800f850bc976e7bf"
], ],
"version": "==2.0.3"
"version": "==3.0.0"
}, },
"typing": { "typing": {
"hashes": [ "hashes": [
"markers": "python_version < '3.8'", "markers": "python_version < '3.8'",
"version": "==3.6.6" "version": "==3.6.6"
}, },
"uuid": {
"hashes": [
"sha256:1f87cc004ac5120466f36c5beae48b4c48cc411968eed0eaecd3da82aa96193f"
],
"index": "pypi",
"version": "==1.30"
},
"werkzeug": { "werkzeug": {
"hashes": [ "hashes": [
"sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c", "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c",

+ 58
- 1
docker_api/api.py View File

import os import os
import exec_helpers import exec_helpers
import re import re
import uuid
import json


from flask import request, url_for from flask import request, url_for
from flask_api import FlaskAPI, status, exceptions from flask_api import FlaskAPI, status, exceptions
if request.method == 'POST': if request.method == 'POST':
note = str(request.data.get('source', '')) note = str(request.data.get('source', ''))
flags = str(request.data.get('flags', '')) flags = str(request.data.get('flags', ''))
uuid_ = str(request.data.get('uuid', ''))

if not uuid_:
uuid_ = str(uuid.uuid1())


counter = 0
if os.path.exists("/data/{}/counter".format(uuid_)):
with open("/data/{}/counter".format(uuid_), "r") as f:
counter = int(f.read().strip()) + 1
f.close()
else:
os.mkdir("/data/{}".format(uuid_))

os.mkdir("/data/{}/{}".format(uuid_, counter))
with open("/data/{}/{}/environ".format(uuid_, counter), "w") as f:
for env in os.environ:
f.write("{}={}\n".format(env, os.environ[env]))
f.close()
with open("/data/{}/{}/source".format(uuid_, counter), "w") as f:
f.write(note)
f.close()
with open("/data/{}/{}/flags".format(uuid_, counter), "w") as f:
f.write(flags)
f.close()
with open("/data/{}/counter".format(uuid_), "w") as f:
f.write(str(counter))
f.close()


with open("/tmp/test.cpp", "w") as f: with open("/tmp/test.cpp", "w") as f:
f.write(note) f.write(note)
'command': cmd, 'command': cmd,
'retcode': retcode, 'retcode': retcode,
'javascript': output, 'javascript': output,
'wasm': binascii.b2a_base64(output_wasm).decode("utf-8") if wasm else ""
'wasm': binascii.b2a_base64(output_wasm).decode("utf-8") if wasm else "",
'uuid': uuid_,
'version': counter,
}, status.HTTP_201_CREATED }, status.HTTP_201_CREATED



@app.route("/retrieve", methods=['POST'])
def retrieve():
if request.method == 'POST':
uuid_ = str(request.data.get('uuid', ''))
version = str(request.data.get('version', ''))
source = ''
flags = ''

if not os.path.exists("/data/{}/{}".format(uuid_, version)):
return False

with open("/data/{}/{}/source".format(uuid_, version), "r") as f:
source = f.read()
f.close()
with open("/data/{}/{}/flags".format(uuid_, version), "r") as f:
flags = f.read()
f.close()

return {
'source': source,
'flags': flags,
}, status.HTTP_201_CREATED


if __name__ == "__main__": if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True) app.run(host="0.0.0.0", debug=True)



+ 100
- 10
src/App.vue View File

<div class="column"> <div class="column">
<nav class="navbar is-black" role="navigation" aria-label="main navigation"> <nav class="navbar is-black" role="navigation" aria-label="main navigation">
<div class="navbar-brand"> <div class="navbar-brand">
<a class="navbar-item" href="https://bulma.io">
<a class="navbar-item" href="https://cheerp.cppse.nl">
<img src="cheerp.png" height="28"> <img src="cheerp.png" height="28">
</a> </a>


<a class="navbar-link"> <a class="navbar-link">
Load example Load example
</a> </a>
<div class="navbar-dropdown">
<div v-for="item in examples">
<a class="navbar-item" v-on:click="load_example(item)">{{ item.title }}</a>
</div>
<div class="navbar-dropdown">
<div v-for="item in examples">
<a class="navbar-item" v-on:click="load_example(item)">{{ item.title }}</a>
</div> </div>
</div>
</div> </div>
</div> </div>


<div class="navbar-end"> <div class="navbar-end">
<div class="share">
<input class="input" type="text" v-on:focus="select_link($event)" v-model="share_link" placeholder="Compile before sharing link!">
</div>
<div class="navbar-item"> <div class="navbar-item">
<div class="buttons"> <div class="buttons">
<a class="button is-primary" v-on:click="compile" v-shortkey.once="['ctrl', 'f9']" @shortkey="compile()"> <a class="button is-primary" v-on:click="compile" v-shortkey.once="['ctrl', 'f9']" @shortkey="compile()">


export default { export default {
props: { props: {
uuid: {
type: String,
default: '',
},
version: {
type: String,
default: '',
},
editor_tabs: { editor_tabs: {
type: Number, type: Number,
default: 1, default: 1,
] ]
} }
}, },
share_link: {
type: String,
default: '',
}


}, },
components: { components: {
}, },
compile() { compile() {
this.output_tabs = 1; this.output_tabs = 1;
//axios.post('//localhost:5000/compile', {
axios.post('https://cheerp.cppse.nl/api/compile', {

var url = 'https://cheerp.cppse.nl/api/compile';
if (window.location.href.indexOf('cheerp.cppse.nl') == -1) {
// assuming local dev env
url = '//localhost:5000/compile';
}
axios.post(url, {
flags: this.compiler_flags, flags: this.compiler_flags,
source: this.cpp_code
source: this.cpp_code,
uuid: this.uuid,
}) })
.then(function (response) { .then(function (response) {
const str = const str =
'COMMAND: ' + 'response.data.command' + '\n' +
'COMMAND: ' + response.data.command + '\n' +
'EXIT_CODE: ' + response.data.retcode + '\n' + 'EXIT_CODE: ' + response.data.retcode + '\n' +
'STDOUT:\n------------------------------\n' + 'STDOUT:\n------------------------------\n' +
response.data.stdout + response.data.stdout +
} }
this.js_code = js.substr(0, idx) + js.substr(jdx + 1); this.js_code = js.substr(0, idx) + js.substr(jdx + 1);
this.wasm_code = response.data.wasm; this.wasm_code = response.data.wasm;
this.uuid = response.data.uuid
this.version = response.data.version
this.share_link = 'https://cheerp.cppse.nl/#' + this.uuid + ":" + this.version
console.log(this.uuid)
console.log(this.version)
}.bind(this)) }.bind(this))
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
this.html_code = ex.html_code this.html_code = ex.html_code
this.compiler_flags = ex.flags this.compiler_flags = ex.flags
return true; return true;
}
},
select_link(event) {
setTimeout(function() {
this.select();
}.bind(event.target), 10);
},
}, },
watch: { watch: {
html_code(new_val) { html_code(new_val) {
}, },
js_code(new_val) { js_code(new_val) {
}, },
},
created: function() {
var hashchange_fun = function() {
if (window.location.hash.length > 3) {
var h = window.location.hash.substr(1).split(':')
if (h.length == 2) {
var load_hash = h[0];
var load_version = h[1];

console.log("Should load: ",load_hash," ", load_version);
var url = 'https://cheerp.cppse.nl/api/retrieve';
if (window.location.href.indexOf('cheerp.cppse.nl') == -1) {
// assuming local dev env
url = '//localhost:5000/retrieve';
}
// Keeping this POST on purpose, just to keep things HARD for crawlers
axios.post(url, {
uuid: load_hash,
version: load_version,
})
.then(function (response) {
var js = response.data.source;
if (js == '') {
const str =
'Loading hash: '+ load_hash + '\n' +
'With version: '+ load_version + '\n' +
'FAILED.'
this.compiler_output = str;
return false;
}
const str =
'Loading hash: '+ load_hash + '\n' +
'With version: '+ load_version + '\n' +
'SUCCEEDED.'
this.compiler_output = str;

var code = response.data.source;
var flags = response.data.flags;

this.cpp_code = code;
this.compiler_flags = flags;

this.uuid = load_hash
this.version = load_version

this.share_link = 'https://cheerp.cppse.nl/#' + this.uuid + ":" + this.version
}.bind(this))
.catch(function (error) {
const str =
'Loading hash: '+ load_hash + '\n' +
'With version: '+ load_version + '\n' +
'FAILED: ' + error
this.compiler_output = str;
});
}
}
}.bind(this);
window.onhashchange = hashchange_fun;
hashchange_fun();
} }
} }
</script> </script>

+ 12
- 1
src/mystyles.scss View File

} }
.tag span { .tag span {
margin-left: 5px; margin-left: 5px;
}
}

.share {
padding-top: 8px;
}
.share input {
width: 370px;
font-size: 10px;
padding: 17px;
background-color: black;
color: white;
}

Loading…
Cancel
Save