streamlit workspace

This commit is contained in:
bluxmit 2022-07-21 17:08:09 +00:00
parent ac893af5ca
commit f3777d42bf
24 changed files with 224 additions and 145 deletions

View file

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 146 KiB

View file

@ -1,14 +0,0 @@
ARG docker_registry=docker.io/alnoda
ARG image_tag=18.04-0.7
FROM ${docker_registry}/ubuntu-workspace:${image_tag}
USER root
RUN apt-get -y update \
&& apt-get install -y firefox \
&& cd /tmp && wget https://github.com/browsh-org/browsh/releases/download/v1.6.4/browsh_1.6.4_linux_amd64.deb \
&& cd /tmp && apt install -y ./browsh_1.6.4_linux_amd64.deb \
&& rm /tmp/browsh_1.6.4_linux_amd64.deb
USER abc

View file

@ -1,45 +0,0 @@
# Ubuntu-Browsh
Ubuntu-Browsh - is [Ubuntu-Workspace](https://github.com/bluxmit/alnoda-workspaces/blob/main/workspaces/ubuntu-workspace) with a terminal
text-based browser [Browsh](https://www.brow.sh/) installed.
Ubuntu-Browsh has was created to tackle a very specific use-case - ability to view WEB UIs of the internal applications running in the internal
network, that does not have ingress for public internet connections. In other words, if you are allowed to SSH to one servers inside the private
network, but cannot access WEB UIs of the applications inside this network. One of the reasons might be that these WEB UIs don't have restriction/auth
mechanism built in. Or the company policy forbids opening any accesses from the specific network to the internet access.
One of the particular use-cases this workspace was used for - is to view EMR WEB interfaces (Spark History server UI, YARN UI, Livy UI),
and check the Spark logs out. There here are other ways to do this, i.e. setting up SSH tunneling, installing browser plugins, creating
secure gateways with VPN. This way is jus the simplest, and does not require modification of infrastructure or local environment.
## Use inrivate network
SSH to one of the servers in the private network, and execute
```
docker run --name browsh-workspace -d alnoda/ubuntu-browsh
```
and ssh into the workspace
```
docker exec -it browsh-workspace /bin/zsh
```
## Other cases
```
docker run --name browsh-workspace -d -p 8026:8026 alnoda/ubuntu-browsh
```
Open your browser on http://localhost:8026 and open any website with Browsh
> `browsh --startup-url google.com`
## Tips
Sometimes if you quit Browsh, and try to launch it again later, there might be an error saying that headless Firefox is already running.
Execute `ps aux` find pid of firefox process and kill it, i.e. `kill 988`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View file

@ -1,18 +1,24 @@
ARG docker_registry=docker.io/alnoda
ARG image_tag=2.2-3.8
ARG image_tag=3.0-3.8
FROM ${docker_registry}/python-workspace:${image_tag}
USER root
COPY streamlit /home/abc/.streamlit
COPY streamlit-requirements.txt /home/abc/installed-python-packages
COPY ./mkdocs/mkdocs.yml /home/docs/mkdocs.yml
COPY ./mkdocs/helpers.py /home/docs/macros
COPY ./mkdocs/Streamlit.png /home/docs/docs/assets/home/
COPY ./mkdocs/README.md /home/docs/docs/README.md
COPY ./mkdocs/streamlit-circle.svg /home/docs/docs/assets/
COPY ./mkdocs/streamlit-circle-white.svg /home/docs/docs/assets/
COPY ./mkdocs/extra.css /home/docs/docs/stylesheets/
COPY ./mkdocs/about.md /home/docs/docs/about.md
RUN echo "------------------------------------------------------ streamlit" \
&& pip install streamlit==1.9.0 \
&& pip install -r /home/abc/installed-python-packages/streamlit-requirements.txt \
&& echo "------------------------------------------------------ user" \
&& rm -rf /home/examples \
&& find /home -type d | xargs -I{} chown -R abc {} \

View file

@ -1,14 +1,11 @@
<p align="center">
<img src="../../img/Alnoda-white.svg" alt="Alnoda logo" width="150">
</p>
<img src="./img/streamlit-circle.svg" alt="Streamlit logo" width="150">
</p>
# Streamlit workspace
Docker image for building Streamlit applications.
Containerized isolated development environment for [Streamlit](https://streamlit.io/) and Python.
<p align="center">
<img src="../codeserver-workspace/img/codeserver-collage-sm.jpg" alt="Collage" width="750">
</p>
## Why this images
@ -29,45 +26,32 @@ and open [localhost:8020](http://localhost:8020) in browser.
**Python tools:**
- [IPython and Notebooks](https://ipython.readthedocs.io/en/stable/)
- [Pdoc3](https://github.com/pdoc3/pdoc)
- [Pytest-html-reporter](https://github.com/prashanth-sams/pytest-html-reporter)
- [SnakeViz](https://jiffyclub.github.io/snakeviz/)
- [Vprof](https://github.com/nvdv/vprof)
- [Pyinstrument](https://pypi.org/project/pyinstrument/3.0.0b3/)
- [Flameprof](https://github.com/baverman/flameprof/)
- [Pylint-json2html](https://github.com/Exirel/pylint-json2html)
- [IPython](https://ipython.readthedocs.io/en/stable/)
- [Pre-commit](https://pre-commit.com/)
- [Flake8](https://flake8.pycqa.org/en/latest/)
- [Poetry](https://python-poetry.org/)
- [Black](https://github.com/psf/black)
- [Pipx](https://github.com/pypa/pipx)
**Dev tools:**
- [**Eclipse Theia**](https://theia-ide.org/docs/) - open source version of popular Visual Studio Code IDE. Theia is trully open-source, has
VS-Code extensions and works in browser. This means it can run inside a docker container on local machine or in cloud. A lot of beautiful color themes and many common plugins are already installed to save time.
VS-Code extensions and works in browser. This means it can run inside a docker container on local machine or in cloud. A lot of beautiful color themes and many common plugins are already installed to save time.
- [**Terminal**](https://github.com/tsl0922/ttyd) - secure browser-based terminal.
- [**FileBrowser**](https://github.com/filebrowser/filebrowser) - manage files and folders inside the workspace, and exchange data between local environment and the workspace
- [**Cronicle**](https://github.com/jhuckaby/Cronicle) - task scheduler and runner, with a web based front-end UI. It handles both scheduled, repeating and on-demand jobs, targeting any number of worker servers, with real-time stats and live log viewer.
- [**Static File Server**](https://github.com/vercel/serve) - view any static html sites as easy as if you do it on your local machine. Serve static websites easily.
- [**Ungit**](https://github.com/FredrikNoren/ungit) - rings user friendliness to git without sacrificing the versatility of it.
- [**MkDocs**](https://squidfunk.github.io/mkdocs-material/) - create awesome documentation for your project with only markdown.
- [**Midnight Commander**](https://midnight-commander.org/) - Feature rich visual file manager with internal text viewer and editor.
- [**Process Monitor**](https://htop.dev/) - Monitor running process and resource utilization.
- Quicklaunch UI with getting started tutorial
Image is built from **Ubuntu 20.4** with the additional CLI apps
- [Zsh](https://www.zsh.org/), [Oh my Zsh](https://ohmyz.sh/)
- Python 3, Pip
- Node/nodeenv
- curl, wget, telnet, jq
- **Git:** git, git-flow, lazygit
- **File browsers:** mc, xplr
- **Text editors:** nano, vim, mcedit
- **System monitors:** ncdu, htop, glances, vizex
- **Process Control:** supervisord
- **Job scheduler:** cron
- **Ubuntu 20.4** with the following CLI apps
- [Zsh](https://www.zsh.org/), [Oh my Zsh](https://ohmyz.sh/)
- Python 3, Pip
- Node/nodeenv
- curl, wget, telnet, jq
- **Git:** git, git-flow, lazygit
- **File browsers:** mc
- **Text editors:** nano, vim, mcedit
- **System monitors:** ncdu, htop, glances, vizex
- **Process Control:** supervisord
- **Job scheduler:** cron
- **Terminal multiplexer:** tmux
## Docs

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 1500 3000 C 671.57 3000 0 2328.43 0 1500 C 0 671.57 671.57 0 1500 0 C 2328.43 0 3000 671.57 3000 1500 C 3000 2328.43 2328.43 3000 1500 3000 Z M 2454.59 545.41 C 2199.61 290.422 1860.6 150 1500 150 C 1139.4 150 800.387 290.422 545.406 545.41 C 290.426 800.391 150 1139.4 150 1500 C 150 1860.6 290.426 2199.61 545.406 2454.59 C 800.387 2709.57 1139.4 2850 1500 2850 C 1860.6 2850 2199.61 2709.57 2454.59 2454.59 C 2709.57 2199.61 2850 1860.6 2850 1500 C 2850 1139.4 2709.57 800.391 2454.59 545.41" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path14"/>
<title>Go icon</title>
<title>Elixir icon</title>
<title>R icon</title>
<title>OpenSearch logo</title>
<desc>Search engine software fork of Elasticsearch</desc>
<title>OpenSearch logo</title>
<desc>Search engine software fork of Elasticsearch</desc>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<title>redash-logo</title>
<desc>Created with Sketch.</desc>
<g id="g-1" style="fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;" transform="matrix(3.333333, 0, 0, -3.333333, -4120.10498, 2211.285156)"/>
</g>
</g>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<rect id="_Transparent_Rectangle_" data-name="&lt;Transparent Rectangle&gt;" class="cls-1" width="800" height="800" style="fill: none;" y="60.148" x="43.806"/>
<g transform="matrix(1.465551, 0, 0, 0.952627, 73.374138, 221.492157)" style="">
<g>
<path d="M 355.86 219.684 L 256 63.436 L 156.14 219.684 L 0 145.724 L 79.068 448.564 L 432.931 448.564 L 512 145.724 L 355.86 219.684 Z M 256 390.746 L 201.816 306.098 L 256.456 413.87 L 310.184 306.098 L 256 390.746 Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4 KiB

View file

@ -81,35 +81,11 @@
"image": "assets/home/Filebrowser.png",
"description": "Browse, upload and download files and folders to and from the Workspace"
},
{
"env": "CRONICLE_URL",
"name": "Cronicle",
"image": "assets/home/Cronicle.jpg",
"description": "Schedule jobs, manage schedules, observe and monitor executions (user/pass - admin/admin)"
},
{
"env": "UNGIT_URL",
"name": "Ungit",
"image": "assets/home/Ungit.jpg",
"description": "Manage Git repositories and work flow using beautiful UI"
},
{
"env": "STATICFS_URL",
"name": "Static File Server",
"image": "assets/home/Static-server.png",
"description": "Serve any static websites like a breeze"
},
{
"env": "MC_URL",
"name": "M.Commander",
"image": "assets/home/MC.jpg",
"description": "Feature rich visual file manager with internal text viewer and editor"
},
{
"env": "HTOP_URL",
"name": "Process monitor",
"image": "assets/home/Htop.jpg",
"description": "Monitor running process and resource utilization"
}
]
%}

View file

@ -0,0 +1 @@
Containerized isolated development environment for [Streamlit](https://streamlit.io/) and Python.

View file

@ -0,0 +1,20 @@
[data-md-color-scheme="streamlit"] {
--md-primary-fg-color: #546d78;
--md-primary-fg-color--light: #2A2D2E;
--md-primary-fg-color--dark: #2A2D2E;
--md-accent-fg-color: #89484E;
--md-typeset-a-color: #FF5C5C;
}
[data-md-color-scheme="streamlit-dark"] {
--md-primary-fg-color: #C35255;
--md-primary-fg-color--light: #3C3C3C;
--md-primary-fg-color--dark: #3C3C3C;
--md-accent-fg-color: #FF5C5C;
--md-default-bg-color: #1E1E1E;
--md-default-fg-color--light: #9CDCFE;
--md-typeset-color: #9CDCFE;
--md-typeset-a-color: #C35255;
}

View file

@ -7,13 +7,9 @@ import os
port_increments = {
"DOCS_URL": 0,
"FILEBROWSER_URL": 1,
"STATICFS_URL": 2,
"CRONICLE_URL": 3,
"UNGIT_URL": 4,
"IDE_URL": 5,
"TERMINAL_URL": 6,
"MC_URL": 7,
"HTOP_URL": 8,
"STREAMLIT_URL": 9,
"PORT_8038": 18,
"PORT_8039": 19,

View file

@ -5,9 +5,9 @@
nav:
- Home: README.md
- My apps: pages/my-apps.md
- About: about.md
- Docs: https://docs.alnoda.org/streamlit-workspace/
# ===========================================================
# CONFIGURATION
# ===========================================================
@ -23,26 +23,24 @@ edit_uri: ""
theme:
name: 'material'
favicon: 'assets/favicon.ico'
logo: 'assets/Alnoda-logo.svg'
favicon: 'assets/streamlit-circle.svg'
logo: 'assets/streamlit-circle-white.svg'
custom_dir: overrides
font:
text: Cambay
icon:
repo: fontawesome/brands/git-alt
repo: fontawesome/brands/github
features:
- navigation.instant
palette:
- scheme: default
- scheme: streamlit
toggle:
icon: material/toggle-switch-off-outline
name: Switch to light mode
primary: blue grey
accent: amber
- scheme: slate
toggle:
icon: material/toggle-switch
icon: material/brightness-7
name: Switch to dark mode
primary: grey
accent: amber
- scheme: streamlit-dark
toggle:
icon: material/brightness-4
name: Switch to light mode
extra:
# Link to open when your logo is clicked
@ -50,21 +48,15 @@ extra:
host_url: http://docs.alnoda.org
plugins:
- search
# Enable Macros and jinja2 templates
- macros:
module_name: macros/helpers
extra_css:
- stylesheets/extra.css
extra_javascript:
- javascripts/config.js
- https://polyfill.io/v3/polyfill.min.js?features=es6

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 1500 3000 C 671.57 3000 0 2328.43 0 1500 C 0 671.57 671.57 0 1500 0 C 2328.43 0 3000 671.57 3000 1500 C 3000 2328.43 2328.43 3000 1500 3000 Z M 2454.59 545.41 C 2199.61 290.422 1860.6 150 1500 150 C 1139.4 150 800.387 290.422 545.406 545.41 C 290.426 800.391 150 1139.4 150 1500 C 150 1860.6 290.426 2199.61 545.406 2454.59 C 800.387 2709.57 1139.4 2850 1500 2850 C 1860.6 2850 2199.61 2709.57 2454.59 2454.59 C 2709.57 2199.61 2850 1860.6 2850 1500 C 2850 1139.4 2709.57 800.391 2454.59 545.41" style="fill-opacity: 1; fill-rule: nonzero; stroke: none; fill: rgb(255, 255, 255);" id="path14"/>
<title>Go icon</title>
<title>Elixir icon</title>
<title>R icon</title>
<title>OpenSearch logo</title>
<desc>Search engine software fork of Elasticsearch</desc>
<title>OpenSearch logo</title>
<desc>Search engine software fork of Elasticsearch</desc>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<title>redash-logo</title>
<desc>Created with Sketch.</desc>
<g id="g-1" style="fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;" transform="matrix(3.333333, 0, 0, -3.333333, -4120.10498, 2211.285156)"/>
</g>
</g>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<rect id="_Transparent_Rectangle_" data-name="&lt;Transparent Rectangle&gt;" class="cls-1" width="800" height="800" style="fill: none;" y="60.148" x="43.806"/>
<g transform="matrix(1.465551, 0, 0, 0.952627, 73.374138, 221.492157)" style="">
<g>
<path d="M 355.86 219.684 L 256 63.436 L 156.14 219.684 L 0 145.724 L 79.068 448.564 L 432.931 448.564 L 512 145.724 L 355.86 219.684 Z M 256 390.746 L 201.816 306.098 L 256.456 413.87 L 310.184 306.098 L 256 390.746 Z" style="fill: rgb(255, 255, 255);"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 1500 3000 C 671.57 3000 0 2328.43 0 1500 C 0 671.57 671.57 0 1500 0 C 2328.43 0 3000 671.57 3000 1500 C 3000 2328.43 2328.43 3000 1500 3000 Z M 2454.59 545.41 C 2199.61 290.422 1860.6 150 1500 150 C 1139.4 150 800.387 290.422 545.406 545.41 C 290.426 800.391 150 1139.4 150 1500 C 150 1860.6 290.426 2199.61 545.406 2454.59 C 800.387 2709.57 1139.4 2850 1500 2850 C 1860.6 2850 2199.61 2709.57 2454.59 2454.59 C 2709.57 2199.61 2850 1860.6 2850 1500 C 2850 1139.4 2709.57 800.391 2454.59 545.41" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path14"/>
<title>Go icon</title>
<title>Elixir icon</title>
<title>R icon</title>
<title>OpenSearch logo</title>
<desc>Search engine software fork of Elasticsearch</desc>
<title>OpenSearch logo</title>
<desc>Search engine software fork of Elasticsearch</desc>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<g transform="matrix(3.333333, 0, 0, -3.333333, -3594.97168, 2466.221924)"/>
<title>redash-logo</title>
<desc>Created with Sketch.</desc>
<g id="g-1" style="fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;" transform="matrix(3.333333, 0, 0, -3.333333, -4120.10498, 2211.285156)"/>
</g>
</g>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<rect id="_Transparent_Rectangle_" data-name="&lt;Transparent Rectangle&gt;" class="cls-1" width="800" height="800" style="fill: none;" y="60.148" x="43.806"/>
<g transform="matrix(1.465551, 0, 0, 0.952627, 73.374138, 221.492157)" style="">
<g>
<path d="M 355.86 219.684 L 256 63.436 L 156.14 219.684 L 0 145.724 L 79.068 448.564 L 432.931 448.564 L 512 145.724 L 355.86 219.684 Z M 256 390.746 L 201.816 306.098 L 256.456 413.87 L 310.184 306.098 L 256 390.746 Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4 KiB

View file

@ -0,0 +1 @@
streamlit==1.11.0