import pydivkit as dk def test_container_example(): container = dk.DivContainer( items=[dk.DivGallery(items=[dk.DivText(text="Hello from pydivkit")])] ) assert container.dict() == { "type": "container", "items": [ { "type": "gallery", "items": [{"type": "text", "text": "Hello from pydivkit"}], } ], } def test_slider_example(): slider = dk.DivData( log_id="sample_card", states=[ dk.DivDataState( state_id=0, div=dk.DivSlider( width=dk.DivMatchParentSize(), max_value=10, min_value=1, thumb_style=dk.DivShapeDrawable( color="#00b300", stroke=dk.DivStroke( color="#ffffff", width=3, ), shape=dk.DivRoundedRectangleShape( item_width=dk.DivFixedSize(value=32), item_height=dk.DivFixedSize(value=32), corner_radius=dk.DivFixedSize(value=100), ), ), track_active_style=dk.DivShapeDrawable( color="#00b300", shape=dk.DivRoundedRectangleShape( item_height=dk.DivFixedSize(value=6) ), ), track_inactive_style=dk.DivShapeDrawable( color="#20000000", shape=dk.DivRoundedRectangleShape( item_height=dk.DivFixedSize(value=6) ), ), ), ) ], ) assert slider.dict() == dict( log_id="sample_card", states=[ dict( div=dict( type="slider", max_value=10, min_value=1, thumb_style=dict( type="shape_drawable", color="#00b300", shape=dict( type="rounded_rectangle", corner_radius=dict(type="fixed", value=100), item_height=dict(type="fixed", value=32), item_width=dict(type="fixed", value=32), ), stroke=dict(color="#ffffff", width=3), ), track_active_style=dict( type="shape_drawable", color="#00b300", shape=dict( type="rounded_rectangle", item_height=dict(type="fixed", value=6), ), ), track_inactive_style=dict( type="shape_drawable", color="#20000000", shape=dict( type="rounded_rectangle", item_height=dict(type="fixed", value=6), ), ), width=dict(type="match_parent"), ), state_id=0, ) ], ) def test_gallery(): class CategoriesItem(dk.DivContainer): """ Class inherited from dk.DivContainer will have a template """ # Special object for mark this fields a DivKit field in template icon_url: str = dk.Field() text: str = dk.Field() # Set defaults layout for in the template width = dk.DivWrapContentSize() background = [dk.DivSolidBackground(color="#f0f0f0")] content_alignment_vertical = dk.DivAlignmentVertical.CENTER orientation = dk.DivContainerOrientation.HORIZONTAL paddings = dk.DivEdgeInsets(left=12, right=12, top=10, bottom=10) border = dk.DivBorder(corner_radius=12) items = [ dk.DivImage( width=dk.DivFixedSize(value=20), height=dk.DivFixedSize(value=20), margins=dk.DivEdgeInsets(right=6), # Special object Ref it's a reference for Field property image_url=dk.Ref(icon_url), ), dk.DivText( width=dk.DivWrapContentSize(), max_lines=1, # Special object Ref it's a reference for Field property text=dk.Ref(text), ), ] base_url = "https://leonardo.edadeal.io/dyn/re/segments/level1/96" # So after class definition you might use all the `Field` marked property # names as an argument. gallery = dk.DivGallery( items=[ CategoriesItem( text="Food", icon_url=f"{base_url}/food.png", ), CategoriesItem( text="Alcohol", icon_url=f"{base_url}/alcohol.png", ), CategoriesItem( text="Household", icon_url=f"{base_url}/household.png", ), ] ) template_name = CategoriesItem.template_name assert dk.make_div(gallery) == { "templates": { template_name: { "type": "container", "background": [{"type": "solid", "color": "#f0f0f0"}], "border": {"corner_radius": 12}, "content_alignment_vertical": "center", "items": [ { "type": "image", "height": {"type": "fixed", "value": 20}, "$image_url": "icon_url", "margins": {"right": 6}, "width": {"type": "fixed", "value": 20}, }, { "type": "text", "max_lines": 1, "$text": "text", "width": {"type": "wrap_content"}, }, ], "orientation": "horizontal", "paddings": {"bottom": 10, "left": 12, "right": 12, "top": 10}, "width": {"type": "wrap_content"}, } }, "card": { "log_id": "card", "states": [ { "div": { "type": "gallery", "items": [ { "type": template_name, "icon_url": f"{base_url}/food.png", "text": "Food", }, { "type": template_name, "icon_url": f"{base_url}/alcohol.png", "text": "Alcohol", }, { "type": template_name, "icon_url": f"{base_url}/household.png", "text": "Household", }, ], }, "state_id": 0, } ], }, }