Kivy-examples 2.3.1.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/monkey.obj +7966 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/objloader.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/simple.glsl +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/editor.kv +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/main.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/compass.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/needle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/rose.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/main.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/takepicture.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/animation/animate.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite.py +152 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite_data/testkvdir.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_build.py +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_config.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv_in_template1.py +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/template1/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/testkvfile.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_advanced.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_basic.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_advanced.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_basic.py +58 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12908_sweet_trip_mm_clap_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12909_sweet_trip_mm_clap_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12910_sweet_trip_mm_clap_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12911_sweet_trip_mm_hat_cl.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12913_sweet_trip_mm_kick_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12914_sweet_trip_mm_kick_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12915_sweet_trip_mm_kick_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12916_sweet_trip_mm_kwik_mod_01.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12917_sweet_trip_mm_kwik_mod_02.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12918_sweet_trip_mm_kwik_mod_03.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12919_sweet_trip_mm_kwik_mod_04.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12920_sweet_trip_mm_kwik_mod_05.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12921_sweet_trip_mm_kwik_mod_06.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12922_sweet_trip_mm_kwik_mod_07.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12923_sweet_trip_mm_metal_clave.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12925_sweet_trip_mm_sweep_x.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12926_sweet_trip_mm_sweep_y.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12927_sweet_trip_mm_sweep_z.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/audio.kv +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/main.py +81 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/pitch.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/camera/main.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/bezier.py +105 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/canvas_stress.py +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/circle.py +84 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/fbo_canvas.py +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/kiwi.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines_extended.py +183 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh.py +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh_manipulation.py +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture1.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture2.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/multitexture.py +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/repeat_texture.py +65 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rotation.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rounded_rectangle.py +153 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/scale.py +37 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/stencil_canvas.py +85 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/tesselate.py +146 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture_example_image.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/1.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/2.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/3.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/root.kv +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/main.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_image.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_video.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/camera_puzzle.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/AnchorLayoutContainer.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/BoxLayoutContainer.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ButtonContainer.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/CheckBoxContainer.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FileChooserContainer.kv +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FloatLayoutContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/GridLayoutContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/LabelContainer.kv +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/MediaContainer.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PlaygroundContainer.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PopupContainer.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ProgressBarContainer.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/RestContainer.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ScatterContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/SelectorsContainer.kv +10 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/StackLayoutContainer.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/TextContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/kivycatalog.kv +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/main.py +192 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.kv +117 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.py +180 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/helpers.py +30 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.kv +164 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.py +276 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/main.py +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/multistroke.kv +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.kv +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.py +97 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Bubbles.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Ill1.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Wall.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/main.py +73 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/pictures.kv +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/main.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/shadereditor.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/README.txt +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/background.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/README +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/bug.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-left.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-right.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/accordions.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/bubbles.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/buttons.kv +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/carousel.kv +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/checkboxes.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/codeinput.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/dropdown.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/filechoosers.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/popups.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/progressbar.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/rstdocument.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/scatter.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/screenmanager.kv +46 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/sliders.kv +55 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/spinner.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/splitter.kv +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/switches.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/tabbedpanel + layouts.kv +69 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/textinputs.kv +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/togglebutton.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/main.py +243 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/showcase.kv +100 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/README.txt +12 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/main.py +170 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/particle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/touchtracer.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_client_app.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_server_app.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/twistd_app.py +66 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/gesture_board.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/my_gestures.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/controller.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/main.py +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/1_skeleton.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/2_print_touch.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/3_draw_ellipse.py +22 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/4_draw_line.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/5_random_colors.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/6_button.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/quickstart/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/layout.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/main.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/test.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/main.py +226 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/numeric.json +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/README.txt +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/kinectviewer.py +283 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_camera.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_fbo.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_layout.kv +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_logo.kv +36 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_scatter.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_stencil.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_video.kv +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/builder_template.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/id_in_kv.py +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/kv_and_py.py +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kivy.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kvrun.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/clipboard.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/custom_titlebar.py +56 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/imagesave.py +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/joystick.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/multiple_dropfile.py +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/on_textedit_event.py +104 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/opacitywindow.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapecollisions.py +397 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapedwindow.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/two_panes.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/urlrequest.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/main.py +122 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.py +86 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.kv +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.py +102 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/tex3.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/benchmark.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/cloud.svg +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main-smaa.py +155 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/music.svg +68 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/rotated.svg +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/ship.svg +181 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/sun.svg +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/tiger.svg +813 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/text/pango_demo.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/data/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/main.py +163 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/note.kv +154 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/main.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/pong.kv +2 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/pong.kv +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/main.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/pong.kv +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/main.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/pong.kv +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/main.py +75 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/accordion_1.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/actionbar.py +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/asyncimage.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/boxlayout_poshint.py +54 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/bubble_test.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/camera.py +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/carousel_buttons.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.mpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinput.py +225 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinputtest.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorpicker.py +234 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorusage.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/compound_selection.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/customcollide.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget2.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget3_advanced.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/fbowidget.py +111 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/focus_behavior.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/image_mipmap.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/keyboardlistener.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_mipmap.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_sizing.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_text_size.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_with_markup.py +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/lang_dynamic_classes.py +18 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/pagelayout.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/popup_with_kv.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/basic_data.py +124 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/infinite_scrolling.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/key_viewclass.py +149 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/messenger.py +196 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/pull_to_refresh.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/rv_animate_items.py +109 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/rstexample.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/screenmanager.py +106 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.py +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/bird.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white_animated.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/cube.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/simple_cv_joint_animated.gif +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.kv +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.py +150 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/__init__.py +7 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/custom_button.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/settings.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/shorten_text.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/spinner.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/splitter.py +74 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbed_panel_showcase.py +316 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbedpanel.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.kv +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textinput.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/unicode_textinput.py +244 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/videoplayer.py +26 -0
- Kivy_examples-2.3.1.dev0.dist-info/AUTHORS +66 -0
- Kivy_examples-2.3.1.dev0.dist-info/LICENSE +21 -0
- Kivy_examples-2.3.1.dev0.dist-info/METADATA +382 -0
- Kivy_examples-2.3.1.dev0.dist-info/RECORD +624 -0
- Kivy_examples-2.3.1.dev0.dist-info/WHEEL +5 -0
- Kivy_examples-2.3.1.dev0.dist-info/dependency_links.txt +1 -0
- Kivy_examples-2.3.1.dev0.dist-info/top_level.txt +1 -0
- kivy/__init__.py +519 -0
- kivy/_version.py +18 -0
- kivy/animation.py +831 -0
- kivy/app.py +1213 -0
- kivy/atlas.py +456 -0
- kivy/base.py +617 -0
- kivy/cache.py +262 -0
- kivy/clock.py +1172 -0
- kivy/compat.py +82 -0
- kivy/config.py +1004 -0
- kivy/context.py +102 -0
- kivy/core/__init__.py +247 -0
- kivy/core/audio/__init__.py +223 -0
- kivy/core/audio/audio_android.py +104 -0
- kivy/core/audio/audio_avplayer.py +82 -0
- kivy/core/audio/audio_ffpyplayer.py +185 -0
- kivy/core/audio/audio_gstplayer.py +101 -0
- kivy/core/audio/audio_pygame.py +127 -0
- kivy/core/camera/__init__.py +151 -0
- kivy/core/camera/camera_android.py +206 -0
- kivy/core/camera/camera_gi.py +170 -0
- kivy/core/camera/camera_opencv.py +163 -0
- kivy/core/camera/camera_picamera.py +96 -0
- kivy/core/clipboard/__init__.py +157 -0
- kivy/core/clipboard/_clipboard_ext.py +36 -0
- kivy/core/clipboard/clipboard_android.py +91 -0
- kivy/core/clipboard/clipboard_dbusklipper.py +41 -0
- kivy/core/clipboard/clipboard_dummy.py +26 -0
- kivy/core/clipboard/clipboard_gtk3.py +47 -0
- kivy/core/clipboard/clipboard_nspaste.py +44 -0
- kivy/core/clipboard/clipboard_pygame.py +67 -0
- kivy/core/clipboard/clipboard_sdl2.py +36 -0
- kivy/core/clipboard/clipboard_winctypes.py +107 -0
- kivy/core/clipboard/clipboard_xclip.py +29 -0
- kivy/core/clipboard/clipboard_xsel.py +26 -0
- kivy/core/gl/__init__.py +90 -0
- kivy/core/image/__init__.py +996 -0
- kivy/core/image/img_dds.py +40 -0
- kivy/core/image/img_ffpyplayer.py +87 -0
- kivy/core/image/img_pil.py +123 -0
- kivy/core/image/img_pygame.py +119 -0
- kivy/core/image/img_sdl2.py +66 -0
- kivy/core/image/img_tex.py +58 -0
- kivy/core/spelling/__init__.py +135 -0
- kivy/core/spelling/spelling_enchant.py +50 -0
- kivy/core/spelling/spelling_osxappkit.py +64 -0
- kivy/core/text/__init__.py +1090 -0
- kivy/core/text/markup.py +893 -0
- kivy/core/text/text_pango.py +145 -0
- kivy/core/text/text_pil.py +84 -0
- kivy/core/text/text_pygame.py +117 -0
- kivy/core/text/text_sdl2.py +50 -0
- kivy/core/video/__init__.py +219 -0
- kivy/core/video/video_ffmpeg.py +106 -0
- kivy/core/video/video_ffpyplayer.py +449 -0
- kivy/core/video/video_gstplayer.py +140 -0
- kivy/core/video/video_null.py +12 -0
- kivy/core/window/__init__.py +2515 -0
- kivy/core/window/window_egl_rpi.py +86 -0
- kivy/core/window/window_pygame.py +441 -0
- kivy/core/window/window_sdl2.py +999 -0
- kivy/deps/__init__.py +6 -0
- kivy/effects/__init__.py +23 -0
- kivy/effects/dampedscroll.py +114 -0
- kivy/effects/kinetic.py +193 -0
- kivy/effects/opacityscroll.py +27 -0
- kivy/effects/scroll.py +126 -0
- kivy/event.py +12 -0
- kivy/eventmanager/__init__.py +185 -0
- kivy/extras/__init__.py +0 -0
- kivy/extras/highlight.py +52 -0
- kivy/factory.py +190 -0
- kivy/factory_registers.py +201 -0
- kivy/garden/__init__.py +186 -0
- kivy/geometry.py +121 -0
- kivy/gesture.py +424 -0
- kivy/graphics/__init__.py +126 -0
- kivy/graphics/cgl_backend/__init__.py +0 -0
- kivy/input/__init__.py +39 -0
- kivy/input/factory.py +35 -0
- kivy/input/motionevent.py +587 -0
- kivy/input/postproc/__init__.py +27 -0
- kivy/input/postproc/calibration.py +200 -0
- kivy/input/postproc/dejitter.py +74 -0
- kivy/input/postproc/doubletap.py +101 -0
- kivy/input/postproc/ignorelist.py +47 -0
- kivy/input/postproc/retaintouch.py +93 -0
- kivy/input/postproc/tripletap.py +106 -0
- kivy/input/provider.py +40 -0
- kivy/input/providers/__init__.py +68 -0
- kivy/input/providers/androidjoystick.py +117 -0
- kivy/input/providers/hidinput.py +778 -0
- kivy/input/providers/leapfinger.py +113 -0
- kivy/input/providers/linuxwacom.py +396 -0
- kivy/input/providers/mactouch.py +220 -0
- kivy/input/providers/mouse.py +424 -0
- kivy/input/providers/mtdev.py +380 -0
- kivy/input/providers/probesysfs.py +254 -0
- kivy/input/providers/tuio.py +326 -0
- kivy/input/providers/wm_common.py +162 -0
- kivy/input/providers/wm_pen.py +121 -0
- kivy/input/providers/wm_touch.py +157 -0
- kivy/input/recorder.py +335 -0
- kivy/input/shape.py +27 -0
- kivy/interactive.py +335 -0
- kivy/lang/__init__.py +883 -0
- kivy/lang/builder.py +1004 -0
- kivy/lang/parser.py +822 -0
- kivy/lib/__init__.py +21 -0
- kivy/lib/ddsfile.py +419 -0
- kivy/lib/gstplayer/__init__.py +27 -0
- kivy/lib/mtdev.py +254 -0
- kivy/lib/vidcore_lite/__init__.py +0 -0
- kivy/loader.py +579 -0
- kivy/logger.py +646 -0
- kivy/metrics.py +421 -0
- kivy/modules/__init__.py +300 -0
- kivy/modules/_webdebugger.py +200 -0
- kivy/modules/console.py +1059 -0
- kivy/modules/cursor.py +75 -0
- kivy/modules/inspector.py +755 -0
- kivy/modules/joycursor.py +299 -0
- kivy/modules/keybinding.py +64 -0
- kivy/modules/monitor.py +90 -0
- kivy/modules/recorder.py +94 -0
- kivy/modules/screen.py +183 -0
- kivy/modules/showborder.py +33 -0
- kivy/modules/touchring.py +97 -0
- kivy/modules/webdebugger.py +30 -0
- kivy/multistroke.py +1477 -0
- kivy/network/__init__.py +7 -0
- kivy/network/urlrequest.py +794 -0
- kivy/parser.py +154 -0
- kivy/resources.py +102 -0
- kivy/storage/__init__.py +405 -0
- kivy/storage/dictstore.py +98 -0
- kivy/storage/jsonstore.py +92 -0
- kivy/storage/redisstore.py +103 -0
- kivy/support.py +267 -0
- kivy/tests/__init__.py +11 -0
- kivy/tests/async_common.py +568 -0
- kivy/tests/common.py +524 -0
- kivy/tests/conftest.py +33 -0
- kivy/tests/fixtures.py +169 -0
- kivy/tests/perf_test_textinput.py +195 -0
- kivy/tests/pyinstaller/simple_widget/main.py +12 -0
- kivy/tests/pyinstaller/simple_widget/project/__init__.py +0 -0
- kivy/tests/pyinstaller/simple_widget/project/widget.py +12 -0
- kivy/tests/pyinstaller/test_pyinstaller.py +115 -0
- kivy/tests/pyinstaller/video_widget/main.py +6 -0
- kivy/tests/pyinstaller/video_widget/project/__init__.py +38 -0
- kivy/tests/test_animations.py +415 -0
- kivy/tests/test_app.py +216 -0
- kivy/tests/test_audio.py +69 -0
- kivy/tests/test_benchmark.py +292 -0
- kivy/tests/test_clipboard.py +48 -0
- kivy/tests/test_clock.py +292 -0
- kivy/tests/test_compat.py +6 -0
- kivy/tests/test_config.py +35 -0
- kivy/tests/test_coverage.py +83 -0
- kivy/tests/test_doc_gallery.py +38 -0
- kivy/tests/test_environ_cli.py +50 -0
- kivy/tests/test_fbo_py2py3.py +74 -0
- kivy/tests/test_filechooser.py +11 -0
- kivy/tests/test_filechooser_unicode.py +82 -0
- kivy/tests/test_fonts.py +42 -0
- kivy/tests/test_garden.py +23 -0
- kivy/tests/test_graphics.py +1149 -0
- kivy/tests/test_graphics_svg.py +84 -0
- kivy/tests/test_image.py +74 -0
- kivy/tests/test_imageloader.py +485 -0
- kivy/tests/test_invalid_lang.py +42 -0
- kivy/tests/test_issues/test_6315.py +55 -0
- kivy/tests/test_issues/test_issue_1084.py +47 -0
- kivy/tests/test_issues/test_issue_1091.py +19 -0
- kivy/tests/test_issues/test_issue_599.py +21 -0
- kivy/tests/test_issues/test_issue_609.py +19 -0
- kivy/tests/test_issues/test_issue_6909.py +28 -0
- kivy/tests/test_issues/test_issue_883.py +12 -0
- kivy/tests/test_kivy_init.py +30 -0
- kivy/tests/test_knspace.py +247 -0
- kivy/tests/test_lang.py +431 -0
- kivy/tests/test_lang_complex.py +87 -0
- kivy/tests/test_lang_pre_process_and_post_process.py +394 -0
- kivy/tests/test_logger.py +516 -0
- kivy/tests/test_metrics.py +30 -0
- kivy/tests/test_module_inspector.py +382 -0
- kivy/tests/test_motion_event.py +44 -0
- kivy/tests/test_mouse_hover_event.py +249 -0
- kivy/tests/test_mouse_multitouchsim.py +554 -0
- kivy/tests/test_multistroke.py +389 -0
- kivy/tests/test_properties.py +1332 -0
- kivy/tests/test_resources.py +79 -0
- kivy/tests/test_rst_replace.py +63 -0
- kivy/tests/test_screen.py +38 -0
- kivy/tests/test_storage.py +135 -0
- kivy/tests/test_uix_actionbar.py +363 -0
- kivy/tests/test_uix_anchorlayout.py +79 -0
- kivy/tests/test_uix_asyncimage.py +133 -0
- kivy/tests/test_uix_boxlayout.py +94 -0
- kivy/tests/test_uix_bubble.py +425 -0
- kivy/tests/test_uix_carousel.py +93 -0
- kivy/tests/test_uix_colorpicker.py +77 -0
- kivy/tests/test_uix_dropdown.py +91 -0
- kivy/tests/test_uix_gridlayout.py +244 -0
- kivy/tests/test_uix_layout.py +16 -0
- kivy/tests/test_uix_modal.py +101 -0
- kivy/tests/test_uix_recyclegridlayout.py +383 -0
- kivy/tests/test_uix_relativelayout.py +30 -0
- kivy/tests/test_uix_scrollview.py +358 -0
- kivy/tests/test_uix_settings.py +33 -0
- kivy/tests/test_uix_slider.py +156 -0
- kivy/tests/test_uix_stacklayout.py +120 -0
- kivy/tests/test_uix_textinput.py +577 -0
- kivy/tests/test_uix_translate_coordinates.py +72 -0
- kivy/tests/test_uix_videoplayer.py +112 -0
- kivy/tests/test_uix_widget.py +137 -0
- kivy/tests/test_urlrequest/test_urlrequest_requests.py +378 -0
- kivy/tests/test_urlrequest/test_urlrequest_urllib.py +155 -0
- kivy/tests/test_utils.py +237 -0
- kivy/tests/test_vector.py +256 -0
- kivy/tests/test_video.py +25 -0
- kivy/tests/test_weakmethod.py +44 -0
- kivy/tests/test_widget.py +127 -0
- kivy/tests/test_widget_walk.py +70 -0
- kivy/tests/test_window_base.py +60 -0
- kivy/tests/test_window_info.py +29 -0
- kivy/tests/visual_test_label.py +291 -0
- kivy/tools/__init__.py +44 -0
- kivy/tools/benchmark.py +286 -0
- kivy/tools/changelog_parser.py +120 -0
- kivy/tools/coverage.py +135 -0
- kivy/tools/gallery.py +323 -0
- kivy/tools/generate-icons.py +117 -0
- kivy/tools/gles_compat/subset_gles.py +125 -0
- kivy/tools/highlight/__init__.py +9 -0
- kivy/tools/kviewer.py +80 -0
- kivy/tools/packaging/__init__.py +12 -0
- kivy/tools/packaging/cython_cfg.py +82 -0
- kivy/tools/packaging/factory.py +105 -0
- kivy/tools/packaging/pyinstaller_hooks/__init__.py +381 -0
- kivy/tools/packaging/pyinstaller_hooks/__main__.py +29 -0
- kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py +9 -0
- kivy/tools/packaging/pyinstaller_hooks/pyi_rth_kivy.py +17 -0
- kivy/tools/pep8checker/pep8.py +2316 -0
- kivy/tools/pep8checker/pep8kivy.py +109 -0
- kivy/tools/report.py +223 -0
- kivy/tools/stub-gl-debug.py +201 -0
- kivy/tools/texturecompress.py +233 -0
- kivy/uix/__init__.py +56 -0
- kivy/uix/accordion.py +484 -0
- kivy/uix/actionbar.py +934 -0
- kivy/uix/anchorlayout.py +122 -0
- kivy/uix/behaviors/__init__.py +95 -0
- kivy/uix/behaviors/button.py +212 -0
- kivy/uix/behaviors/codenavigation.py +167 -0
- kivy/uix/behaviors/compoundselection.py +688 -0
- kivy/uix/behaviors/cover.py +160 -0
- kivy/uix/behaviors/drag.py +234 -0
- kivy/uix/behaviors/emacs.py +140 -0
- kivy/uix/behaviors/focus.py +595 -0
- kivy/uix/behaviors/knspace.py +590 -0
- kivy/uix/behaviors/togglebutton.py +156 -0
- kivy/uix/behaviors/touchripple.py +318 -0
- kivy/uix/boxlayout.py +331 -0
- kivy/uix/bubble.py +576 -0
- kivy/uix/button.py +137 -0
- kivy/uix/camera.py +118 -0
- kivy/uix/carousel.py +695 -0
- kivy/uix/checkbox.py +197 -0
- kivy/uix/codeinput.py +238 -0
- kivy/uix/colorpicker.py +486 -0
- kivy/uix/dropdown.py +391 -0
- kivy/uix/effectwidget.py +772 -0
- kivy/uix/filechooser.py +1134 -0
- kivy/uix/floatlayout.py +148 -0
- kivy/uix/gesturesurface.py +625 -0
- kivy/uix/gridlayout.py +629 -0
- kivy/uix/image.py +528 -0
- kivy/uix/label.py +1200 -0
- kivy/uix/layout.py +322 -0
- kivy/uix/modalview.py +339 -0
- kivy/uix/pagelayout.py +233 -0
- kivy/uix/popup.py +266 -0
- kivy/uix/progressbar.py +95 -0
- kivy/uix/recycleboxlayout.py +183 -0
- kivy/uix/recyclegridlayout.py +255 -0
- kivy/uix/recyclelayout.py +446 -0
- kivy/uix/recycleview/__init__.py +624 -0
- kivy/uix/recycleview/datamodel.py +194 -0
- kivy/uix/recycleview/layout.py +253 -0
- kivy/uix/recycleview/views.py +423 -0
- kivy/uix/relativelayout.py +324 -0
- kivy/uix/rst.py +1492 -0
- kivy/uix/sandbox.py +198 -0
- kivy/uix/scatter.py +645 -0
- kivy/uix/scatterlayout.py +93 -0
- kivy/uix/screenmanager.py +1275 -0
- kivy/uix/scrollview.py +1288 -0
- kivy/uix/settings.py +1343 -0
- kivy/uix/slider.py +421 -0
- kivy/uix/spinner.py +221 -0
- kivy/uix/splitter.py +430 -0
- kivy/uix/stacklayout.py +331 -0
- kivy/uix/stencilview.py +40 -0
- kivy/uix/switch.py +122 -0
- kivy/uix/tabbedpanel.py +880 -0
- kivy/uix/textinput.py +4049 -0
- kivy/uix/togglebutton.py +37 -0
- kivy/uix/treeview.py +665 -0
- kivy/uix/video.py +302 -0
- kivy/uix/videoplayer.py +697 -0
- kivy/uix/vkeyboard.py +879 -0
- kivy/uix/widget.py +1629 -0
- kivy/utils.py +550 -0
- kivy/vector.py +412 -0
- kivy/weakmethod.py +72 -0
kivy/parser.py
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Parser utilities
|
|
3
|
+
================
|
|
4
|
+
|
|
5
|
+
Helper functions used for CSS parsing.
|
|
6
|
+
'''
|
|
7
|
+
|
|
8
|
+
__all__ = ('parse_color', 'parse_int', 'parse_float',
|
|
9
|
+
'parse_string', 'parse_bool', 'parse_int2',
|
|
10
|
+
'parse_float4', 'parse_filename')
|
|
11
|
+
|
|
12
|
+
import re
|
|
13
|
+
from kivy.logger import Logger
|
|
14
|
+
from kivy.resources import resource_find
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ColorException(Exception):
|
|
18
|
+
pass
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def parse_filename(filename):
|
|
22
|
+
'''Parse a filename and search for it using `resource_find()`.
|
|
23
|
+
If found, the resource path is returned, otherwise return the unmodified
|
|
24
|
+
filename (as specified by the caller).'''
|
|
25
|
+
filename = parse_string(filename)
|
|
26
|
+
result = resource_find(filename)
|
|
27
|
+
if result is None:
|
|
28
|
+
Logger.error('Resource: unable to find <%s>' % filename)
|
|
29
|
+
return result or filename
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def color_error(text):
|
|
33
|
+
# show warning and return a sane value
|
|
34
|
+
Logger.warning(text)
|
|
35
|
+
return (0, 0, 0, 1)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def parse_color(text):
|
|
39
|
+
'''Parse a string to a kivy color. Supported formats:
|
|
40
|
+
|
|
41
|
+
* rgb(r, g, b)
|
|
42
|
+
* rgba(r, g, b, a)
|
|
43
|
+
* rgb
|
|
44
|
+
* rgba
|
|
45
|
+
* rrggbb
|
|
46
|
+
* rrggbbaa
|
|
47
|
+
|
|
48
|
+
For hexadecimal values, you case also use:
|
|
49
|
+
|
|
50
|
+
* #rgb
|
|
51
|
+
* #rgba
|
|
52
|
+
* #rrggbb
|
|
53
|
+
* #rrggbbaa
|
|
54
|
+
'''
|
|
55
|
+
value = [1, 1, 1, 1]
|
|
56
|
+
if text.startswith('rgb'):
|
|
57
|
+
res = re.match(r'rgba?\((.*)\)', text)
|
|
58
|
+
if res:
|
|
59
|
+
try:
|
|
60
|
+
# default r/g/b values to 1 if greater than 255 else x/255
|
|
61
|
+
value = [1 if int(x) > 255. else (int(x) / 255.)
|
|
62
|
+
for x in re.split(', ?', res.groups()[0])]
|
|
63
|
+
if len(value) < 3:
|
|
64
|
+
# in case of invalid input like rgb()/rgb(r)/rgb(r, g)
|
|
65
|
+
raise ValueError
|
|
66
|
+
except ValueError:
|
|
67
|
+
return color_error('ColorParser: Invalid color for %r' % text)
|
|
68
|
+
except AttributeError:
|
|
69
|
+
return color_error('ColorParser: Invalid color for %r' % text)
|
|
70
|
+
else:
|
|
71
|
+
return color_error('ColorParser: Invalid color for %r' % text)
|
|
72
|
+
if len(value) == 3:
|
|
73
|
+
value.append(1.)
|
|
74
|
+
elif len(text):
|
|
75
|
+
res = text
|
|
76
|
+
if text[0] == '#':
|
|
77
|
+
res = text[1:]
|
|
78
|
+
lres = len(res)
|
|
79
|
+
if lres == 3 or lres == 4:
|
|
80
|
+
res = ''.join([x + x for x in res])
|
|
81
|
+
elif lres != 6 and lres != 8:
|
|
82
|
+
# raise ColorException('Invalid color format for %r' % text)
|
|
83
|
+
return color_error(
|
|
84
|
+
'ColorParser: Invalid color format for %r' % text)
|
|
85
|
+
try:
|
|
86
|
+
value = [int(res[i:i + 2], 16) / 255.
|
|
87
|
+
for i in range(0, len(res), 2)]
|
|
88
|
+
except ValueError:
|
|
89
|
+
return color_error('ColorParser: Invalid color for %r' % text)
|
|
90
|
+
if lres == 6 or lres == 3:
|
|
91
|
+
value.append(1.)
|
|
92
|
+
return value
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def parse_bool(text):
|
|
96
|
+
'''Parse a string to a boolean, ignoring case. "true"/"1" is True,
|
|
97
|
+
"false"/"0" is False. Anything else throws an exception.'''
|
|
98
|
+
if text.lower() in ('true', '1'):
|
|
99
|
+
return True
|
|
100
|
+
elif text.lower() in ('false', '0'):
|
|
101
|
+
return False
|
|
102
|
+
raise Exception('Invalid boolean: %s' % text)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def parse_string(text):
|
|
106
|
+
'''Parse a string to a string (removing single and double quotes).'''
|
|
107
|
+
if len(text) >= 2 and text[0] in ('"', "'") and text[-1] in ('"', "'"):
|
|
108
|
+
text = text[1:-1]
|
|
109
|
+
return text.strip()
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def parse_int2(text):
|
|
113
|
+
'''Parse a string to a list of exactly 2 integers.
|
|
114
|
+
|
|
115
|
+
>>> print(parse_int2("12 54"))
|
|
116
|
+
12, 54
|
|
117
|
+
|
|
118
|
+
'''
|
|
119
|
+
texts = [x for x in text.split(' ') if x.strip() != '']
|
|
120
|
+
value = list(map(parse_int, texts))
|
|
121
|
+
if len(value) < 1:
|
|
122
|
+
raise Exception('Invalid int2 format: %s' % text)
|
|
123
|
+
elif len(value) == 1:
|
|
124
|
+
return [value[0], value[0]]
|
|
125
|
+
elif len(value) > 2:
|
|
126
|
+
raise Exception('Too many values in %s: %s' % (text, str(value)))
|
|
127
|
+
return value
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def parse_float4(text):
|
|
131
|
+
'''Parse a string to a list of exactly 4 floats.
|
|
132
|
+
|
|
133
|
+
>>> parse_float4('54 87. 35 0')
|
|
134
|
+
54, 87., 35, 0
|
|
135
|
+
|
|
136
|
+
'''
|
|
137
|
+
texts = [x for x in text.split(' ') if x.strip() != '']
|
|
138
|
+
value = list(map(parse_float, texts))
|
|
139
|
+
if len(value) < 1:
|
|
140
|
+
raise Exception('Invalid float4 format: %s' % text)
|
|
141
|
+
elif len(value) == 1:
|
|
142
|
+
return [value[0] for x in range(4)]
|
|
143
|
+
elif len(value) == 2:
|
|
144
|
+
return [value[0], value[1], value[0], value[1]]
|
|
145
|
+
elif len(value) == 3:
|
|
146
|
+
# ambiguous case!
|
|
147
|
+
return [value[0], value[1], value[0], value[2]]
|
|
148
|
+
elif len(value) > 4:
|
|
149
|
+
raise Exception('Too many values in %s' % text)
|
|
150
|
+
return value
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
parse_int = int
|
|
154
|
+
parse_float = float
|
kivy/resources.py
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Resources management
|
|
3
|
+
====================
|
|
4
|
+
|
|
5
|
+
Resource management can be a pain if you have multiple paths and projects.
|
|
6
|
+
Kivy offers 2 functions for searching for specific resources across a list
|
|
7
|
+
of paths.
|
|
8
|
+
|
|
9
|
+
Resource lookup
|
|
10
|
+
---------------
|
|
11
|
+
|
|
12
|
+
When Kivy looks for a resource e.g. an image or a kv file, it searches through
|
|
13
|
+
a predetermined set of folders. You can modify this folder list using the
|
|
14
|
+
:meth:`resource_add_path` and :meth:`resource_remove_path` functions.
|
|
15
|
+
|
|
16
|
+
Customizing Kivy
|
|
17
|
+
----------------
|
|
18
|
+
|
|
19
|
+
These functions can also be helpful if you want to replace standard Kivy
|
|
20
|
+
resources with your own. For example, if you wish to customize or re-style
|
|
21
|
+
Kivy, you can force your *style.kv* or *data/defaulttheme-0.png* files to be
|
|
22
|
+
used in preference to the defaults simply by adding the path to your preferred
|
|
23
|
+
alternatives via the :meth:`resource_add_path` method.
|
|
24
|
+
|
|
25
|
+
As almost all Kivy resources are looked up using the :meth:`resource_find`, so
|
|
26
|
+
you can use this approach to add fonts and keyboard layouts and to replace
|
|
27
|
+
images and icons.
|
|
28
|
+
|
|
29
|
+
'''
|
|
30
|
+
|
|
31
|
+
__all__ = ('resource_find', 'resource_add_path', 'resource_remove_path')
|
|
32
|
+
|
|
33
|
+
from os.path import join, dirname, exists, abspath
|
|
34
|
+
from kivy import kivy_data_dir
|
|
35
|
+
from kivy.cache import Cache
|
|
36
|
+
from kivy.utils import platform
|
|
37
|
+
from kivy.logger import Logger
|
|
38
|
+
import sys
|
|
39
|
+
import os
|
|
40
|
+
import kivy
|
|
41
|
+
|
|
42
|
+
resource_paths = ['.', dirname(sys.argv[0])]
|
|
43
|
+
if platform == 'ios':
|
|
44
|
+
resource_paths += [join(dirname(sys.argv[0]), 'YourApp')]
|
|
45
|
+
resource_paths += [dirname(kivy.__file__), join(kivy_data_dir, '..')]
|
|
46
|
+
|
|
47
|
+
Cache.register('kv.resourcefind', timeout=60)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def resource_find(filename, use_cache=("KIVY_DOC_INCLUDE" not in os.environ)):
|
|
51
|
+
'''Search for a resource in the list of paths.
|
|
52
|
+
Use resource_add_path to add a custom path to the search.
|
|
53
|
+
By default, results are cached for 60 seconds.
|
|
54
|
+
This can be disabled using use_cache=False.
|
|
55
|
+
|
|
56
|
+
.. versionchanged:: 2.1.0
|
|
57
|
+
`use_cache` parameter added and made True by default.
|
|
58
|
+
'''
|
|
59
|
+
if not filename:
|
|
60
|
+
return
|
|
61
|
+
found_filename = None
|
|
62
|
+
if use_cache:
|
|
63
|
+
found_filename = Cache.get('kv.resourcefind', filename)
|
|
64
|
+
if found_filename:
|
|
65
|
+
return found_filename
|
|
66
|
+
if filename[:8] == 'atlas://':
|
|
67
|
+
found_filename = filename
|
|
68
|
+
else:
|
|
69
|
+
abspath_filename = abspath(filename)
|
|
70
|
+
if exists(abspath_filename):
|
|
71
|
+
found_filename = abspath(filename)
|
|
72
|
+
else:
|
|
73
|
+
for path in reversed(resource_paths):
|
|
74
|
+
abspath_filename = abspath(join(path, filename))
|
|
75
|
+
if exists(abspath_filename):
|
|
76
|
+
found_filename = abspath_filename
|
|
77
|
+
break
|
|
78
|
+
if not found_filename and filename.startswith("data:"):
|
|
79
|
+
found_filename = filename
|
|
80
|
+
if use_cache and found_filename:
|
|
81
|
+
Cache.append('kv.resourcefind', filename, found_filename)
|
|
82
|
+
return found_filename
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def resource_add_path(path):
|
|
86
|
+
'''Add a custom path to search in.
|
|
87
|
+
'''
|
|
88
|
+
if path in resource_paths:
|
|
89
|
+
return
|
|
90
|
+
Logger.debug('Resource: add <%s> in path list' % path)
|
|
91
|
+
resource_paths.append(path)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def resource_remove_path(path):
|
|
95
|
+
'''Remove a search path.
|
|
96
|
+
|
|
97
|
+
.. versionadded:: 1.0.8
|
|
98
|
+
'''
|
|
99
|
+
if path not in resource_paths:
|
|
100
|
+
return
|
|
101
|
+
Logger.debug('Resource: remove <%s> from path list' % path)
|
|
102
|
+
resource_paths.remove(path)
|
kivy/storage/__init__.py
ADDED
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Storage
|
|
3
|
+
=======
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 1.7.0
|
|
6
|
+
|
|
7
|
+
.. warning::
|
|
8
|
+
|
|
9
|
+
This module is still experimental, and the API is subject to change in a
|
|
10
|
+
future version.
|
|
11
|
+
|
|
12
|
+
Usage
|
|
13
|
+
-----
|
|
14
|
+
|
|
15
|
+
The idea behind the Storage module is to be able to load/store any number of
|
|
16
|
+
key-value pairs via an indexed key. The default model is abstract so you
|
|
17
|
+
cannot use it directly. We provide some implementations such as:
|
|
18
|
+
|
|
19
|
+
- :class:`kivy.storage.dictstore.DictStore`: use a python dict as a store
|
|
20
|
+
- :class:`kivy.storage.jsonstore.JsonStore`: use a
|
|
21
|
+
`JSON <https://en.wikipedia.org/wiki/JSON>`_ file as a store
|
|
22
|
+
- :class:`kivy.storage.redisstore.RedisStore`: use a `Redis <http://redis.io>`_
|
|
23
|
+
database with `redis-py <https://github.com/andymccurdy/redis-py>`_
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
Examples
|
|
27
|
+
--------
|
|
28
|
+
|
|
29
|
+
For example, let's use a JsonStore::
|
|
30
|
+
|
|
31
|
+
from kivy.storage.jsonstore import JsonStore
|
|
32
|
+
|
|
33
|
+
store = JsonStore('hello.json')
|
|
34
|
+
|
|
35
|
+
# put some values
|
|
36
|
+
store.put('tito', name='Mathieu', org='kivy')
|
|
37
|
+
store.put('tshirtman', name='Gabriel', age=27)
|
|
38
|
+
|
|
39
|
+
# using the same index key erases all previously added key-value pairs
|
|
40
|
+
store.put('tito', name='Mathieu', age=30)
|
|
41
|
+
|
|
42
|
+
# get a value using a index key and key
|
|
43
|
+
print('tito is', store.get('tito')['age'])
|
|
44
|
+
|
|
45
|
+
# or guess the key/entry for a part of the key
|
|
46
|
+
for item in store.find(name='Gabriel'):
|
|
47
|
+
print('tshirtmans index key is', item[0])
|
|
48
|
+
print('his key value pairs are', str(item[1]))
|
|
49
|
+
|
|
50
|
+
Because the data is persistent, you can check later to see if the key exists::
|
|
51
|
+
|
|
52
|
+
from kivy.storage.jsonstore import JsonStore
|
|
53
|
+
|
|
54
|
+
store = JsonStore('hello.json')
|
|
55
|
+
if store.exists('tito'):
|
|
56
|
+
print('tite exists:', store.get('tito'))
|
|
57
|
+
store.delete('tito')
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
Synchronous / Asynchronous API
|
|
61
|
+
------------------------------
|
|
62
|
+
|
|
63
|
+
All the standard methods (:meth:`~AbstractStore.get`,
|
|
64
|
+
:meth:`~AbstractStore.put` , :meth:`~AbstractStore.exists`,
|
|
65
|
+
:meth:`~AbstractStore.delete`, :meth:`~AbstractStore.find`) have an
|
|
66
|
+
asynchronous version.
|
|
67
|
+
|
|
68
|
+
For example, the *get* method has a `callback` parameter. If set, the
|
|
69
|
+
`callback` will be used to return the result to the user when available:
|
|
70
|
+
the request will be asynchronous. If the `callback` is None, then the
|
|
71
|
+
request will be synchronous and the result will be returned directly.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
Without callback (Synchronous API)::
|
|
75
|
+
|
|
76
|
+
entry = mystore.get('tito')
|
|
77
|
+
print('tito =', entry)
|
|
78
|
+
|
|
79
|
+
With callback (Asynchronous API)::
|
|
80
|
+
|
|
81
|
+
def my_callback(store, key, result):
|
|
82
|
+
print('the key', key, 'has a value of', result)
|
|
83
|
+
mystore.get('plop', callback=my_callback)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
The callback signature (for almost all methods) is::
|
|
87
|
+
|
|
88
|
+
def callback(store, key, result):
|
|
89
|
+
"""
|
|
90
|
+
store: the `Store` instance currently used.
|
|
91
|
+
key: the key sought for.
|
|
92
|
+
result: the result of the lookup for the key.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
Synchronous container type
|
|
97
|
+
--------------------------
|
|
98
|
+
|
|
99
|
+
The storage API emulates the container type for the synchronous API::
|
|
100
|
+
|
|
101
|
+
store = JsonStore('hello.json')
|
|
102
|
+
|
|
103
|
+
# original: store.get('tito')
|
|
104
|
+
store['tito']
|
|
105
|
+
|
|
106
|
+
# original: store.put('tito', name='Mathieu')
|
|
107
|
+
store['tito'] = {'name': 'Mathieu'}
|
|
108
|
+
|
|
109
|
+
# original: store.delete('tito')
|
|
110
|
+
del store['tito']
|
|
111
|
+
|
|
112
|
+
# original: store.count()
|
|
113
|
+
len(store)
|
|
114
|
+
|
|
115
|
+
# original: store.exists('tito')
|
|
116
|
+
'tito' in store
|
|
117
|
+
|
|
118
|
+
# original: for key in store.keys()
|
|
119
|
+
for key in store:
|
|
120
|
+
pass
|
|
121
|
+
|
|
122
|
+
'''
|
|
123
|
+
|
|
124
|
+
from kivy.clock import Clock
|
|
125
|
+
from kivy.event import EventDispatcher
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class AbstractStore(EventDispatcher):
|
|
129
|
+
'''Abstract class used to implement a Store
|
|
130
|
+
'''
|
|
131
|
+
|
|
132
|
+
def __init__(self, **kwargs):
|
|
133
|
+
super(AbstractStore, self).__init__(**kwargs)
|
|
134
|
+
self.store_load()
|
|
135
|
+
|
|
136
|
+
def exists(self, key):
|
|
137
|
+
'''Check if a key exists in the store.
|
|
138
|
+
'''
|
|
139
|
+
return self.store_exists(key)
|
|
140
|
+
|
|
141
|
+
def async_exists(self, callback, key):
|
|
142
|
+
'''Asynchronous version of :meth:`exists`.
|
|
143
|
+
|
|
144
|
+
:Callback arguments:
|
|
145
|
+
`store`: :class:`AbstractStore` instance
|
|
146
|
+
Store instance
|
|
147
|
+
`key`: string
|
|
148
|
+
Name of the key to search for
|
|
149
|
+
`result`: boo
|
|
150
|
+
Result of the query, None if any error
|
|
151
|
+
'''
|
|
152
|
+
self._schedule(self.store_exists_async,
|
|
153
|
+
key=key, callback=callback)
|
|
154
|
+
|
|
155
|
+
def get(self, key):
|
|
156
|
+
'''Get the key-value pairs stored at `key`. If the key is not found, a
|
|
157
|
+
`KeyError` exception will be thrown.
|
|
158
|
+
'''
|
|
159
|
+
return self.store_get(key)
|
|
160
|
+
|
|
161
|
+
def async_get(self, callback, key):
|
|
162
|
+
'''Asynchronous version of :meth:`get`.
|
|
163
|
+
|
|
164
|
+
:Callback arguments:
|
|
165
|
+
`store`: :class:`AbstractStore` instance
|
|
166
|
+
Store instance
|
|
167
|
+
`key`: string
|
|
168
|
+
Name of the key to search for
|
|
169
|
+
`result`: dict
|
|
170
|
+
Result of the query, None if any error
|
|
171
|
+
'''
|
|
172
|
+
self._schedule(self.store_get_async, key=key, callback=callback)
|
|
173
|
+
|
|
174
|
+
def put(self, key, **values):
|
|
175
|
+
'''Put new key-value pairs (given in *values*) into the storage. Any
|
|
176
|
+
existing key-value pairs will be removed.
|
|
177
|
+
'''
|
|
178
|
+
need_sync = self.store_put(key, values)
|
|
179
|
+
if need_sync:
|
|
180
|
+
self.store_sync()
|
|
181
|
+
return need_sync
|
|
182
|
+
|
|
183
|
+
def async_put(self, callback, key, **values):
|
|
184
|
+
'''Asynchronous version of :meth:`put`.
|
|
185
|
+
|
|
186
|
+
:Callback arguments:
|
|
187
|
+
`store`: :class:`AbstractStore` instance
|
|
188
|
+
Store instance
|
|
189
|
+
`key`: string
|
|
190
|
+
Name of the key to search for
|
|
191
|
+
`result`: bool
|
|
192
|
+
Indicate True if the storage has been updated, or False if
|
|
193
|
+
nothing has been done (no changes). None if any error.
|
|
194
|
+
'''
|
|
195
|
+
self._schedule(self.store_put_async,
|
|
196
|
+
key=key, value=values, callback=callback)
|
|
197
|
+
|
|
198
|
+
def delete(self, key):
|
|
199
|
+
'''Delete a key from the storage. If the key is not found, a `KeyError`
|
|
200
|
+
exception will be thrown.'''
|
|
201
|
+
need_sync = self.store_delete(key)
|
|
202
|
+
if need_sync:
|
|
203
|
+
self.store_sync()
|
|
204
|
+
return need_sync
|
|
205
|
+
|
|
206
|
+
def async_delete(self, callback, key):
|
|
207
|
+
'''Asynchronous version of :meth:`delete`.
|
|
208
|
+
|
|
209
|
+
:Callback arguments:
|
|
210
|
+
`store`: :class:`AbstractStore` instance
|
|
211
|
+
Store instance
|
|
212
|
+
`key`: string
|
|
213
|
+
Name of the key to search for
|
|
214
|
+
`result`: bool
|
|
215
|
+
Indicate True if the storage has been updated, or False if
|
|
216
|
+
nothing has been done (no changes). None if any error.
|
|
217
|
+
'''
|
|
218
|
+
self._schedule(self.store_delete_async, key=key,
|
|
219
|
+
callback=callback)
|
|
220
|
+
|
|
221
|
+
def find(self, **filters):
|
|
222
|
+
'''Return all the entries matching the filters. The entries are
|
|
223
|
+
returned through a generator as a list of (key, entry) pairs
|
|
224
|
+
where *entry* is a dict of key-value pairs ::
|
|
225
|
+
|
|
226
|
+
for key, entry in store.find(name='Mathieu'):
|
|
227
|
+
print('key:', key, ', entry:', entry)
|
|
228
|
+
|
|
229
|
+
Because it's a generator, you cannot directly use it as a list. You can
|
|
230
|
+
do::
|
|
231
|
+
|
|
232
|
+
# get all the (key, entry) availables
|
|
233
|
+
entries = list(store.find(name='Mathieu'))
|
|
234
|
+
# get only the entry from (key, entry)
|
|
235
|
+
entries = list((x[1] for x in store.find(name='Mathieu')))
|
|
236
|
+
'''
|
|
237
|
+
return self.store_find(filters)
|
|
238
|
+
|
|
239
|
+
def async_find(self, callback, **filters):
|
|
240
|
+
'''Asynchronous version of :meth:`find`.
|
|
241
|
+
|
|
242
|
+
The callback will be called for each entry in the result.
|
|
243
|
+
|
|
244
|
+
:Callback arguments:
|
|
245
|
+
`store`: :class:`AbstractStore` instance
|
|
246
|
+
Store instance
|
|
247
|
+
`key`: string
|
|
248
|
+
Name of the key to search for, or None if we reach the end of
|
|
249
|
+
the results
|
|
250
|
+
`result`: bool
|
|
251
|
+
Indicate True if the storage has been updated, or False if
|
|
252
|
+
nothing has been done (no changes). None if any error.
|
|
253
|
+
'''
|
|
254
|
+
self._schedule(self.store_find_async,
|
|
255
|
+
callback=callback, filters=filters)
|
|
256
|
+
|
|
257
|
+
def keys(self):
|
|
258
|
+
'''Return a list of all the keys in the storage.
|
|
259
|
+
'''
|
|
260
|
+
return self.store_keys()
|
|
261
|
+
|
|
262
|
+
def async_keys(self, callback):
|
|
263
|
+
'''Asynchronously return all the keys in the storage.
|
|
264
|
+
'''
|
|
265
|
+
self._schedule(self.store_keys_async, callback=callback)
|
|
266
|
+
|
|
267
|
+
def count(self):
|
|
268
|
+
'''Return the number of entries in the storage.
|
|
269
|
+
'''
|
|
270
|
+
return self.store_count()
|
|
271
|
+
|
|
272
|
+
def async_count(self, callback):
|
|
273
|
+
'''Asynchronously return the number of entries in the storage.
|
|
274
|
+
'''
|
|
275
|
+
self._schedule(self.store_count_async, callback=callback)
|
|
276
|
+
|
|
277
|
+
def clear(self):
|
|
278
|
+
'''Wipe the whole storage.
|
|
279
|
+
'''
|
|
280
|
+
return self.store_clear()
|
|
281
|
+
|
|
282
|
+
def async_clear(self, callback):
|
|
283
|
+
'''Asynchronous version of :meth:`clear`.
|
|
284
|
+
'''
|
|
285
|
+
self._schedule(self.store_clear_async, callback=callback)
|
|
286
|
+
|
|
287
|
+
#
|
|
288
|
+
# Operators
|
|
289
|
+
#
|
|
290
|
+
|
|
291
|
+
def __setitem__(self, key, values):
|
|
292
|
+
if not isinstance(values, dict):
|
|
293
|
+
raise Exception('Only dict are accepted for the store[key] = dict')
|
|
294
|
+
self.put(key, **values)
|
|
295
|
+
|
|
296
|
+
def __getitem__(self, key):
|
|
297
|
+
return self.get(key)
|
|
298
|
+
|
|
299
|
+
def __delitem__(self, key):
|
|
300
|
+
return self.keys()
|
|
301
|
+
|
|
302
|
+
def __contains__(self, key):
|
|
303
|
+
return self.exists(key)
|
|
304
|
+
|
|
305
|
+
def __len__(self):
|
|
306
|
+
return self.count()
|
|
307
|
+
|
|
308
|
+
def __iter__(self):
|
|
309
|
+
for key in self.keys():
|
|
310
|
+
yield key
|
|
311
|
+
|
|
312
|
+
#
|
|
313
|
+
# Used for implementation
|
|
314
|
+
#
|
|
315
|
+
|
|
316
|
+
def store_load(self):
|
|
317
|
+
pass
|
|
318
|
+
|
|
319
|
+
def store_sync(self):
|
|
320
|
+
pass
|
|
321
|
+
|
|
322
|
+
def store_get(self, key):
|
|
323
|
+
raise NotImplementedError
|
|
324
|
+
|
|
325
|
+
def store_put(self, key, value):
|
|
326
|
+
raise NotImplementedError
|
|
327
|
+
|
|
328
|
+
def store_exists(self, key):
|
|
329
|
+
raise NotImplementedError
|
|
330
|
+
|
|
331
|
+
def store_delete(self, key):
|
|
332
|
+
raise NotImplementedError
|
|
333
|
+
|
|
334
|
+
def store_find(self, filters):
|
|
335
|
+
return []
|
|
336
|
+
|
|
337
|
+
def store_keys(self):
|
|
338
|
+
return []
|
|
339
|
+
|
|
340
|
+
def store_count(self):
|
|
341
|
+
return len(self.store_keys())
|
|
342
|
+
|
|
343
|
+
def store_clear(self):
|
|
344
|
+
for key in self.store_keys():
|
|
345
|
+
self.store_delete(key)
|
|
346
|
+
self.store_sync()
|
|
347
|
+
|
|
348
|
+
def store_get_async(self, key, callback):
|
|
349
|
+
try:
|
|
350
|
+
value = self.store_get(key)
|
|
351
|
+
callback(self, key, value)
|
|
352
|
+
except KeyError:
|
|
353
|
+
callback(self, key, None)
|
|
354
|
+
|
|
355
|
+
def store_put_async(self, key, value, callback):
|
|
356
|
+
try:
|
|
357
|
+
value = self.put(key, **value)
|
|
358
|
+
callback(self, key, value)
|
|
359
|
+
except:
|
|
360
|
+
callback(self, key, None)
|
|
361
|
+
|
|
362
|
+
def store_exists_async(self, key, callback):
|
|
363
|
+
try:
|
|
364
|
+
value = self.store_exists(key)
|
|
365
|
+
callback(self, key, value)
|
|
366
|
+
except:
|
|
367
|
+
callback(self, key, None)
|
|
368
|
+
|
|
369
|
+
def store_delete_async(self, key, callback):
|
|
370
|
+
try:
|
|
371
|
+
value = self.delete(key)
|
|
372
|
+
callback(self, key, value)
|
|
373
|
+
except:
|
|
374
|
+
callback(self, key, None)
|
|
375
|
+
|
|
376
|
+
def store_find_async(self, filters, callback):
|
|
377
|
+
for key, entry in self.store_find(filters):
|
|
378
|
+
callback(self, filters, key, entry)
|
|
379
|
+
callback(self, filters, None, None)
|
|
380
|
+
|
|
381
|
+
def store_count_async(self, callback):
|
|
382
|
+
try:
|
|
383
|
+
value = self.store_count()
|
|
384
|
+
callback(self, value)
|
|
385
|
+
except:
|
|
386
|
+
callback(self, 0)
|
|
387
|
+
|
|
388
|
+
def store_keys_async(self, callback):
|
|
389
|
+
try:
|
|
390
|
+
keys = self.store_keys()
|
|
391
|
+
callback(self, keys)
|
|
392
|
+
except:
|
|
393
|
+
callback(self, [])
|
|
394
|
+
|
|
395
|
+
def store_clear_async(self, callback):
|
|
396
|
+
self.store_clear()
|
|
397
|
+
callback(self)
|
|
398
|
+
|
|
399
|
+
#
|
|
400
|
+
# Privates
|
|
401
|
+
#
|
|
402
|
+
|
|
403
|
+
def _schedule(self, cb, **kwargs):
|
|
404
|
+
# XXX not entirely sure about the best value (0 or -1).
|
|
405
|
+
Clock.schedule_once(lambda dt: cb(**kwargs), 0)
|