Skip to content

Instantly share code, notes, and snippets.

@skimtiyaz
Last active February 15, 2024 16:16
Show Gist options
  • Select an option

  • Save skimtiyaz/66befb07892b9e879028014744bae93c to your computer and use it in GitHub Desktop.

Select an option

Save skimtiyaz/66befb07892b9e879028014744bae93c to your computer and use it in GitHub Desktop.
text search app
[app]
# (str) Title of your application
title = Phrase searcher
# (str) Package name
package.name = phrasesearcher
# (str) Package domain (needed for android/ios packaging)
package.domain = org.kivymd
# (str) Source code where the main.py live
source.dir = .
# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,jpeg,ttf,kv
# (list) List of inclusions using pattern matching
source.include_patterns = assets/*
# (str) Application versioning (method 2)
version.regex = __version__ = ['"](.*)['"]
version.filename = %(source.dir)s/../../kivymd/__init__.py
android.numeric_version = 1
# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy==2.0.0,https://github.com/kivymd/KivyMD/archive/master.zip,sdl2_ttf==2.0.15
# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
requirements.source.kivymd = ../../kivymd
# (str) Presplash of the application
presplash.filename = %(source.dir)s/assets/images/presplash.png
# (str) Icon of the application
icon.filename = %(source.dir)s/assets/images/search_icon.png
# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
orientation = portrait
# (bool) Indicate if the application should be fullscreen or not
fullscreen = 0
# (string) Presplash background color (for new android toolchain)
android.presplash_color = #ebcfe1
# (list) Permissions
#android.permissions = INTERNET
# (int) Target Android API, should be as high as possible.
android.api = 28
# (int) Minimum API your APK will support.
android.minapi = 21
# (str) Android NDK version to use
android.ndk = 19b
# (bool) If True, then skip trying to update the Android sdk
# This can be useful to avoid excess Internet downloads or save time
# when an update is due and you just want to test/build your package
android.skip_update = False
# (bool) If True, then automatically accept SDK license
# agreements. This is intended for automation only. If set to False,
# the default, you will be shown the license when first running
# buildozer.
android.accept_sdk_license = True
# (str) Android logcat filters to use
# android.logcat_filters = *:S python:D
# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64
android.arch = armeabi-v7a
[buildozer]
# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2
# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
warn_on_root = 0
# (str) Path to build artifact storage, absolute or relative to spec file
build_dir = /home/alex/.buildozer
# (str) Path to build output (i.e. .apk, .ipa) storage
bin_dir = ./bin
import timeit
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.core.window import Window
from kivymd.app import MDApp
from ggnumber import PHRASE_FOR_SEARCH, SAMPLE_TEXT_FOR_BENCH, count_occurences_in_text
from kivymd.toast import toast
from kivymd.uix.filemanager import MDFileManager
class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
class SearchTextNavigationDrawer(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.screen = Builder.load_file('main.kv')
# Window.bind(on_keyboard=self.events)
# self.manager_open = False
# self.file_manager = MDFileManager(
# exit_manager=self.exit_manager,
# select_path=self.select_path,
# previous=True,
# )
def build(self):
# return Builder.load_string(KV)
# return Builder.load_file()
# self.screen.ids.onSearch.on_release = self.on_search
# self.screen.ids.file_manager.on_release = self.file_manager_open
# load defaulting text into MDTextField with id var1
self.screen.ids.var1.text = SAMPLE_TEXT_FOR_BENCH
# load defaulting searching phrase into MDTextField with id var2
self.screen.ids.var2.text = PHRASE_FOR_SEARCH
# self.screen.ids.text_field_error.bind(
# on_text_validate=self.set_error_message,
# on_focus=self.set_error_message,
# )
return self.screen
def on_search(self):
# var1 = self.screen.ids.var1.text
var1 = self.screen.ids.var1.text
var2 = self.screen.ids.var2.text
execution_time = timeit.default_timer() # in nanoseconds
ncount = count_occurences_in_text(var2, var1)
execution_time = timeit.default_timer() - execution_time
self.screen.ids.out.text = f"There is(are) {ncount} occurence(s). Execution time = {execution_time*1e6:.2f} ms";
# def file_manager_open(self):
# self.file_manager.show('/') # output manager to the screen
# self.manager_open = True
#
# def select_path(self, path):
# '''It will be called when you click on the file name
# or the catalog selection button.
#
# :type path: str;
# :param path: path to the selected directory or file;
# '''
#
# self.exit_manager()
# toast(path)
#
# def exit_manager(self, *args):
# '''Called when the user reaches the root of the directory tree.'''
#
# self.manager_open = False
# self.file_manager.close()
#
# def events(self, instance, keyboard, keycode, text, modifiers):
# '''Called when buttons are pressed on the mobile device.'''
#
# if keyboard in (1001, 27):
# if self.manager_open:
# self.file_manager.back()
# return True
SearchTextNavigationDrawer().run()
import timeit
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.core.window import Window
from kivymd.app import MDApp
from ggnumber import PHRASE_FOR_SEARCH, SAMPLE_TEXT_FOR_BENCH, count_occurences_in_text
from kivymd.toast import toast
from kivymd.uix.filemanager import MDFileManager
class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
class SearchTextNavigationDrawer(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.screen = Builder.load_file('main.kv')
# Window.bind(on_keyboard=self.events)
# self.manager_open = False
# self.file_manager = MDFileManager(
# exit_manager=self.exit_manager,
# select_path=self.select_path,
# previous=True,
# )
def build(self):
# return Builder.load_string(KV)
# return Builder.load_file()
# self.screen.ids.onSearch.on_release = self.on_search
# self.screen.ids.file_manager.on_release = self.file_manager_open
# load defaulting text into MDTextField with id var1
self.screen.ids.var1.text = SAMPLE_TEXT_FOR_BENCH
# load defaulting searching phrase into MDTextField with id var2
self.screen.ids.var2.text = PHRASE_FOR_SEARCH
# self.screen.ids.text_field_error.bind(
# on_text_validate=self.set_error_message,
# on_focus=self.set_error_message,
# )
return self.screen
def on_search(self):
# var1 = self.screen.ids.var1.text
var1 = self.screen.ids.var1.text
var2 = self.screen.ids.var2.text
execution_time = timeit.default_timer() # in nanoseconds
ncount = count_occurences_in_text(var2, var1)
execution_time = timeit.default_timer() - execution_time
self.screen.ids.out.text = f"There is(are) {ncount} occurence(s). Execution time = {execution_time*1e6:.2f} ms";
# def file_manager_open(self):
# self.file_manager.show('/') # output manager to the screen
# self.manager_open = True
#
# def select_path(self, path):
# '''It will be called when you click on the file name
# or the catalog selection button.
#
# :type path: str;
# :param path: path to the selected directory or file;
# '''
#
# self.exit_manager()
# toast(path)
#
# def exit_manager(self, *args):
# '''Called when the user reaches the root of the directory tree.'''
#
# self.manager_open = False
# self.file_manager.close()
#
# def events(self, instance, keyboard, keycode, text, modifiers):
# '''Called when buttons are pressed on the mobile device.'''
#
# if keyboard in (1001, 27):
# if self.manager_open:
# self.file_manager.back()
# return True
SearchTextNavigationDrawer().run()
import timeit
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.core.window import Window
from kivymd.app import MDApp
from ggnumber import PHRASE_FOR_SEARCH, SAMPLE_TEXT_FOR_BENCH, count_occurences_in_text
from kivymd.toast import toast
from kivymd.uix.filemanager import MDFileManager
class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
class SearchTextNavigationDrawer(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.screen = Builder.load_file('main.kv')
# Window.bind(on_keyboard=self.events)
# self.manager_open = False
# self.file_manager = MDFileManager(
# exit_manager=self.exit_manager,
# select_path=self.select_path,
# previous=True,
# )
def build(self):
# return Builder.load_string(KV)
# return Builder.load_file()
# self.screen.ids.onSearch.on_release = self.on_search
# self.screen.ids.file_manager.on_release = self.file_manager_open
# load defaulting text into MDTextField with id var1
self.screen.ids.var1.text = SAMPLE_TEXT_FOR_BENCH
# load defaulting searching phrase into MDTextField with id var2
self.screen.ids.var2.text = PHRASE_FOR_SEARCH
# self.screen.ids.text_field_error.bind(
# on_text_validate=self.set_error_message,
# on_focus=self.set_error_message,
# )
return self.screen
def on_search(self):
# var1 = self.screen.ids.var1.text
var1 = self.screen.ids.var1.text
var2 = self.screen.ids.var2.text
execution_time = timeit.default_timer() # in nanoseconds
ncount = count_occurences_in_text(var2, var1)
execution_time = timeit.default_timer() - execution_time
self.screen.ids.out.text = f"There is(are) {ncount} occurence(s). Execution time = {execution_time*1e6:.2f} ms";
# def file_manager_open(self):
# self.file_manager.show('/') # output manager to the screen
# self.manager_open = True
#
# def select_path(self, path):
# '''It will be called when you click on the file name
# or the catalog selection button.
#
# :type path: str;
# :param path: path to the selected directory or file;
# '''
#
# self.exit_manager()
# toast(path)
#
# def exit_manager(self, *args):
# '''Called when the user reaches the root of the directory tree.'''
#
# self.manager_open = False
# self.file_manager.close()
#
# def events(self, instance, keyboard, keycode, text, modifiers):
# '''Called when buttons are pressed on the mobile device.'''
#
# if keyboard in (1001, 27):
# if self.manager_open:
# self.file_manager.back()
# return True
SearchTextNavigationDrawer().run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment