diff --git a/pyproject.toml b/pyproject.toml index 71f711c..487511c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,9 +40,9 @@ lesscpy = "*" flake8 = "*" cryptography = "*" gunicorn = "*" -poetry-plugin-export = "*" -ddtrace = "^2.9.1" -loguru = "^0.7.2" +poetry-plugin-export = "^1.8.0" +ddtrace = "*" +loguru = "*" [tool.poetry.scripts] run = "main:app" diff --git a/pythonmyadmin/assets.py b/pythonmyadmin/assets.py index 0e8060b..0ff3b99 100644 --- a/pythonmyadmin/assets.py +++ b/pythonmyadmin/assets.py @@ -1,4 +1,5 @@ """Build static assets.""" + from flask import Flask from flask_assets import Bundle, Environment diff --git a/pythonmyadmin/models.py b/pythonmyadmin/models.py index d11721c..9b7060d 100644 --- a/pythonmyadmin/models.py +++ b/pythonmyadmin/models.py @@ -16,7 +16,7 @@ class Command(db.Model): command = db.Column(db.String(255), index=True, unique=True) response = db.Column(db.Text, nullable=False) type = db.Column(db.String(255), nullable=False) - created_at = db.Column(db.DateTime) + created_at = db.Column(db.DateTime, server_default=app.config["SQLALCHEMY_DATABASE_CREATED_AT"]) def __repr__(self): return f"" diff --git a/pythonmyadmin/routes.py b/pythonmyadmin/routes.py index 4a2a58c..69be0c6 100644 --- a/pythonmyadmin/routes.py +++ b/pythonmyadmin/routes.py @@ -1,4 +1,5 @@ """Core route declaration.""" + from typing import List from flask import Blueprint diff --git a/pythonmyadmin/static/dist/css/style.css b/pythonmyadmin/static/dist/css/style.css index b05f0da..6579390 100644 --- a/pythonmyadmin/static/dist/css/style.css +++ b/pythonmyadmin/static/dist/css/style.css @@ -1 +1 @@ -header{position:relative;width:100%;margin-bottom:2vw;padding:30px 0;background:white!important;box-shadow:0 0 5px #bec6cf;font-family:'Lato',sans-serif;max-width:100%;overflow:hidden}@media(max-width:800px){header{margin:0 auto;box-shadow:0 0 2px #707985}}@media(max-width:600px){header{padding:25px 0!important}}header nav{display:flex;align-items:center;justify-content:space-between;width:1000px;margin:auto}@media(max-width:800px){header nav{width:93vw;max-width:93vw}}@media(max-width:600px){header nav{width:90vw}}header nav .nav-link{color:#59657b;line-height:1;font-size:1.1em;text-decoration:none}header nav .left-nav{display:flex;align-items:center;justify-content:space-between;color:#59657b;line-height:1}header nav .left-nav a{display:flex;align-items:center;justify-content:space-between}header nav .left-nav .site-name,header nav .left-nav h1{margin:0;font-size:1.2em}@media(max-width:600px){header nav .left-nav .site-name,header nav .left-nav h1{font-size:1.1em}}header nav .left-nav .logo,header nav .left-nav i{margin-right:8px;font-size:1.5em}@media(max-width:600px){header nav .left-nav .logo,header nav .left-nav i{margin-right:6px;font-size:1.3em}}@media(max-width:600px){header .right-nav{display:none}}header .right-nav .nav-link,header .right-nav a{margin-left:25px;color:#70829d;font-size:1.1em;text-decoration:none;transition:all .3s ease-out}header .right-nav .nav-link:hover,header .right-nav a:hover{cursor:pointer;opacity:.7}header .right-nav .nav-link i,header .right-nav a i{margin-right:3px}.table-template{margin:0}.table-template header{margin-bottom:25px}@media(max-width:800px){.table-template header{margin:0 auto 2vw}}.table-template .dash-spreadsheet-container{max-width:100%;margin:25px auto;overflow:hidden;border:0;border-radius:4px;box-shadow:0 0 4px #cdd3e2;font-family:'Lato',helvetica,sans-serif}@media(max-width:800px){.table-template .dash-spreadsheet-container{margin:2vw auto}}.table-template .dash-spreadsheet-container *{box-shadow:none!important;font-family:'Lato',helvetica,sans-serif}.table-template .dash-spreadsheet-container th,.table-template .dash-spreadsheet-container tr{box-shadow:none!important}.table-template .dash-spreadsheet-container td:first-of-type,.table-template .dash-spreadsheet-container tr:first-of-type{width:55px}.table-template .dash-spreadsheet-container td:last-of-type,.table-template .dash-spreadsheet-container tr:last-of-type{width:100px}.table-template .dash-spreadsheet-container th{padding:25px 15px!important;border-top:0!important;border-right:0!important;border-bottom:1px solid #e5e7eb!important;border-left:0!important;background:white!important;color:#636a73;font-weight:600!important}@media(max-width:600px){.table-template .dash-spreadsheet-container th{padding:15px!important}}.table-template .dash-spreadsheet-container th .column-header--sort{margin-right:7px;transition:all .2s ease-out}.table-template .dash-spreadsheet-container th .column-header--sort:hover{color:#9bd2eb!important}.table-template .dash-spreadsheet-container th .column-header--sort svg{width:.5em;font-size:1.6em}.table-template .dash-spreadsheet-container th .sort{order:2;color:#aeaeae!important;transition:all .3s ease-out}.table-template .dash-spreadsheet-container th .sort:hover{text-decoration:none;cursor:pointer;opacity:.7}.table-template .dash-spreadsheet-container th>div{display:flex;align-items:center;width:fit-content}.table-template .dash-spreadsheet-container th>div span:last-of-type{font-size:.95em;text-transform:uppercase}@media(max-width:600px){.table-template .dash-spreadsheet-container th>div span:last-of-type{font-size:.85em}}.table-template .dash-spreadsheet-container th:nth-child(even){background:#f5f8fc!important}.table-template .dash-spreadsheet-container tr:nth-child(even){background:#e7eefa!important}.table-template .dash-spreadsheet-container .dash-cell{padding:15px 10px!important;overflow:hidden!important;line-height:1.25!important;text-align:center!important;transition:all .1s ease-out}@media(max-width:600px){.table-template .dash-spreadsheet-container .dash-cell{font-size:.8em!important}}.table-template .dash-spreadsheet-container .dash-cell.focused *{background:rgba(49,126,209,0.15);color:#205681}.table-template .dash-spreadsheet-container .dash-cell::selection *{background:rgba(49,126,209,0.15);color:#205681}.table-template .dash-spreadsheet-container .dash-cell.unfocused{caret-color:#317ed1!important}.table-template .dash-spreadsheet-container .dash-cell .input-cell-value-shadow{width:100%}.table-template .dash-spreadsheet-container .dash-cell .dash-cell-value{display:block!important;max-width:500px;overflow:hidden!important;font-weight:300;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}.table-template .dash-spreadsheet-container .column-0{max-width:80px!important}.table-template .dash-spreadsheet-container td[data-dash-column="type"],.table-template .dash-spreadsheet-container th[data-dash-column="type"]{max-width:70px!important}.table-template .dash-spreadsheet-container td[data-dash-column="response"],.table-template .dash-spreadsheet-container th[data-dash-column="response"]{max-width:400px!important;overflow:hidden}.table-template .dash-spreadsheet-container th[data-dash-column="command"],.table-template .dash-spreadsheet-container td[data-dash-column="command"]{min-width:130px!important}.table-template th[data-dash-column="created_at"],.table-template td[data-dash-column="created_at"]{min-width:145px}.table-template table tbody{box-shadow:0 0 7px #bdbdd2!important}.table-template .dash-spreadsheet-inner input::placeholder{color:grey}.table-template #controls{display:flex;align-items:center;justify-content:space-between}.table-template #search{width:100%;margin-right:20px!important;padding:0 15px!important;height:50px;border-radius:4px;font-size:1em}@media(max-width:600px){.table-template #search{margin-right:8px!important;min-width:45vw}}.table-template #search::placeholder{color:#aaa}.table-template #search,.table-template .Select{margin:0;padding:0;border:0;height:50px;box-shadow:0 0 4px #cdd3e2}.table-template #search .Select-control,.table-template .Select .Select-control{height:45px;padding:7px;min-width:200px}@media(max-width:600px){.table-template #search .Select-control,.table-template .Select .Select-control{min-width:30vw}}.table-template #search .Select-placeholder,.table-template .Select .Select-placeholder{height:fit-content;margin:auto;padding:10px}.table-template #search .Select-value,.table-template .Select .Select-value{margin:0 8px 0 0!important}.table-template #search .Select-value .Select-value-icon,.table-template .Select .Select-value .Select-value-icon{padding:6px 8px}.table-template #search .Select-value .Select-value-label,.table-template .Select .Select-value .Select-value-label{padding:4px 9px;line-height:1}.table-template #search .Select-menu-outer,.table-template .Select .Select-menu-outer{border:0;box-shadow:0 0 6px #cdd3e2;max-height:400px!important;height:400px!important;background-color:white}.table-template #search .Select-menu-outer *,.table-template .Select .Select-menu-outer *{width:100%;color:#404552}.table-template .next-page,.table-template .previous-page{padding:7px 11px;margin:0 1px;font-weight:300;background:#e7f1f2;border:1px solid #b8d6da;color:#278296;border-radius:2px;transition:all .2s ease-out;outline-color:transparent;outline-style:none}.table-template .next-page:hover,.table-template .previous-page:hover{cursor:pointer;color:white;background:#1c8ba4}.table-template .dash-delete-cell{font-size:1.3em!important}.table-template ._dash-undo-redo{background-color:#ffe9e9!important;padding:10px;right:110px!important;left:unset!important;width:40px;border:1px solid pink;transition:all .2s ease-out;border-radius:2px}.table-template ._dash-undo-redo *{color:#4c000d!important}.table-template #save{background-color:#c4e0d7!important;padding:10px;right:30px!important;left:unset!important;width:40px;border:1px solid #b1d1c7;transition:all .2s ease-out;border-radius:2px;position:fixed;bottom:30px;text-align:center}.table-template #save *{color:#738982!important}.home-template .database-host{font-weight:bold}body,html{height:100%!important;margin:0;padding:0;background:#e7ecf7!important;font-family:'Lato',helvetica,sans-serif;max-width:100%;overflow:hidden}@media(max-width:600px){body,html{margin:0}}body .row .col,html .row .col{padding:0!important}body a,html a,body .link,html .link{text-decoration:none;color:#0297f6;font-size:1.2em;line-height:1.1;font-weight:500}body a:hover,html a:hover,body .link:hover,html .link:hover{cursor:pointer;opacity:.8}@media(max-width:600px){body a,html a,body .link,html .link{font-size:1em}}body .container,html .container{width:1000px;max-width:90%;margin:auto;border-radius:4px;box-shadow:0 0 4px #cdd3e2;padding:30px;background:white}@media(max-width:800px){body .container,html .container{max-width:96vw}}@media(max-width:600px){body .container,html .container{margin:0;max-width:unset;padding:5vw}}body .container .database-host-name,html .container .database-host-name{color:#afb7c3;margin:0;font-size:.8em}body .container .database-host-name span,html .container .database-host-name span{white-space:nowrap}body .container .database-table-summary,html .container .database-table-summary{font-size:1.2em;margin-top:5px;color:#6d7277}body .container ul,html .container ul{list-style:none;padding:0}body .container ul li,html .container ul li{margin-bottom:5px;text-decoration:none}body .container ul li:last-of-type,html .container ul li:last-of-type{margin-bottom:0}body .link,html .link{color:#0297f6}body .dash-spreadsheet-container,html .dash-spreadsheet-container{max-width:100%;margin:40px auto;overflow:hidden;border:1px solid #d3d8e0;box-shadow:none;font-family:'Lato',helvetica,sans-serif}@media(max-width:800px){body .dash-spreadsheet-container,html .dash-spreadsheet-container{margin:2vw auto}}body .layout-container,html .layout-container{width:1000px;max-width:96vw;margin:20px auto}@media(max-width:800px){body .layout-container,html .layout-container{width:unset;max-width:96vw;margin:2vw auto 0 auto}}@media(max-width:600px){body .layout-container,html .layout-container{width:100%}} \ No newline at end of file +header{position:relative;width:100%;margin-bottom:2vw;padding:30px 0;background:white!important;box-shadow:0 0 5px #bec6cf;font-family:'Lato',sans-serif;max-width:100%;overflow:hidden}@media(max-width:800px){header{margin:0 auto;box-shadow:0 0 2px #707985}}@media(max-width:600px){header{padding:25px 0!important}}header nav{display:flex;align-items:center;justify-content:space-between;max-width:1000px;margin:auto}@media(max-width:1000px){header nav{width:93vw;max-width:93vw}}@media(max-width:600px){header nav{width:90vw}}header nav .nav-link{color:#59657b;line-height:1;font-size:1.1em;text-decoration:none}header nav .left-nav{display:flex;align-items:center;justify-content:space-between;color:#59657b;line-height:1}header nav .left-nav a{display:flex;align-items:center;justify-content:space-between}header nav .left-nav .site-name,header nav .left-nav h1{margin:0;font-size:1.2em}@media(max-width:600px){header nav .left-nav .site-name,header nav .left-nav h1{font-size:1.1em}}header nav .left-nav .logo,header nav .left-nav i{margin-right:8px;font-size:1.5em}@media(max-width:600px){header nav .left-nav .logo,header nav .left-nav i{margin-right:6px;font-size:1.3em}}@media(max-width:600px){header .right-nav{display:none}}header .right-nav .nav-link,header .right-nav a{margin-left:25px;color:#70829d;font-size:1.1em;text-decoration:none;transition:all .3s ease-out}header .right-nav .nav-link:hover,header .right-nav a:hover{cursor:pointer;opacity:.7}header .right-nav .nav-link i,header .right-nav a i{margin-right:3px}.table-template{margin:0}.table-template header{margin-bottom:25px}@media(max-width:800px){.table-template header{margin:0 auto 2vw}}.table-template .dash-spreadsheet-container{max-width:100%;margin:25px auto;overflow:hidden;border:0;border-radius:4px;box-shadow:0 0 4px #cdd3e2;font-family:'Lato',helvetica,sans-serif}@media(max-width:800px){.table-template .dash-spreadsheet-container{margin:2vw auto}}.table-template .dash-spreadsheet-container *{box-shadow:none!important;font-family:'Lato',helvetica,sans-serif}.table-template .dash-spreadsheet-container th,.table-template .dash-spreadsheet-container tr{box-shadow:none!important}.table-template .dash-spreadsheet-container td:first-of-type,.table-template .dash-spreadsheet-container tr:first-of-type{width:55px}.table-template .dash-spreadsheet-container td:last-of-type,.table-template .dash-spreadsheet-container tr:last-of-type{width:100px}.table-template .dash-spreadsheet-container th{padding:20px 15px!important;border-top:0!important;border-right:0!important;border-bottom:1px solid #e5e7eb!important;border-left:0!important;background:white!important;color:#636a73;font-weight:600!important}@media(max-width:600px){.table-template .dash-spreadsheet-container th{padding:15px 8px!important}}.table-template .dash-spreadsheet-container th .column-header--sort{margin-right:5px;transition:all .2s ease-out}.table-template .dash-spreadsheet-container th .column-header--sort:hover{color:#9bd2eb!important}.table-template .dash-spreadsheet-container th .column-header--sort svg{width:.5em;font-size:1.2em}@media(max-width:600px){.table-template .dash-spreadsheet-container th .column-header--sort svg{font-size:1.2em}}.table-template .dash-spreadsheet-container th .sort{order:2;color:#aeaeae!important;transition:all .3s ease-out}.table-template .dash-spreadsheet-container th .sort:hover{text-decoration:none;cursor:pointer;opacity:.7}.table-template .dash-spreadsheet-container th>div{display:flex;align-items:center;width:fit-content}.table-template .dash-spreadsheet-container th>div span:last-of-type{font-size:.95em;text-transform:uppercase}@media(max-width:600px){.table-template .dash-spreadsheet-container th>div span:last-of-type{font-size:.85em}}.table-template .dash-spreadsheet-container th:nth-child(even){background:#f5f8fc!important}.table-template .dash-spreadsheet-container tr:nth-child(even){background:#e7eefa!important}.table-template .dash-spreadsheet-container .dash-cell{padding:15px 10px!important;overflow:hidden!important;line-height:1.25!important;text-align:center!important;transition:all .1s ease-out}@media(max-width:600px){.table-template .dash-spreadsheet-container .dash-cell{font-size:.8em!important}}.table-template .dash-spreadsheet-container .dash-cell.focused *{background:rgba(49,126,209,0.15);color:#205681}.table-template .dash-spreadsheet-container .dash-cell::selection *{background:rgba(49,126,209,0.15);color:#205681}.table-template .dash-spreadsheet-container .dash-cell.unfocused{caret-color:#317ed1!important}.table-template .dash-spreadsheet-container .dash-cell .input-cell-value-shadow{width:100%}.table-template .dash-spreadsheet-container .dash-cell .dash-cell-value{display:block!important;max-width:500px;overflow:hidden!important;font-weight:300;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}.table-template .dash-spreadsheet-container .column-0{max-width:80px!important}.table-template .dash-spreadsheet-container td[data-dash-column="type"],.table-template .dash-spreadsheet-container th[data-dash-column="type"]{max-width:70px!important}@media(max-width:600px){.table-template .dash-spreadsheet-container td[data-dash-column="type"],.table-template .dash-spreadsheet-container th[data-dash-column="type"]{max-width:60px!important}}.table-template .dash-spreadsheet-container td[data-dash-column="response"],.table-template .dash-spreadsheet-container th[data-dash-column="response"]{max-width:400px!important;overflow:hidden}.table-template .dash-spreadsheet-container th[data-dash-column="command"],.table-template .dash-spreadsheet-container td[data-dash-column="command"]{min-width:130px!important}.table-template th[data-dash-column="created_at"],.table-template td[data-dash-column="created_at"]{min-width:145px}.table-template table tbody{box-shadow:0 0 7px #bdbdd2!important}.table-template .dash-spreadsheet-inner input::placeholder{color:grey}.table-template #controls{display:flex;align-items:center;justify-content:space-between}.table-template #search{width:100%;margin-right:20px!important;padding:0 15px!important;height:50px;border-radius:4px;font-size:1.1em}@media(max-width:600px){.table-template #search{margin-right:8px!important;min-width:45vw;font-size:.95em}}.table-template #search::placeholder{color:#aaa}.table-template #search,.table-template .Select{margin:0;padding:0;border:0;height:50px;box-shadow:0 0 4px #cdd3e2}.table-template #search .Select-control,.table-template .Select .Select-control{height:45px;padding:7px;min-width:200px}@media(max-width:600px){.table-template #search .Select-control,.table-template .Select .Select-control{min-width:30vw}}.table-template #search .Select-placeholder,.table-template .Select .Select-placeholder{height:fit-content;margin:auto;padding:10px}@media(max-width:600px){.table-template #search .Select-placeholder,.table-template .Select .Select-placeholder{font-size:.9em;padding:8px}}.table-template #search .Select-value,.table-template .Select .Select-value{margin:0 8px 0 0!important}.table-template #search .Select-value .Select-value-icon,.table-template .Select .Select-value .Select-value-icon{padding:6px 8px}.table-template #search .Select-value .Select-value-label,.table-template .Select .Select-value .Select-value-label{padding:4px 9px;line-height:1}.table-template #search .Select-menu-outer,.table-template .Select .Select-menu-outer{border:0;box-shadow:0 0 6px #cdd3e2;max-height:400px!important;height:400px!important;background-color:white}.table-template #search .Select-menu-outer *,.table-template .Select .Select-menu-outer *{width:100%;color:#404552}.table-template .next-page,.table-template .previous-page{padding:7px 11px;margin:0 1px;font-weight:300;background:#e7f1f2;border:1px solid #b8d6da;color:#278296;border-radius:2px;transition:all .2s ease-out;outline-color:transparent;outline-style:none}.table-template .next-page:hover,.table-template .previous-page:hover{cursor:pointer;color:white;background:#1c8ba4}.table-template .dash-delete-cell{font-size:1.3em!important}.table-template ._dash-undo-redo{background-color:#ffe9e9!important;padding:10px;right:110px!important;left:unset!important;width:40px;border:1px solid pink;transition:all .2s ease-out;border-radius:2px}.table-template ._dash-undo-redo *{color:#4c000d!important}.table-template #save{background-color:#c4e0d7!important;padding:10px;right:30px!important;left:unset!important;width:40px;border:1px solid #b1d1c7;transition:all .2s ease-out;border-radius:2px;position:fixed;bottom:30px;text-align:center}.table-template #save *{color:#738982!important}.home-template .database-host{font-weight:bold}body,html{margin:0;padding:0;background:#e7ecf7!important;font-family:'Lato',helvetica,sans-serif;max-width:100%}@media(max-width:600px){body,html{margin:0}}body .row .col,html .row .col{padding:0!important}body a,html a,body .link,html .link{text-decoration:none;color:#0297f6;font-size:1.2em;line-height:1.1;font-weight:500}body a:hover,html a:hover,body .link:hover,html .link:hover{cursor:pointer;opacity:.8}@media(max-width:600px){body a,html a,body .link,html .link{font-size:1em}}body .container,html .container{width:1000px;max-width:90%;margin:auto;border-radius:4px;box-shadow:0 0 4px #cdd3e2;padding:30px;background:white}@media(max-width:800px){body .container,html .container{max-width:96vw}}@media(max-width:600px){body .container,html .container{margin:0;max-width:unset;padding:5vw}}body .container .database-host-name,html .container .database-host-name{color:#afb7c3;margin:0;font-size:.8em}body .container .database-host-name span,html .container .database-host-name span{white-space:nowrap}body .container .database-table-summary,html .container .database-table-summary{font-size:1.2em;margin-top:5px;color:#6d7277}body .container ul,html .container ul{list-style:none;padding:0}body .container ul li,html .container ul li{margin-bottom:5px;text-decoration:none}body .container ul li:last-of-type,html .container ul li:last-of-type{margin-bottom:0}body .link,html .link{color:#0297f6}body .dash-spreadsheet-container,html .dash-spreadsheet-container{max-width:100%;margin:40px auto;overflow:hidden;border:1px solid #d3d8e0;box-shadow:none;font-family:'Lato',helvetica,sans-serif}@media(max-width:800px){body .dash-spreadsheet-container,html .dash-spreadsheet-container{margin:2vw auto}}body .layout-container,html .layout-container{width:1000px;max-width:96vw;margin:20px auto}@media(max-width:800px){body .layout-container,html .layout-container{width:unset;max-width:96vw;margin:2vw auto 0 auto}}@media(max-width:600px){body .layout-container,html .layout-container{width:100%}} \ No newline at end of file diff --git a/pythonmyadmin/static/less/main.less b/pythonmyadmin/static/less/main.less index 20bc4b3..fe748fa 100644 --- a/pythonmyadmin/static/less/main.less +++ b/pythonmyadmin/static/less/main.less @@ -5,13 +5,11 @@ body, html { - height: 100% !important; margin: 0; padding: 0; background: @background-color !important; font-family: @body-font; max-width: 100%; - overflow: hidden; @media(max-width: @mobile-breakpoint) { margin: 0; } diff --git a/pythonmyadmin/static/less/nav.less b/pythonmyadmin/static/less/nav.less index b2d0162..edd9e6a 100644 --- a/pythonmyadmin/static/less/nav.less +++ b/pythonmyadmin/static/less/nav.less @@ -22,10 +22,10 @@ header { display: flex; align-items: center; justify-content: space-between; - width: 1000px; + max-width: 1000px; margin: auto; - @media(max-width: 800px) { + @media(max-width: 1000px) { width: 93vw; max-width: 93vw; } diff --git a/pythonmyadmin/static/less/table.less b/pythonmyadmin/static/less/table.less index f1bf833..b52ed4b 100644 --- a/pythonmyadmin/static/less/table.less +++ b/pythonmyadmin/static/less/table.less @@ -46,7 +46,7 @@ } th { - padding: 25px 15px !important; + padding: 20px 15px !important; border-top: 0 !important; border-right: 0 !important; border-bottom: 1px solid #e5e7eb !important; @@ -56,11 +56,11 @@ font-weight: 600 !important; @media(max-width: 600px) { - padding: 15px !important; + padding: 15px 8px !important } .column-header--sort { - margin-right: 7px; + margin-right: 5px; transition: all 0.2s ease-out; &:hover { @@ -69,7 +69,11 @@ svg { width: 0.5em; - font-size: 1.6em; + font-size: 1.2em; + + @media(max-width: 600px) { + font-size: 1.2em; + } } } @@ -161,6 +165,10 @@ td[data-dash-column="type"], th[data-dash-column="type"]{ max-width: 70px !important; + + @media(max-width: 600px) { + max-width: 60px !important; + } } td[data-dash-column="response"], @@ -206,11 +214,12 @@ padding: 0 15px !important; height: 50px; border-radius: 4px; - font-size: 1em; + font-size: 1.1em; @media(max-width: 600px) { margin-right: 8px !important; min-width: 45vw; + font-size: .95em; } &::placeholder { @@ -240,6 +249,10 @@ height: fit-content; margin: auto; padding: 10px; + @media(max-width: 600px) { + font-size: .9em; + padding: 8px; + } } .Select-value { diff --git a/pythonmyadmin/tables/table_view.py b/pythonmyadmin/tables/table_view.py index 4ce7640..456e0ec 100644 --- a/pythonmyadmin/tables/table_view.py +++ b/pythonmyadmin/tables/table_view.py @@ -100,6 +100,7 @@ def create_data_table(table_df: DataFrame) -> DataTable: page_size=9000, # editable=True, cell_selectable=True, + markdown_options={"link_target": "_blank", "html": True}, style_cell={ "font-family": "Lato,sans-serif", "font-size": ".85em", diff --git a/requirements.txt b/requirements.txt index 4df3382..bec2cd0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,11 @@ async-timeout==4.0.3 ; python_version >= "3.10" and python_full_version < "3.11.3" -attrs==23.2.0 ; python_version >= "3.10" and python_version < "4.0" -black==23.12.1 ; python_version >= "3.10" and python_version < "4.0" +black==24.8.0 ; python_version >= "3.10" and python_version < "4.0" blinker==1.8.2 ; python_version >= "3.10" and python_version < "4.0" build==1.2.1 ; python_version >= "3.10" and python_version < "4.0" bytecode==0.15.1 ; python_version >= "3.10" and python_version < "4.0" cachecontrol[filecache]==0.14.0 ; python_version >= "3.10" and python_version < "4.0" -cattrs==23.2.3 ; python_version >= "3.10" and python_version < "4.0" certifi==2024.7.4 ; python_version >= "3.10" and python_version < "4.0" -cffi==1.16.0 ; python_version >= "3.10" and python_version < "4.0" and (platform_python_implementation != "PyPy" or sys_platform == "darwin") +cffi==1.17.0 ; python_version >= "3.10" and python_version < "4.0" and (platform_python_implementation != "PyPy" or sys_platform == "darwin") charset-normalizer==3.3.2 ; python_version >= "3.10" and python_version < "4.0" cleo==2.1.0 ; python_version >= "3.10" and python_version < "4.0" click==8.1.7 ; python_version >= "3.10" and python_version < "4.0" @@ -20,8 +18,7 @@ dash-html-components==2.0.0 ; python_version >= "3.10" and python_version < "4.0 dash-renderer==1.9.1 ; python_version >= "3.10" and python_version < "4.0" dash-table==5.0.0 ; python_version >= "3.10" and python_version < "4.0" dash==2.17.1 ; python_version >= "3.10" and python_version < "4.0" -ddsketch==3.0.1 ; python_version >= "3.10" and python_version < "4.0" -ddtrace==2.10.1 ; python_version >= "3.10" and python_version < "4.0" +ddtrace==2.11.1 ; python_version >= "3.10" and python_version < "4.0" deprecated==1.2.14 ; python_version >= "3.10" and python_version < "4.0" distlib==0.3.8 ; python_version >= "3.10" and python_version < "4.0" dulwich==0.21.7 ; python_version >= "3.10" and python_version < "4.0" @@ -29,14 +26,14 @@ envier==0.5.2 ; python_version >= "3.10" and python_version < "4.0" exceptiongroup==1.2.2 ; python_version >= "3.10" and python_version < "3.11" fastjsonschema==2.20.0 ; python_version >= "3.10" and python_version < "4.0" filelock==3.15.4 ; python_version >= "3.10" and python_version < "4.0" -flake8==7.1.0 ; python_version >= "3.10" and python_version < "4.0" +flake8==7.1.1 ; python_version >= "3.10" and python_version < "4.0" flask-assets==2.1.0 ; python_version >= "3.10" and python_version < "4.0" flask-sqlalchemy==3.1.1 ; python_version >= "3.10" and python_version < "4.0" flask==3.0.3 ; python_version >= "3.10" and python_version < "4.0" greenlet==3.0.3 ; python_version < "3.13" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_version >= "3.10" -gunicorn==22.0.0 ; python_version >= "3.10" and python_version < "4.0" -idna==3.7 ; python_version >= "3.10" and python_version < "4.0" -importlib-metadata==8.2.0 ; python_version >= "3.10" and python_version < "4.0" +gunicorn==23.0.0 ; python_version >= "3.10" and python_version < "4.0" +idna==3.8 ; python_version >= "3.10" and python_version < "4.0" +importlib-metadata==8.4.0 ; python_version >= "3.10" and python_version < "4.0" iniconfig==2.0.0 ; python_version >= "3.10" and python_version < "4.0" installer==0.7.0 ; python_version >= "3.10" and python_version < "4.0" isort==5.13.2 ; python_version >= "3.10" and python_version < "4.0" @@ -50,11 +47,11 @@ lesscpy==0.15.1 ; python_version >= "3.10" and python_version < "4.0" loguru==0.7.2 ; python_version >= "3.10" and python_version < "4.0" markupsafe==2.1.5 ; python_version >= "3.10" and python_version < "4.0" mccabe==0.7.0 ; python_version >= "3.10" and python_version < "4.0" -more-itertools==10.3.0 ; python_version >= "3.10" and python_version < "4.0" +more-itertools==10.4.0 ; python_version >= "3.10" and python_version < "4.0" msgpack==1.0.8 ; python_version >= "3.10" and python_version < "4.0" mypy-extensions==1.0.0 ; python_version >= "3.10" and python_version < "4.0" nest-asyncio==1.6.0 ; python_version >= "3.10" and python_version < "4.0" -numpy==2.0.1 ; python_version >= "3.10" and python_version <= "3.11" or python_version >= "3.12" and python_version < "4.0" +numpy==2.1.0 ; python_version >= "3.10" and python_version <= "3.11" or python_version >= "3.12" and python_version < "4.0" opentelemetry-api==1.16.0 ; python_version >= "3.10" and python_version < "4.0" packaging==24.1 ; python_version >= "3.10" and python_version < "4.0" pandas==2.2.2 ; python_version >= "3.10" and python_version < "4.0" @@ -68,9 +65,9 @@ ply==3.11 ; python_version >= "3.10" and python_version < "4.0" poetry-core==1.9.0 ; python_version >= "3.10" and python_version < "4.0" poetry-plugin-export==1.8.0 ; python_version >= "3.10" and python_version < "4.0" poetry==1.8.3 ; python_version >= "3.10" and python_version < "4.0" -protobuf==5.27.2 ; python_version >= "3.10" and python_version < "4.0" +protobuf==5.27.4 ; python_version >= "3.10" and python_version < "4.0" ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" -pycodestyle==2.12.0 ; python_version >= "3.10" and python_version < "4.0" +pycodestyle==2.12.1 ; python_version >= "3.10" and python_version < "4.0" pycparser==2.22 ; python_version >= "3.10" and python_version < "4.0" and (platform_python_implementation != "PyPy" or sys_platform == "darwin") pyflakes==3.2.0 ; python_version >= "3.10" and python_version < "4.0" pymysql==1.1.1 ; python_version >= "3.10" and python_version < "4.0" @@ -79,30 +76,30 @@ pytest==8.3.2 ; python_version >= "3.10" and python_version < "4.0" python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0" python-dotenv==1.0.1 ; python_version >= "3.10" and python_version < "4.0" pytz==2024.1 ; python_version >= "3.10" and python_version < "4.0" -pywin32-ctypes==0.2.2 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" -rapidfuzz==3.9.5 ; python_version >= "3.10" and python_version < "4.0" -redis==5.0.7 ; python_version >= "3.10" and python_version < "4.0" +pywin32-ctypes==0.2.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" +rapidfuzz==3.9.6 ; python_version >= "3.10" and python_version < "4.0" +redis==5.0.8 ; python_version >= "3.10" and python_version < "4.0" requests-toolbelt==1.0.0 ; python_version >= "3.10" and python_version < "4.0" requests==2.32.3 ; python_version >= "3.10" and python_version < "4.0" retrying==1.3.4 ; python_version >= "3.10" and python_version < "4.0" secretstorage==3.3.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" -setuptools==72.1.0 ; python_version >= "3.10" and python_version < "4.0" +setuptools==74.0.0 ; python_version >= "3.10" and python_version < "4.0" shellingham==1.5.4 ; python_version >= "3.10" and python_version < "4.0" six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" -sqlalchemy==2.0.31 ; python_version >= "3.10" and python_version < "4.0" +sqlalchemy==2.0.32 ; python_version >= "3.10" and python_version < "4.0" tenacity==9.0.0 ; python_version >= "3.10" and python_version < "4.0" tomli==2.0.1 ; python_version >= "3.10" and python_version < "3.11" -tomlkit==0.13.0 ; python_version >= "3.10" and python_version < "4.0" +tomlkit==0.13.2 ; python_version >= "3.10" and python_version < "4.0" trove-classifiers==2024.7.2 ; python_version >= "3.10" and python_version < "4.0" typing-extensions==4.12.2 ; python_version >= "3.10" and python_version < "4.0" tzdata==2024.1 ; python_version >= "3.10" and python_version < "4.0" urllib3==2.2.2 ; python_version >= "3.10" and python_version < "4.0" virtualenv==20.26.3 ; python_version >= "3.10" and python_version < "4.0" webassets==2.0 ; python_version >= "3.10" and python_version < "4.0" -werkzeug==3.0.3 ; python_version >= "3.10" and python_version < "4.0" +werkzeug==3.0.4 ; python_version >= "3.10" and python_version < "4.0" win32-setctime==1.1.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" wrapt==1.16.0 ; python_version >= "3.10" and python_version < "4.0" wtforms==3.1.2 ; python_version >= "3.10" and python_version < "4.0" xattr==1.1.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "darwin" xmltodict==0.13.0 ; python_version >= "3.10" and python_version < "4.0" -zipp==3.19.2 ; python_version >= "3.10" and python_version < "4.0" +zipp==3.20.1 ; python_version >= "3.10" and python_version < "4.0"