# Locates more items/views/elements on an Android device than similar Android automation packages by combining ADB's dumpsys activity/uiautomator
```python
$pip install androdf
from androdf import AndroDF
andf = AndroDF(
adb_path="C:\\Users\\Gamer\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe",
deviceserial="localhost:5895",
screenshotfolder="f:\\compare_android", # screenshots will be saved here
max_variation_percent_x=10, # used for one of the click functions, to not click exactly in the center - more information below
max_variation_percent_y=10, # used for one of the click functions, to not click exactly in the center
loung_touch_delay=(1000, 1500), # with this settings longtouch will take somewhere between 1 and 1,5 seconds
swipe_variation_startx=10, # swipe coordinate variations in percent
swipe_variation_endx=10,
swipe_variation_starty=10,
swipe_variation_endy=10,
sdcard="/storage/emulated/0/", # sdcard will be used if you use the sendevent methods, don’t pass a symlink - more information below
tmp_folder_on_sd_card="AUTOMAT", # this folder will be created in the sdcard folder for using sendevent actions
bluestacks_divider=32767, # coordinates must be recalculated for BlueStacks https://stackoverflow.com/a/73733261/15096247 when using sendevent
)
andf.get_df_from_activity(with_screenshot=False) # executes dumpsys activity top -c and converts the relative coordinates to absolute coordinates
andf.get_df_from_view(with_screenshot=False) # dataframe from uiautomator xml dump, extracts all results
df_activities,df_uiautomator,df_merged = andf.get_all_results() # Returns copies of the 3 DataFrames containing the results # df_merged will be empty
andf.get_screenshot()
andf.get_dfs_from_view_and_activity(with_screenshot=True) # DataFrame will contain screenshots
andf.get_dfs_from_view_and_activity(with_screenshot=True) # df_merged will contain all data from both DataFrames
df_activities1,df_uiautomator1,df_merged1 = andf.get_all_results()
```
#### Let’s compare the results with the ones from https://github.com/dtmilano/AndroidViewClient (Uiautomator backend)
Don't get me wrong, AndroidViewClient is a wonderful tool and I have been using it for a long time, but it works on BlueStacks (most important for me) only with the Uiautomator backend (at least on my PC), and unfortunately, it doesn't always identify all items https://github.com/dtmilano/AndroidViewClient/issues/305. As far as I know, the more recent project https://github.com/dtmilano/CulebraTester2-public identifies more views.
### Bluestacks start screen
<img src="https://github.com/hansalemaos/screenshots/raw/main/df_screen01.png"/>
```python
vcd = vc.dump(-1)
times_ = timest()
for ini, _ in enumerate(vcd):
outputfile = os.path.join(f"f:\\compare_android\\2\\{times_}", str(ini) + '.png')
touch(outputfile)
_.writeImageToFile(outputfile)
```
#### Results AndroidViewClient
<img src="https://github.com/hansalemaos/screenshots/raw/main/vc01.png"/>
```python
df_activities1.dropna(subset='aa_screenshot').ff_aa_save_screenshot.apply(lambda x:x())
```
#### Results df_activities1
<img src="https://github.com/hansalemaos/screenshots/raw/main/df_act01.png"/>
```python
df_uiautomator1.dropna(subset='bb_screenshot').ff_bb_save_screenshot.apply(lambda x: x())
```
#### Results df_uiautomator1
<img src="https://github.com/hansalemaos/screenshots/raw/main/df_act02.png"/>
### Bluestacks settings
<img src="https://github.com/hansalemaos/screenshots/raw/main/df_screen02.png"/>
#### Results AndroidViewClient
<img src="https://github.com/hansalemaos/screenshots/raw/main/vc01_0.png"/>
#### Results df_activities1
<img src="https://github.com/hansalemaos/screenshots/raw/main/df_act01_0.png"/>
#### Results df_uiautomator1
<img src="https://github.com/hansalemaos/screenshots/raw/main/df_act02_0.png"/>
### All results in DataFrames
You can use the whole power of pandas.DataFrame.loc https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html to locate any item and easily call touch/swipe/longtouch methods that are stored in different columns of the DataFrame
<img src="https://github.com/hansalemaos/screenshots/raw/main/dfresults.png"/>
#### The DataFrame columns explained
```python
df_activities1.columns.to_list()
Out[9]: ['aa_area', 'aa_bounds', 'aa_center_x', 'aa_center_x_cropped', 'aa_center_y', 'aa_center_y_cropped', 'aa_class_name', 'aa_clickable', 'aa_complete_dump', 'aa_context_clickable', 'aa_cropped_x_end', 'aa_cropped_x_start', 'aa_cropped_y_end', 'aa_cropped_y_start', 'aa_depth', 'aa_drawn', 'aa_enabled', 'aa_focusable', 'aa_has_screenshot', 'aa_hashcode_hex', 'aa_hashcode_int', 'aa_height', 'aa_height_cropped', 'aa_id_information', 'aa_is_child', 'aa_long_clickable', 'aa_mID_hex', 'aa_mID_int', 'aa_old_index', 'aa_pflag_activated', 'aa_pflag_dirty_mask', 'aa_pflag_focused', 'aa_pflag_hovered', 'aa_pflag_invalidated', 'aa_pflag_is_root_namespace', 'aa_pflag_prepressed', 'aa_pflag_selected', 'aa_pure_id', 'aa_screenshot', 'aa_scrollbars_horizontal', 'aa_scrollbars_vertical', 'aa_shapely', 'aa_valid_square', 'aa_visibility', 'aa_width', 'aa_width_cropped', 'aa_x_end', 'aa_x_end_relative', 'aa_x_start', 'aa_x_start_relative', 'aa_y_end', 'aa_y_end_relative', 'aa_y_start', 'aa_y_start_relative', 'ee_aa_longtouch', 'ee_aa_longtouch_bs', 'ee_aa_longtouch_offset', 'ee_aa_longtouch_offset_bs', 'ee_aa_touch', 'ee_aa_touch_bs', 'ee_aa_touch_offset', 'ee_aa_touch_offset_bs', 'ff_aa_downswipe', 'ff_aa_save_screenshot', 'ff_aa_show_screenshot', 'ff_aa_tap_center_offset', 'ff_aa_tap_center_offset_long', 'ff_aa_tap_center_variation', 'ff_aa_tap_center_variation_long', 'ff_aa_tap_exact_center', 'ff_aa_tap_exact_center_long', 'ff_aa_upswipe', 'ff_show_parents', 'parent_000', 'parent_001', 'parent_002', 'parent_003', 'parent_004', 'parent_005', 'parent_006', 'parent_007', 'parent_008', 'parent_009', 'parent_010', 'parent_011']
df_uiautomator1.columns.to_list()
Out[10]: ['bb_area', 'bb_center_x', 'bb_center_y', 'bb_x_end', 'bb_y_end', 'bb_height', 'bb_x_start', 'bb_y_start', 'bb_width', 'bb_bounds', 'bb_checkable', 'bb_checked', 'bb_class', 'bb_clickable', 'bb_content_desc', 'bb_enabled', 'bb_focusable', 'bb_focused', 'bb_index', 'bb_keys_hierarchy', 'bb_long_clickable', 'bb_package', 'bb_password', 'bb_resource_id', 'bb_scrollable', 'bb_selected', 'bb_text', 'bb_pure_id', 'bb_screenshot', 'bb_old_index', 'bb_valid_square', 'bb_shapely', 'bb_cropped_x_start', 'bb_cropped_y_start', 'bb_cropped_x_end', 'bb_cropped_y_end', 'bb_width_cropped', 'bb_height_cropped', 'bb_center_x_cropped', 'bb_center_y_cropped', 'ff_bb_show_screenshot', 'ff_bb_save_screenshot', 'ff_bb_tap_center_offset', 'ff_bb_tap_exact_center', 'ff_bb_tap_center_variation', 'ff_bb_tap_center_offset_long', 'ff_bb_tap_exact_center_long', 'ff_bb_tap_center_variation_long', 'ff_bb_upswipe', 'ff_bb_downswipe', 'ee_bb_longtouch_offset', 'ee_bb_longtouch_offset_bs', 'ee_bb_touch_offset', 'ee_bb_touch_offset_bs', 'ee_bb_longtouch_bs', 'ee_bb_touch_bs', 'ee_bb_touch', 'ee_bb_longtouch']
```
#### The columns starting with aa_ or bb_ are self explaining, they contain data (height, width ...) to identify objects
#### The column prefix ee_ means that you can call functions which use sendevent (root access necessary)
- aa_ after ee_ stands for activity DataFrame
- bb_ after ee_ stands for uiautomator DataFrame (name difference (aa_/bb_) important for merging when calling andf.get_dfs_from_view_and_activity()
- the suffix _bs is only interesting for you if you use BlueStacks (like me)
```python
df_activities1.ee_aa_longtouch.iloc[28]() # longtouch on item 28
df_activities1.ee_aa_longtouch_bs.iloc[28]() # recalculated for bluestacks, won’t work against a “regular” Android Device https://stackoverflow.com/a/73733261/15096247
```
```python
df_activities1.ee_aa_longtouch_offset_bs.iloc[28](200,1) # x,y offset
df_activities1.ee_aa_longtouch_offset_bs.iloc[28](200,1) # x,y offset / recalculated for bluestacks
```
```python
df_activities1.ee_aa_touch_offset.iloc[28](100,1) # x,y offset
df_activities1.ee_aa_touch_offset_bs.iloc[28](100,1) # x,y offset / recalculated for bluestacks
```
```python
df_activities1.ee_aa_touch.iloc[28]()
df_activities1.ee_aa_touch_bs.iloc[28]() # recalculated for bluestacks
```
#### The column prefix ff_ means that the action is executed using adb shell input (root access not necessary)
```python
# swipes down (or up, depending on your interpretation) within the bounds of the item
df_activities1.ff_aa_downswipe.iloc[28]()
```
```python
# swipes up (or down, depending on your interpretation) within the bounds of the item
df_activities1.ff_aa_upswipe.iloc[28]()
```
```python
# save all screenshots to the defined folder (when you created the instance), subfolder with timestamp as name will be created for each new DataFrame
df_activities1.dropna(subset='aa_screenshot').ff_aa_save_screenshot.apply(lambda x:x())
```
```python
#show screenshot with cv2.imshow, window can be closed by pressing 'q'
df_activities1.ff_aa_show_screenshot.iloc[28]()
```
```python
df_activities1.ff_aa_tap_center_offset.iloc[28](1,20) # offset from the center of the found item - touch
df_activities1.ff_aa_tap_center_offset_long.iloc[28](1,20) # offset from the center of the found item - longtouch
df_activities1.ff_aa_tap_center_variation.iloc[28]()
df_activities1.ff_aa_tap_center_variation_long.iloc[28]()
df_activities1.ff_aa_tap_exact_center.iloc[28]()
df_activities1.ff_aa_tap_exact_center_long.iloc[28]()
```
```python
df_activities1.ff_show_parents.iloc[28]() # Returns a DataFrame with all parent items
```
Raw data
{
"_id": null,
"home_page": "https://github.com/hansalemaos/androdf",
"name": "androdf",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "uiautomator,dumpsys,adb,android,debugging,pandas,DataFrame,AndroidManifest,views,items,automation",
"author": "Johannes Fischer",
"author_email": "<aulasparticularesdealemaosp@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/5d/60/d845dd9cc92458c01ec97f5af0d772420cf79f418353df642cbbeee1d5e5/androdf-0.11.tar.gz",
"platform": null,
"description": "\n# Locates more items/views/elements on an Android device than similar Android automation packages by combining ADB's dumpsys activity/uiautomator \n\n\n\n\n\n```python\n\n$pip install androdf\n\nfrom androdf import AndroDF\n\nandf = AndroDF(\n\n adb_path=\"C:\\\\Users\\\\Gamer\\\\AppData\\\\Local\\\\Android\\\\Sdk\\\\platform-tools\\\\adb.exe\",\n\n deviceserial=\"localhost:5895\",\n\n screenshotfolder=\"f:\\\\compare_android\", # screenshots will be saved here \n\n max_variation_percent_x=10, # used for one of the click functions, to not click exactly in the center - more information below\n\n max_variation_percent_y=10, # used for one of the click functions, to not click exactly in the center\n\n loung_touch_delay=(1000, 1500), # with this settings longtouch will take somewhere between 1 and 1,5 seconds\n\n swipe_variation_startx=10, # swipe coordinate variations in percent \n\n swipe_variation_endx=10,\n\n swipe_variation_starty=10,\n\n swipe_variation_endy=10,\n\n sdcard=\"/storage/emulated/0/\", # sdcard will be used if you use the sendevent methods, don\u2019t pass a symlink - more information below\n\n tmp_folder_on_sd_card=\"AUTOMAT\", # this folder will be created in the sdcard folder for using sendevent actions\n\n bluestacks_divider=32767, # coordinates must be recalculated for BlueStacks https://stackoverflow.com/a/73733261/15096247 when using sendevent\n\n )\n\nandf.get_df_from_activity(with_screenshot=False) # executes dumpsys activity top -c and converts the relative coordinates to absolute coordinates\n\nandf.get_df_from_view(with_screenshot=False) # dataframe from uiautomator xml dump, extracts all results\n\ndf_activities,df_uiautomator,df_merged = andf.get_all_results() # Returns copies of the 3 DataFrames containing the results # df_merged will be empty \n\nandf.get_screenshot() \n\nandf.get_dfs_from_view_and_activity(with_screenshot=True) # DataFrame will contain screenshots \n\nandf.get_dfs_from_view_and_activity(with_screenshot=True) # df_merged will contain all data from both DataFrames\n\ndf_activities1,df_uiautomator1,df_merged1 = andf.get_all_results() \n\n\n\n```\n\n\n\n\n\n\n\n#### Let\u2019s compare the results with the ones from https://github.com/dtmilano/AndroidViewClient (Uiautomator backend)\n\nDon't get me wrong, AndroidViewClient is a wonderful tool and I have been using it for a long time, but it works on BlueStacks (most important for me) only with the Uiautomator backend (at least on my PC), and unfortunately, it doesn't always identify all items https://github.com/dtmilano/AndroidViewClient/issues/305. As far as I know, the more recent project https://github.com/dtmilano/CulebraTester2-public identifies more views.\n\n\n\n\n\n### Bluestacks start screen\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/df_screen01.png\"/>\n\n\n\n```python \n\nvcd = vc.dump(-1)\n\ntimes_ = timest()\n\nfor ini, _ in enumerate(vcd):\n\n outputfile = os.path.join(f\"f:\\\\compare_android\\\\2\\\\{times_}\", str(ini) + '.png')\n\n touch(outputfile)\n\n _.writeImageToFile(outputfile)\n\n``` \n\n\n\n#### Results AndroidViewClient\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/vc01.png\"/>\n\n\n\n```python \n\ndf_activities1.dropna(subset='aa_screenshot').ff_aa_save_screenshot.apply(lambda x:x())\n\n``` \n\n\n\n#### Results df_activities1\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/df_act01.png\"/>\n\n\n\n```python \n\ndf_uiautomator1.dropna(subset='bb_screenshot').ff_bb_save_screenshot.apply(lambda x: x())\n\n``` \n\n\n\n#### Results df_uiautomator1\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/df_act02.png\"/>\n\n\n\n\n\n\n\n\n\n### Bluestacks settings\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/df_screen02.png\"/>\n\n\n\n#### Results AndroidViewClient\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/vc01_0.png\"/>\n\n\n\n#### Results df_activities1\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/df_act01_0.png\"/>\n\n\n\n#### Results df_uiautomator1\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/df_act02_0.png\"/>\n\n\n\n\n\n### All results in DataFrames \n\nYou can use the whole power of pandas.DataFrame.loc https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html to locate any item and easily call touch/swipe/longtouch methods that are stored in different columns of the DataFrame\n\n<img src=\"https://github.com/hansalemaos/screenshots/raw/main/dfresults.png\"/>\n\n\n\n#### The DataFrame columns explained\n\n\n\n\n\n```python \n\ndf_activities1.columns.to_list()\n\nOut[9]: ['aa_area', 'aa_bounds', 'aa_center_x', 'aa_center_x_cropped', 'aa_center_y', 'aa_center_y_cropped', 'aa_class_name', 'aa_clickable', 'aa_complete_dump', 'aa_context_clickable', 'aa_cropped_x_end', 'aa_cropped_x_start', 'aa_cropped_y_end', 'aa_cropped_y_start', 'aa_depth', 'aa_drawn', 'aa_enabled', 'aa_focusable', 'aa_has_screenshot', 'aa_hashcode_hex', 'aa_hashcode_int', 'aa_height', 'aa_height_cropped', 'aa_id_information', 'aa_is_child', 'aa_long_clickable', 'aa_mID_hex', 'aa_mID_int', 'aa_old_index', 'aa_pflag_activated', 'aa_pflag_dirty_mask', 'aa_pflag_focused', 'aa_pflag_hovered', 'aa_pflag_invalidated', 'aa_pflag_is_root_namespace', 'aa_pflag_prepressed', 'aa_pflag_selected', 'aa_pure_id', 'aa_screenshot', 'aa_scrollbars_horizontal', 'aa_scrollbars_vertical', 'aa_shapely', 'aa_valid_square', 'aa_visibility', 'aa_width', 'aa_width_cropped', 'aa_x_end', 'aa_x_end_relative', 'aa_x_start', 'aa_x_start_relative', 'aa_y_end', 'aa_y_end_relative', 'aa_y_start', 'aa_y_start_relative', 'ee_aa_longtouch', 'ee_aa_longtouch_bs', 'ee_aa_longtouch_offset', 'ee_aa_longtouch_offset_bs', 'ee_aa_touch', 'ee_aa_touch_bs', 'ee_aa_touch_offset', 'ee_aa_touch_offset_bs', 'ff_aa_downswipe', 'ff_aa_save_screenshot', 'ff_aa_show_screenshot', 'ff_aa_tap_center_offset', 'ff_aa_tap_center_offset_long', 'ff_aa_tap_center_variation', 'ff_aa_tap_center_variation_long', 'ff_aa_tap_exact_center', 'ff_aa_tap_exact_center_long', 'ff_aa_upswipe', 'ff_show_parents', 'parent_000', 'parent_001', 'parent_002', 'parent_003', 'parent_004', 'parent_005', 'parent_006', 'parent_007', 'parent_008', 'parent_009', 'parent_010', 'parent_011']\n\n\n\ndf_uiautomator1.columns.to_list()\n\nOut[10]: ['bb_area', 'bb_center_x', 'bb_center_y', 'bb_x_end', 'bb_y_end', 'bb_height', 'bb_x_start', 'bb_y_start', 'bb_width', 'bb_bounds', 'bb_checkable', 'bb_checked', 'bb_class', 'bb_clickable', 'bb_content_desc', 'bb_enabled', 'bb_focusable', 'bb_focused', 'bb_index', 'bb_keys_hierarchy', 'bb_long_clickable', 'bb_package', 'bb_password', 'bb_resource_id', 'bb_scrollable', 'bb_selected', 'bb_text', 'bb_pure_id', 'bb_screenshot', 'bb_old_index', 'bb_valid_square', 'bb_shapely', 'bb_cropped_x_start', 'bb_cropped_y_start', 'bb_cropped_x_end', 'bb_cropped_y_end', 'bb_width_cropped', 'bb_height_cropped', 'bb_center_x_cropped', 'bb_center_y_cropped', 'ff_bb_show_screenshot', 'ff_bb_save_screenshot', 'ff_bb_tap_center_offset', 'ff_bb_tap_exact_center', 'ff_bb_tap_center_variation', 'ff_bb_tap_center_offset_long', 'ff_bb_tap_exact_center_long', 'ff_bb_tap_center_variation_long', 'ff_bb_upswipe', 'ff_bb_downswipe', 'ee_bb_longtouch_offset', 'ee_bb_longtouch_offset_bs', 'ee_bb_touch_offset', 'ee_bb_touch_offset_bs', 'ee_bb_longtouch_bs', 'ee_bb_touch_bs', 'ee_bb_touch', 'ee_bb_longtouch']\n\n\n\n```\n\n\n\n#### The columns starting with aa_ or bb_ are self explaining, they contain data (height, width ...) to identify objects \n\n\n\n\n\n#### The column prefix ee_ means that you can call functions which use sendevent (root access necessary)\n\n- aa_ after ee_ stands for activity DataFrame \n\n- bb_ after ee_ stands for uiautomator DataFrame (name difference (aa_/bb_) important for merging when calling andf.get_dfs_from_view_and_activity() \n\n- the suffix _bs is only interesting for you if you use BlueStacks (like me)\n\n\n\n```python \n\ndf_activities1.ee_aa_longtouch.iloc[28]() # longtouch on item 28\n\ndf_activities1.ee_aa_longtouch_bs.iloc[28]() # recalculated for bluestacks, won\u2019t work against a \u201cregular\u201d Android Device https://stackoverflow.com/a/73733261/15096247 \n\n```\n\n\n\n```python \n\ndf_activities1.ee_aa_longtouch_offset_bs.iloc[28](200,1) # x,y offset \n\ndf_activities1.ee_aa_longtouch_offset_bs.iloc[28](200,1) # x,y offset / recalculated for bluestacks \n\n```\n\n\n\n```python \n\ndf_activities1.ee_aa_touch_offset.iloc[28](100,1) # x,y offset \n\ndf_activities1.ee_aa_touch_offset_bs.iloc[28](100,1) # x,y offset / recalculated for bluestacks \n\n```\n\n\n\n```python \n\ndf_activities1.ee_aa_touch.iloc[28]()\n\ndf_activities1.ee_aa_touch_bs.iloc[28]() # recalculated for bluestacks \n\n```\n\n\n\n\n\n#### The column prefix ff_ means that the action is executed using adb shell input (root access not necessary)\n\n\n\n```python \n\n# swipes down (or up, depending on your interpretation) within the bounds of the item\n\ndf_activities1.ff_aa_downswipe.iloc[28]()\n\n```\n\n\n\n```python \n\n# swipes up (or down, depending on your interpretation) within the bounds of the item\n\ndf_activities1.ff_aa_upswipe.iloc[28]()\n\n```\n\n```python \n\n# save all screenshots to the defined folder (when you created the instance), subfolder with timestamp as name will be created for each new DataFrame\n\ndf_activities1.dropna(subset='aa_screenshot').ff_aa_save_screenshot.apply(lambda x:x())\n\n```\n\n\n\n```python \n\n#show screenshot with cv2.imshow, window can be closed by pressing 'q'\n\ndf_activities1.ff_aa_show_screenshot.iloc[28]()\n\n```\n\n\n\n```python \n\ndf_activities1.ff_aa_tap_center_offset.iloc[28](1,20) # offset from the center of the found item - touch\n\ndf_activities1.ff_aa_tap_center_offset_long.iloc[28](1,20) # offset from the center of the found item - longtouch\n\ndf_activities1.ff_aa_tap_center_variation.iloc[28]()\n\ndf_activities1.ff_aa_tap_center_variation_long.iloc[28]()\n\ndf_activities1.ff_aa_tap_exact_center.iloc[28]()\n\ndf_activities1.ff_aa_tap_exact_center_long.iloc[28]()\n\n```\n\n```python \n\ndf_activities1.ff_show_parents.iloc[28]() # Returns a DataFrame with all parent items \n\n\n\n```\n\n\n\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Locates more items/views/elements on an Android device than similar automation packages by combining ADB's dumpsys activity/uiautomator",
"version": "0.11",
"split_keywords": [
"uiautomator",
"dumpsys",
"adb",
"android",
"debugging",
"pandas",
"dataframe",
"androidmanifest",
"views",
"items",
"automation"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1887665486f584d88f19baf4b4e5f25a0cee5aadae11b541b4f2167780097d9b",
"md5": "2e3d9a05effad78c4017ec3ad2dbc193",
"sha256": "8c767b74a3cc21a5f893a99f5956bd2f02efe7b564367f73d571113ed7b51f00"
},
"downloads": -1,
"filename": "androdf-0.11-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2e3d9a05effad78c4017ec3ad2dbc193",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 21405,
"upload_time": "2023-02-05T22:28:20",
"upload_time_iso_8601": "2023-02-05T22:28:20.607600Z",
"url": "https://files.pythonhosted.org/packages/18/87/665486f584d88f19baf4b4e5f25a0cee5aadae11b541b4f2167780097d9b/androdf-0.11-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5d60d845dd9cc92458c01ec97f5af0d772420cf79f418353df642cbbeee1d5e5",
"md5": "0388908dc2981d03cd8a195482371051",
"sha256": "270c5b28f737fcf328d0abd0bada54a40b76054d73aa96f76d289e53d88abc7c"
},
"downloads": -1,
"filename": "androdf-0.11.tar.gz",
"has_sig": false,
"md5_digest": "0388908dc2981d03cd8a195482371051",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 21066,
"upload_time": "2023-02-05T22:28:21",
"upload_time_iso_8601": "2023-02-05T22:28:21.956376Z",
"url": "https://files.pythonhosted.org/packages/5d/60/d845dd9cc92458c01ec97f5af0d772420cf79f418353df642cbbeee1d5e5/androdf-0.11.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-02-05 22:28:21",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "hansalemaos",
"github_project": "androdf",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "a_cv2_imshow_thread",
"specs": []
},
{
"name": "a_cv_imwrite_imread_plus",
"specs": []
},
{
"name": "a_pandas_ex_plode_tool",
"specs": []
},
{
"name": "a_pandas_ex_string_to_dtypes",
"specs": []
},
{
"name": "a_pandas_ex_xml2df",
"specs": []
},
{
"name": "flatten_everything",
"specs": []
},
{
"name": "generate_random_values_in_range",
"specs": []
},
{
"name": "keyboard",
"specs": []
},
{
"name": "numpy",
"specs": []
},
{
"name": "opencv_python",
"specs": []
},
{
"name": "pandas",
"specs": []
},
{
"name": "PrettyColorPrinter",
"specs": []
},
{
"name": "psutil",
"specs": []
},
{
"name": "regex",
"specs": []
},
{
"name": "sendevent_touch",
"specs": []
},
{
"name": "Shapely",
"specs": []
}
],
"lcname": "androdf"
}