Skip to content

Commit

Permalink
tweak imports
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelcolvin committed Dec 5, 2023
1 parent d1d7c1f commit c4be844
Show file tree
Hide file tree
Showing 8 changed files with 181 additions and 188 deletions.
4 changes: 2 additions & 2 deletions src/python-fastui/fastui/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import typing
import typing as _t

import pydantic

Expand All @@ -13,7 +13,7 @@ class FastUI(pydantic.RootModel):
The root component of a FastUI application.
"""

root: typing.List[AnyComponent]
root: _t.List[AnyComponent]


_PREBUILT_VERSION = '0.0.10'
Expand Down
94 changes: 46 additions & 48 deletions src/python-fastui/fastui/components/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
All CamelCase names in the namespace should be components.
"""
import typing
import typing as _t

import pydantic
import typing_extensions as _te
Expand All @@ -25,7 +25,7 @@
)
from .tables import Pagination, Table

if typing.TYPE_CHECKING:
if _t.TYPE_CHECKING:
import pydantic.fields

__all__ = (
Expand All @@ -51,12 +51,12 @@

class Text(pydantic.BaseModel, extra='forbid'):
text: str
type: typing.Literal['Text'] = 'Text'
type: _t.Literal['Text'] = 'Text'


class Paragraph(pydantic.BaseModel, extra='forbid'):
text: str
type: typing.Literal['Paragraph'] = 'Paragraph'
type: _t.Literal['Paragraph'] = 'Paragraph'


class PageTitle(pydantic.BaseModel, extra='forbid'):
Expand All @@ -65,98 +65,96 @@ class PageTitle(pydantic.BaseModel, extra='forbid'):
"""

text: str
type: typing.Literal['PageTitle'] = 'PageTitle'
type: _t.Literal['PageTitle'] = 'PageTitle'


class Div(pydantic.BaseModel, extra='forbid'):
components: 'typing.List[AnyComponent]'
components: '_t.List[AnyComponent]'
class_name: _class_name.ClassName = None
type: typing.Literal['Div'] = 'Div'
type: _t.Literal['Div'] = 'Div'


class Page(pydantic.BaseModel, extra='forbid'):
"""
Similar to `container` in many UI frameworks, this should be a reasonable root component for most pages.
"""

components: 'typing.List[AnyComponent]'
components: '_t.List[AnyComponent]'
class_name: _class_name.ClassName = None
type: typing.Literal['Page'] = 'Page'
type: _t.Literal['Page'] = 'Page'


class Heading(pydantic.BaseModel, extra='forbid'):
text: str
level: typing.Literal[1, 2, 3, 4, 5, 6] = 1
html_id: typing.Union[str, None] = pydantic.Field(default=None, serialization_alias='htmlId')
level: _t.Literal[1, 2, 3, 4, 5, 6] = 1
html_id: _t.Union[str, None] = pydantic.Field(default=None, serialization_alias='htmlId')
class_name: _class_name.ClassName = None
type: typing.Literal['Heading'] = 'Heading'
type: _t.Literal['Heading'] = 'Heading'


# see https://github.com/PrismJS/prism-themes
# and https://cdn.jsdelivr.net/npm/react-syntax-highlighter@15.5.0/dist/esm/styles/prism/index.js
CodeStyle = _te.Annotated[typing.Union[str, None], pydantic.Field(serialization_alias='codeStyle')]
CodeStyle = _te.Annotated[_t.Union[str, None], pydantic.Field(serialization_alias='codeStyle')]


class Markdown(pydantic.BaseModel, extra='forbid'):
text: str
code_style: CodeStyle = None
class_name: _class_name.ClassName = None
type: typing.Literal['Markdown'] = 'Markdown'
type: _t.Literal['Markdown'] = 'Markdown'


class Code(pydantic.BaseModel, extra='forbid'):
text: str
language: typing.Union[str, None] = None
language: _t.Union[str, None] = None
code_style: CodeStyle = None
class_name: _class_name.ClassName = None
type: typing.Literal['Code'] = 'Code'
type: _t.Literal['Code'] = 'Code'


class Button(pydantic.BaseModel, extra='forbid'):
text: str
on_click: typing.Union[events.AnyEvent, None] = pydantic.Field(default=None, serialization_alias='onClick')
html_type: typing.Union[typing.Literal['button', 'submit', 'reset'], None] = pydantic.Field(
on_click: _t.Union[events.AnyEvent, None] = pydantic.Field(default=None, serialization_alias='onClick')
html_type: _t.Union[_t.Literal['button', 'submit', 'reset'], None] = pydantic.Field(
default=None, serialization_alias='htmlType'
)
class_name: _class_name.ClassName = None
type: typing.Literal['Button'] = 'Button'
type: _t.Literal['Button'] = 'Button'


class Link(pydantic.BaseModel, extra='forbid'):
components: 'typing.List[AnyComponent]'
on_click: typing.Union[events.AnyEvent, None] = pydantic.Field(default=None, serialization_alias='onClick')
mode: typing.Union[typing.Literal['navbar', 'tabs', 'vertical', 'pagination'], None] = None
active: typing.Union[bool, str, None] = None
locked: typing.Union[bool, None] = None
components: '_t.List[AnyComponent]'
on_click: _t.Union[events.AnyEvent, None] = pydantic.Field(default=None, serialization_alias='onClick')
mode: _t.Union[_t.Literal['navbar', 'tabs', 'vertical', 'pagination'], None] = None
active: _t.Union[bool, str, None] = None
locked: _t.Union[bool, None] = None
class_name: _class_name.ClassName = None
type: typing.Literal['Link'] = 'Link'
type: _t.Literal['Link'] = 'Link'


class LinkList(pydantic.BaseModel, extra='forbid'):
links: typing.List[Link]
mode: typing.Union[typing.Literal['tabs', 'vertical', 'pagination'], None] = None
links: _t.List[Link]
mode: _t.Union[_t.Literal['tabs', 'vertical', 'pagination'], None] = None
class_name: _class_name.ClassName = None
type: typing.Literal['LinkList'] = 'LinkList'
type: _t.Literal['LinkList'] = 'LinkList'


class Navbar(pydantic.BaseModel, extra='forbid'):
title: typing.Union[str, None] = None
title_event: typing.Union[events.AnyEvent, None] = pydantic.Field(default=None, serialization_alias='titleEvent')
links: typing.List[Link] = pydantic.Field(default_factory=list)
title: _t.Union[str, None] = None
title_event: _t.Union[events.AnyEvent, None] = pydantic.Field(default=None, serialization_alias='titleEvent')
links: _t.List[Link] = pydantic.Field(default_factory=list)
class_name: _class_name.ClassName = None
type: typing.Literal['Navbar'] = 'Navbar'
type: _t.Literal['Navbar'] = 'Navbar'


class Modal(pydantic.BaseModel, extra='forbid'):
title: str
body: 'typing.List[AnyComponent]'
footer: 'typing.Union[typing.List[AnyComponent], None]' = None
open_trigger: typing.Union[events.PageEvent, None] = pydantic.Field(default=None, serialization_alias='openTrigger')
open_context: typing.Union[events.EventContext, None] = pydantic.Field(
default=None, serialization_alias='openContext'
)
body: '_t.List[AnyComponent]'
footer: '_t.Union[_t.List[AnyComponent], None]' = None
open_trigger: _t.Union[events.PageEvent, None] = pydantic.Field(default=None, serialization_alias='openTrigger')
open_context: _t.Union[events.EventContext, None] = pydantic.Field(default=None, serialization_alias='openContext')
class_name: _class_name.ClassName = None
type: typing.Literal['Modal'] = 'Modal'
type: _t.Literal['Modal'] = 'Modal'


class ServerLoad(pydantic.BaseModel, extra='forbid'):
Expand All @@ -165,22 +163,22 @@ class ServerLoad(pydantic.BaseModel, extra='forbid'):
"""

path: str
load_trigger: typing.Union[events.PageEvent, None] = pydantic.Field(default=None, serialization_alias='loadTrigger')
components: 'typing.Union[typing.List[AnyComponent], None]' = None
sse: typing.Union[bool, None] = None
type: typing.Literal['ServerLoad'] = 'ServerLoad'
load_trigger: _t.Union[events.PageEvent, None] = pydantic.Field(default=None, serialization_alias='loadTrigger')
components: '_t.Union[_t.List[AnyComponent], None]' = None
sse: _t.Union[bool, None] = None
type: _t.Literal['ServerLoad'] = 'ServerLoad'


class Iframe(pydantic.BaseModel, extra='forbid'):
src: pydantic.HttpUrl
title: typing.Union[str, None] = None
width: typing.Union[str, int, None] = None
height: typing.Union[str, int, None] = None
type: typing.Literal['Iframe'] = 'Iframe'
title: _t.Union[str, None] = None
width: _t.Union[str, int, None] = None
height: _t.Union[str, int, None] = None
type: _t.Literal['Iframe'] = 'Iframe'


AnyComponent = _te.Annotated[
typing.Union[
_t.Union[
Text,
Paragraph,
PageTitle,
Expand Down
22 changes: 11 additions & 11 deletions src/python-fastui/fastui/components/display.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import enum
import typing
import typing as _t
from abc import ABC

import annotated_types as _at
Expand Down Expand Up @@ -29,8 +29,8 @@ class DisplayMode(str, enum.Enum):


class DisplayBase(pydantic.BaseModel, ABC, defer_build=True):
mode: typing.Union[DisplayMode, None] = None
on_click: typing.Union[events.AnyEvent, None] = pydantic.Field(default=None, serialization_alias='onClick')
mode: _t.Union[DisplayMode, None] = None
on_click: _t.Union[events.AnyEvent, None] = pydantic.Field(default=None, serialization_alias='onClick')


class DisplayLookup(DisplayBase, extra='forbid'):
Expand All @@ -39,9 +39,9 @@ class DisplayLookup(DisplayBase, extra='forbid'):
"""

field: str
title: typing.Union[str, None] = None
title: _t.Union[str, None] = None
# percentage width - 0 to 100, specific to tables
table_width_percent: typing.Union[_te.Annotated[int, _at.Interval(ge=0, le=100)], None] = pydantic.Field(
table_width_percent: _t.Union[_te.Annotated[int, _at.Interval(ge=0, le=100)], None] = pydantic.Field(
default=None, serialization_alias='tableWidthPercent'
)

Expand All @@ -51,18 +51,18 @@ class Display(DisplayBase, extra='forbid'):
Description of how to display a value, either in a table or detail view.
"""

value: typing.Any
type: typing.Literal['Display'] = 'Display'
value: _t.Any
type: _t.Literal['Display'] = 'Display'


DataModel = typing.TypeVar('DataModel', bound=pydantic.BaseModel)
DataModel = _t.TypeVar('DataModel', bound=pydantic.BaseModel)


class Details(pydantic.BaseModel, typing.Generic[DataModel], extra='forbid'):
class Details(pydantic.BaseModel, _t.Generic[DataModel], extra='forbid'):
data: DataModel
fields: typing.Union[typing.List[DisplayLookup], None] = None
fields: _t.Union[_t.List[DisplayLookup], None] = None
class_name: _class_name.ClassName = None
type: typing.Literal['Details'] = 'Details'
type: _t.Literal['Details'] = 'Details'

@pydantic.model_validator(mode='after')
def fill_fields(self) -> _te.Self:
Expand Down
Loading

0 comments on commit c4be844

Please sign in to comment.