Skip to content

Commit

Permalink
Fix
Browse files Browse the repository at this point in the history
  • Loading branch information
vsdudakov committed Aug 2, 2024
1 parent e9dffe1 commit 67150fe
Show file tree
Hide file tree
Showing 13 changed files with 57 additions and 42 deletions.
6 changes: 6 additions & 0 deletions docs/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ def read_cls_docstring(cls):

def get_versions():
return [
{
"version": "0.2.3",
"changes": [
"Fix filters issue on lists. Remove jinja from dependencies.",
],
},
{
"version": "0.2.2",
"changes": [
Expand Down
4 changes: 2 additions & 2 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<li class="social-icons-twitter"><a data-toggle="tooltip" href="" target="_blank" title="" data-original-title="Twitter"><i class="fab fa-twitter"></i></a></li>
<li class="social-icons-facebook"><a data-toggle="tooltip" href="" target="_blank" title="" data-original-title="Facebook"><i class="fab fa-facebook-f"></i></a></li>
<li class="social-icons-dribbble"><a data-toggle="tooltip" href="" target="_blank" title="" data-original-title="Dribbble"><i class="fab fa-dribbble"></i></a></li>
--> </ul> </div> </nav> </header> <div id=content role=main> <div class="app-navigation bg-light"> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#introduction>Introduction</a> </li> <li class=nav-item> <a class=nav-link href=#getting_started>Getting Started</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#installation>Installation</a> </li> <li class=nav-item> <a class=nav-link href=#quick_tutorial>Quick Tutorial</a> </li> </ul> </li> <li class=nav-item> <a class=nav-link href=#settings>Settings</a> </li> <li class=nav-item> <a class=nav-link href=#dashboard-widget-admins>Dashboard Widget Admins</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#registering-widgets>Registering Widgets</a> </li> <li class=nav-item> <a class=nav-link href=#widget-methods-and-attributes>Methods and Attributes</a> </li> <li class=nav-item> <a class=nav-link href=#widget-chart-types>Chart Types</a> </li> </ul> </li> <li class=nav-item> <a class=nav-link href=#model-admins>Model Admins</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#registering-models>Registering Models</a> </li> <li class=nav-item> <a class=nav-link href=#authentication>Authentication</a> </li> <li class=nav-item> <a class=nav-link href=#model-methods-and-attributes>Methods and Attributes</a> </li> <li class=nav-item> <a class=nav-link href=#model-form-field-types>Form Field Types</a> </li> </ul> </li> <li class=nav-item> <a class=nav-link href=#inline-admins>Inline Model Admins</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#registering-inlines>Registering Inlines</a> </li> <li class=nav-item> <a class=nav-link href=#inline-methods-and-attributes>Methods and Attributes</a> </li> </ul> </li> <li class=nav-item> <a class=nav-link href=#changelog>Changelog</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#v0_2_2>v0.2.2</a> </li> <li class=nav-item> <a class=nav-link href=#v0_2_1>v0.2.1</a> </li> <li class=nav-item> <a class=nav-link href=#v0_2_0>v0.2.0</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_41>v0.1.41</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_40>v0.1.40</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_39>v0.1.39</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_38>v0.1.38</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_37>v0.1.37</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_36>v0.1.36</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_35>v0.1.35</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_34>v0.1.34</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_33>v0.1.33</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_32>v0.1.32</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_31>v0.1.31</a> </li> </ul> </li> </ul> </div> <div class=app-content> <div class=container> <section id=index> <h1>FastAdmin | Documentation</h1> <div class=row> <div class="col-sm-6 col-lg-4"> <ul class=list-unstyled> <li><strong>Version:</strong> 0.2.2</li> <li> <strong>Author:</strong> <a href=mailto:[email protected] target=_blank> Seva D. </a> </li> </ul> </div> <div class="col-sm-6 col-lg-4"> <ul class=list-unstyled> <li> <strong class=font-weight-700>Created:</strong> 7 March 2023 </li> <li> <strong>Updated:</strong> 02 August 2024 </li> </ul> </div> </div> </section> <hr class=divider> <section id=introduction> <h2>Introduction</h2> <p class=text-4> <a href=https://github.com/vsdudakov/fastadmin target=_blank>FastAdmin</a> is an easy-to-use Admin Dashboard App for FastAPI/Django/Flask inspired by Django Admin. </p> <p class=text-4> FastAdmin was built with relations in mind and admiration for the excellent and popular Django Admin. It's engraved in its design that you may configure your admin dashboard for FastAPI/Django/Flask easiest way. </p> <p class=text-4> FastAdmin is designed to be minimalistic, functional and yet familiar. </p> </section> <hr class=small-divider> <section id=getting_started> <h2>Getting Started</h2> <p class="alert alert-info"> If you have any questions that are beyond the scope of the documentation, Please feel free to email <a href=mailto:[email protected] target=_blank>us</a>. </p> <section id=installation> <h3>Installation</h3> <p class=lead> Follow the steps below to setup FastAdmin: </p> <p class=text-4> Install the package using pip: </p> <p class="alert alert-info"> Note: For zsh and macos use: <code>pip install fastadmin[fastapi,django]</code> </p> <pre>
--> </ul> </div> </nav> </header> <div id=content role=main> <div class="app-navigation bg-light"> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#introduction>Introduction</a> </li> <li class=nav-item> <a class=nav-link href=#getting_started>Getting Started</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#installation>Installation</a> </li> <li class=nav-item> <a class=nav-link href=#quick_tutorial>Quick Tutorial</a> </li> </ul> </li> <li class=nav-item> <a class=nav-link href=#settings>Settings</a> </li> <li class=nav-item> <a class=nav-link href=#dashboard-widget-admins>Dashboard Widget Admins</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#registering-widgets>Registering Widgets</a> </li> <li class=nav-item> <a class=nav-link href=#widget-methods-and-attributes>Methods and Attributes</a> </li> <li class=nav-item> <a class=nav-link href=#widget-chart-types>Chart Types</a> </li> </ul> </li> <li class=nav-item> <a class=nav-link href=#model-admins>Model Admins</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#registering-models>Registering Models</a> </li> <li class=nav-item> <a class=nav-link href=#authentication>Authentication</a> </li> <li class=nav-item> <a class=nav-link href=#model-methods-and-attributes>Methods and Attributes</a> </li> <li class=nav-item> <a class=nav-link href=#model-form-field-types>Form Field Types</a> </li> </ul> </li> <li class=nav-item> <a class=nav-link href=#inline-admins>Inline Model Admins</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#registering-inlines>Registering Inlines</a> </li> <li class=nav-item> <a class=nav-link href=#inline-methods-and-attributes>Methods and Attributes</a> </li> </ul> </li> <li class=nav-item> <a class=nav-link href=#changelog>Changelog</a> <ul class="nav flex-column"> <li class=nav-item> <a class=nav-link href=#v0_2_3>v0.2.3</a> </li> <li class=nav-item> <a class=nav-link href=#v0_2_2>v0.2.2</a> </li> <li class=nav-item> <a class=nav-link href=#v0_2_1>v0.2.1</a> </li> <li class=nav-item> <a class=nav-link href=#v0_2_0>v0.2.0</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_41>v0.1.41</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_40>v0.1.40</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_39>v0.1.39</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_38>v0.1.38</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_37>v0.1.37</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_36>v0.1.36</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_35>v0.1.35</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_34>v0.1.34</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_33>v0.1.33</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_32>v0.1.32</a> </li> <li class=nav-item> <a class=nav-link href=#v0_1_31>v0.1.31</a> </li> </ul> </li> </ul> </div> <div class=app-content> <div class=container> <section id=index> <h1>FastAdmin | Documentation</h1> <div class=row> <div class="col-sm-6 col-lg-4"> <ul class=list-unstyled> <li><strong>Version:</strong> 0.2.3</li> <li> <strong>Author:</strong> <a href=mailto:[email protected] target=_blank> Seva D. </a> </li> </ul> </div> <div class="col-sm-6 col-lg-4"> <ul class=list-unstyled> <li> <strong class=font-weight-700>Created:</strong> 7 March 2023 </li> <li> <strong>Updated:</strong> 02 August 2024 </li> </ul> </div> </div> </section> <hr class=divider> <section id=introduction> <h2>Introduction</h2> <p class=text-4> <a href=https://github.com/vsdudakov/fastadmin target=_blank>FastAdmin</a> is an easy-to-use Admin Dashboard App for FastAPI/Django/Flask inspired by Django Admin. </p> <p class=text-4> FastAdmin was built with relations in mind and admiration for the excellent and popular Django Admin. It's engraved in its design that you may configure your admin dashboard for FastAPI/Django/Flask easiest way. </p> <p class=text-4> FastAdmin is designed to be minimalistic, functional and yet familiar. </p> </section> <hr class=small-divider> <section id=getting_started> <h2>Getting Started</h2> <p class="alert alert-info"> If you have any questions that are beyond the scope of the documentation, Please feel free to email <a href=mailto:[email protected] target=_blank>us</a>. </p> <section id=installation> <h3>Installation</h3> <p class=lead> Follow the steps below to setup FastAdmin: </p> <p class=text-4> Install the package using pip: </p> <p class="alert alert-info"> Note: For zsh and macos use: <code>pip install fastadmin[fastapi,django]</code> </p> <pre>
<code class=language-bash>

pip install fastadmin[fastapi,django] # for fastapi with django orm
Expand Down Expand Up @@ -1286,7 +1286,7 @@
min_num: int = 1

</code>
</pre> </section> </section> <hr class=small-divider> <section id=changelog> <h2>Changelog</h2> <p class="alert alert-info"> See what's new added, changed, fixed, improved or updated in the latest versions. </p> <section id=v0_2_2> <h3>v0.2.2</h3> <p class=text-4> Fix bugs with datetime. </p> </section> <section id=v0_2_1> <h3>v0.2.1</h3> <p class=text-4> Update packages. Fix linters and tests in vite frontend. Removed pydantic from dependencies. </p> </section> <section id=v0_2_0> <h3>v0.2.0</h3> <p class=text-4> Update packages. Use vite instead obsolete react-scripts. </p> </section> <section id=v0_1_41> <h3>v0.1.41</h3> <p class=text-4> Fixed bug with datetime. Added verbose name logic for models and inlines. Updated frontend libraries. </p> </section> <section id=v0_1_40> <h3>v0.1.40</h3> <p class=text-4> Added RUFF linter. Cleaned up code. Removed pydantic dependency. </p> </section> <section id=v0_1_39> <h3>v0.1.39</h3> <p class=text-4> Bug fixes. </p> </section> <section id=v0_1_38> <h3>v0.1.38</h3> <p class=text-4> Bug fixes. </p> </section> <section id=v0_1_37> <h3>v0.1.37</h3> <p class=text-4> Bug fixes. </p> </section> <section id=v0_1_36> <h3>v0.1.36</h3> <p class=text-4> Added autogeneration of documentation and examples. </p> </section> <section id=v0_1_35> <h3>v0.1.35</h3> <p class=text-4> Added DashboardWidgetAdmin class and charts for dashboard. </p> </section> <section id=v0_1_34> <h3>v0.1.34</h3> <p class=text-4> Added SlugInput, EmailInput, PhoneInput, UrlInput, JsonTextArea widget types. </p> </section> <section id=v0_1_33> <h3>v0.1.33</h3> <p class=text-4> Added list_display_widths parameter. </p> </section> <section id=v0_1_32> <h3>v0.1.32</h3> <p class=text-4> Added Upload widget type. </p> </section> <section id=v0_1_31> <h3>v0.1.31</h3> <p class=text-4> Added PasswordInput widget type. </p> </section> </section> <hr class=small-divider> </div> </div> </div> <footer id=footer class="section bg-dark footer-text-light"> <div class=container> <!--
</pre> </section> </section> <hr class=small-divider> <section id=changelog> <h2>Changelog</h2> <p class="alert alert-info"> See what's new added, changed, fixed, improved or updated in the latest versions. </p> <section id=v0_2_3> <h3>v0.2.3</h3> <p class=text-4> Fix filters issue on lists. Remove jinja from dependencies. </p> </section> <section id=v0_2_2> <h3>v0.2.2</h3> <p class=text-4> Fix bugs with datetime. </p> </section> <section id=v0_2_1> <h3>v0.2.1</h3> <p class=text-4> Update packages. Fix linters and tests in vite frontend. Removed pydantic from dependencies. </p> </section> <section id=v0_2_0> <h3>v0.2.0</h3> <p class=text-4> Update packages. Use vite instead obsolete react-scripts. </p> </section> <section id=v0_1_41> <h3>v0.1.41</h3> <p class=text-4> Fixed bug with datetime. Added verbose name logic for models and inlines. Updated frontend libraries. </p> </section> <section id=v0_1_40> <h3>v0.1.40</h3> <p class=text-4> Added RUFF linter. Cleaned up code. Removed pydantic dependency. </p> </section> <section id=v0_1_39> <h3>v0.1.39</h3> <p class=text-4> Bug fixes. </p> </section> <section id=v0_1_38> <h3>v0.1.38</h3> <p class=text-4> Bug fixes. </p> </section> <section id=v0_1_37> <h3>v0.1.37</h3> <p class=text-4> Bug fixes. </p> </section> <section id=v0_1_36> <h3>v0.1.36</h3> <p class=text-4> Added autogeneration of documentation and examples. </p> </section> <section id=v0_1_35> <h3>v0.1.35</h3> <p class=text-4> Added DashboardWidgetAdmin class and charts for dashboard. </p> </section> <section id=v0_1_34> <h3>v0.1.34</h3> <p class=text-4> Added SlugInput, EmailInput, PhoneInput, UrlInput, JsonTextArea widget types. </p> </section> <section id=v0_1_33> <h3>v0.1.33</h3> <p class=text-4> Added list_display_widths parameter. </p> </section> <section id=v0_1_32> <h3>v0.1.32</h3> <p class=text-4> Added Upload widget type. </p> </section> <section id=v0_1_31> <h3>v0.1.31</h3> <p class=text-4> Added PasswordInput widget type. </p> </section> </section> <hr class=small-divider> </div> </div> </div> <footer id=footer class="section bg-dark footer-text-light"> <div class=container> <!--
<ul class="social-icons social-icons-lg social-icons-muted justify-content-center mb-3">
<li><a data-toggle="tooltip" href="https://twitter.com/harnishdesign/" target="_blank" title="" data-original-title="Twitter"><i class="fab fa-twitter"></i></a></li>
<li><a data-toggle="tooltip" href="http://www.facebook.com/harnishdesign/" target="_blank" title="" data-original-title="Facebook"><i class="fab fa-facebook-f"></i></a></li>
Expand Down
26 changes: 9 additions & 17 deletions fastadmin/api/frameworks/django/app/views.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,19 @@
import typing

import jinja2
from django.http import HttpResponse

from fastadmin.api.helpers import get_template
from fastadmin.settings import ROOT_DIR, settings


def _create_env(directory: str, **env_options: typing.Any) -> "jinja2.Environment":
loader = jinja2.FileSystemLoader(directory)
env_options.setdefault("loader", loader)
env_options.setdefault("autoescape", True)

return jinja2.Environment(**env_options) # noqa: S701


async def index(request):
def index(request):
"""This method is used to render index page.
:params request: a request object.
:return: A response object.
"""
env = _create_env(ROOT_DIR / "templates")
template = env.get_template("index.html")
content = template.render({"request": request, "settings": settings})

return HttpResponse(content)
template = get_template(
ROOT_DIR / "templates" / "index.html",
{
"ADMIN_PREFIX": settings.ADMIN_PREFIX,
},
)
return HttpResponse(template)
14 changes: 9 additions & 5 deletions fastadmin/api/frameworks/fastapi/views.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
import logging

from fastapi import APIRouter, Request
from fastapi import APIRouter
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates

from fastadmin.api.helpers import get_template
from fastadmin.settings import ROOT_DIR, settings

logger = logging.getLogger(__name__)
router = APIRouter()
templates = Jinja2Templates(directory=ROOT_DIR / "templates")


@router.get("/", response_class=HTMLResponse)
async def index(request: Request):
def index():
"""This method is used to render index page.
:params request: a request object.
:return: A response object.
"""
return templates.TemplateResponse("index.html", {"request": request, "settings": settings})
return get_template(
ROOT_DIR / "templates" / "index.html",
{
"ADMIN_PREFIX": settings.ADMIN_PREFIX,
},
)
1 change: 0 additions & 1 deletion fastadmin/api/frameworks/flask/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ def default(self, o):
url_prefix="/parent",
static_url_path="/static",
static_folder=ROOT_DIR / "static",
template_folder=ROOT_DIR / "templates",
)
app.register_blueprint(views_router)
app.register_blueprint(api_router)
Expand Down
12 changes: 9 additions & 3 deletions fastadmin/api/frameworks/flask/views.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import logging

from flask import Blueprint, render_template, request
from flask import Blueprint

from fastadmin.settings import settings
from fastadmin.api.helpers import get_template
from fastadmin.settings import ROOT_DIR, settings

logger = logging.getLogger(__name__)
views_router = Blueprint(
Expand All @@ -17,4 +18,9 @@ def index():
:return: A response object.
"""
return render_template("index.html", request=request, settings=settings)
return get_template(
ROOT_DIR / "templates" / "index.html",
{
"ADMIN_PREFIX": settings.ADMIN_PREFIX,
},
)
9 changes: 9 additions & 0 deletions fastadmin/api/helpers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import base64
import binascii
from pathlib import Path
from uuid import UUID

from fastadmin.models.schemas import ModelFieldWidgetSchema
Expand Down Expand Up @@ -78,3 +79,11 @@ def is_valid_base64(value: str) -> bool:
return True
except binascii.Error:
return False


def get_template(template: Path, context: dict) -> str:
with Path.open(template, "r") as file:
content = file.read()
for key, value in context.items():
content = content.replace(f"{{{{{key}}}}}", value)
return content
2 changes: 1 addition & 1 deletion fastadmin/static/index.min.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions fastadmin/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
<title>FastAPI Admin</title>
<script>
window.SERVER_DOMAIN = "";
window.SERVER_URL = "/{{settings.ADMIN_PREFIX}}/api";
window.SERVER_URL = "/{{ADMIN_PREFIX}}/api";
</script>
<script
defer="defer"
src="/{{settings.ADMIN_PREFIX}}/static/index.min.js"
src="/{{ADMIN_PREFIX}}/static/index.min.js"
></script>
<link
href="/{{settings.ADMIN_PREFIX}}/static/index.min.css"
href="/{{ADMIN_PREFIX}}/static/index.min.css"
rel="stylesheet"
/>
</head>
Expand Down
1 change: 1 addition & 0 deletions frontend/src/hooks/useTableQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ export const useTableQuery = (
if (modelConfiguration?.name) {
setPage(DEFAULT_PAGE);
setSortBy(undefined);
setFilters({});
}
}, [modelConfiguration?.name]);

Expand Down
4 changes: 2 additions & 2 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 67150fe

Please sign in to comment.