cookidoo-api 0.1.0__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.
@@ -0,0 +1,51 @@
1
+ """Cookidoo API package."""
2
+
3
+ __version__ = "0.1.0"
4
+
5
+ from .const import (
6
+ DEFAULT_COOKIDOO_CONFIG,
7
+ DEFAULT_NETWORK_TIMEOUT,
8
+ DEFAULT_RETRIES,
9
+ DEFAULT_TIMEOUT,
10
+ )
11
+ from .cookidoo import Cookidoo
12
+ from .exceptions import (
13
+ CookidooActionException,
14
+ CookidooAuthBotDetectionException,
15
+ CookidooAuthException,
16
+ CookidooConfigException,
17
+ CookidooException,
18
+ CookidooNavigationException,
19
+ CookidooSelectorException,
20
+ CookidooUnavailableException,
21
+ CookidooUnexpectedStateException,
22
+ )
23
+ from .types import (
24
+ CookidooBrowserType,
25
+ CookidooCaptchaRecoveryType,
26
+ CookidooConfig,
27
+ CookidooItem,
28
+ CookidooItemStateType,
29
+ )
30
+
31
+ __all__ = [
32
+ "Cookidoo",
33
+ "CookidooBrowserType",
34
+ "CookidooCaptchaRecoveryType",
35
+ "CookidooItemStateType",
36
+ "CookidooConfig",
37
+ "CookidooItem",
38
+ "CookidooException",
39
+ "CookidooConfigException",
40
+ "CookidooAuthException",
41
+ "CookidooAuthBotDetectionException",
42
+ "CookidooSelectorException",
43
+ "CookidooActionException",
44
+ "CookidooUnavailableException",
45
+ "CookidooUnexpectedStateException",
46
+ "CookidooNavigationException",
47
+ "DEFAULT_COOKIDOO_CONFIG",
48
+ "DEFAULT_RETRIES",
49
+ "DEFAULT_NETWORK_TIMEOUT",
50
+ "DEFAULT_TIMEOUT",
51
+ ]
cookidoo_api/const.py ADDED
@@ -0,0 +1,107 @@
1
+ """Constants for Cookidoo API."""
2
+
3
+ from typing import Final
4
+
5
+ from cookidoo_api.types import CookidooConfig
6
+
7
+ LOGIN_START_URL: Final = "https://cookidoo.ch"
8
+ LOGIN_START_SELECTOR: Final = "#layout--default > header > div > core-nav > nav > div.core-nav__container > ul.core-nav__links.unauthenticated-only > li:nth-child(2) > a"
9
+ LOGIN_EMAIL_SELECTOR: Final = "#email"
10
+ LOGIN_PASSWORD_SELECTOR: Final = "#password"
11
+ LOGIN_SUBMIT_SELECTOR: Final = 'button[type="submit"]'
12
+ LOGIN_CAPTCHA_SELECTOR: Final = "#amzn-captcha-verify-button"
13
+ LOGIN_ERROR_NOTIFICATION_SELECTOR: Final = ".notification__unobtrusive-error"
14
+ COOKIE_VALIDATION_URL: Final = "https://cookidoo.ch/profile/account"
15
+ COOKIE_VALIDATION_SELECTOR: Final = (
16
+ "main > section > .profile-indent > .profile-main-headline"
17
+ )
18
+ SHOPPING_LIST_URL: Final = "https://cookidoo.ch/shopping"
19
+ SHOPPING_LIST_SELECTOR: Final = "pm-shopping-list"
20
+
21
+ SHOPPING_LIST_EMPTY_SELECTOR: Final = "core-error-page"
22
+
23
+ SHOPPING_LIST_OPTIONS_SELECTOR: Final = "#shopping-list-options"
24
+ SHOPPING_LIST_CLEAR_ALL_OPTION_SELECTOR: Final = "#clearAllRecipes"
25
+ SHOPPING_LIST_CLEAR_ALL_MODAL_CONFIRM_SELECTOR: Final = (
26
+ 'core-modal [data-action="clear-all"] button[type="submit"]'
27
+ )
28
+
29
+ SHOPPING_LIST_ITEMS_SELECTOR: Final = "pm-ingredients-list #byCategory"
30
+ SHOPPING_LIST_CHECKED_ITEMS_SELECTOR: Final = "pm-checked-list-wrapper"
31
+
32
+ SHOPPING_LIST_ITEM_SUB_SELECTOR: Final = "li:not(.additional-items-list-item)"
33
+ SHOPPING_LIST_ITEM_LABEL_SUB_SELECTOR: Final = (
34
+ 'label span[data-type="ingredientNotation"]'
35
+ )
36
+ SHOPPING_LIST_ITEM_QUANTITY_SUB_SELECTOR: Final = 'label span[data-type="value"]'
37
+ SHOPPING_LIST_ITEM_UNIT_SUB_SELECTOR: Final = 'label span[data-type="unitNotation"]'
38
+ SHOPPING_LIST_ITEM_ID_SUB_SELECTOR: Final = "input[data-value]"
39
+ SHOPPING_LIST_ITEM_ID_ATTR: Final = "data-value"
40
+ SHOPPING_LIST_CHECKBOX_SUB_SELECTOR: Final = "core-checkbox"
41
+
42
+ SHOPPING_LIST_ADDITIONAL_ITEMS_SELECTOR: Final = "pm-additional-items-list"
43
+ SHOPPING_LIST_ADDITIONAL_CHECKED_ITEMS_SELECTOR: Final = "pm-checked-list-wrapper"
44
+ SHOPPING_LIST_ADDITIONAL_ITEM_SUB_SELECTOR: Final = "li.additional-items-list-item"
45
+ SHOPPING_LIST_ADDITIONAL_ITEM_HOVER_SUB_SELECTOR: Final = "> div"
46
+ SHOPPING_LIST_ADDITIONAL_ITEM_LABEL_SUB_SELECTOR: Final = (
47
+ 'label span[data-type="name"], label span[data-type="value"]'
48
+ )
49
+ SHOPPING_LIST_ADDITIONAL_ITEM_ID_SUB_SELECTOR: Final = "input[data-value]"
50
+ SHOPPING_LIST_ADDITIONAL_ITEM_ID_ATTR: Final = "data-value"
51
+ SHOPPING_LIST_ADDITIONAL_CHECKBOX_SUB_SELECTOR: Final = "core-checkbox"
52
+ SHOPPING_LIST_ADDITIONAL_ITEM_DELETE_SUB_SELECTOR: Final = 'span[data-type="delete"]'
53
+ SHOPPING_LIST_ADDITIONAL_ITEM_EDIT_SUB_SELECTOR: Final = 'span[data-type="edit"]'
54
+
55
+ SHOPPING_LIST_EDIT_ADDITIONAL_ITEM_SELECTOR: Final = "pm-edit-additional-item"
56
+ SHOPPING_LIST_EDIT_ADDITIONAL_ITEM_INPUT_SUB_SELECTOR: Final = 'input[type="text"]'
57
+ SHOPPING_LIST_EDIT_ADDITIONAL_ITEM_CONFIRM_SUB_SELECTOR: Final = (
58
+ 'button:not([type="button"])'
59
+ )
60
+
61
+ SHOPPING_LIST_CREATE_ADDITIONAL_ITEM_SELECTOR: Final = "pm-add-additional-item"
62
+ SHOPPING_LIST_CREATE_ADDITIONAL_ITEM_INPUT_SUB_SELECTOR: Final = "input"
63
+ SHOPPING_LIST_CREATE_ADDITIONAL_ITEM_CONFIRM_SUB_SELECTOR: Final = "button"
64
+
65
+ SHOPPING_LIST_ITEMS_TAB_SELECTOR: Final = "core-content-navigation button:nth-child(1)"
66
+ SHOPPING_LIST_RECIPES_TAB_SELECTOR: Final = (
67
+ "core-content-navigation button:nth-child(2)"
68
+ )
69
+ SHOPPING_LIST_RECIPE_OPTIONS_SELECTOR_TEMPLATE: Final = (
70
+ '[id="shopping-list-trigger-{}"]'
71
+ )
72
+ SHOPPING_LIST_RECIPE_REMOVE_OPTION_SELECTOR_TEMPLATE: Final = 'core-context-menu[trigger-id="shopping-list-trigger-{}"] core-handle-form[data-action="remove-recipes"]'
73
+
74
+ RECIPE_URL_PREFIX: Final = "https://cookidoo.ch/recipes/recipe/"
75
+ RECIPE_COOK_TODAY_SELECTOR: Final = '[id="cook-today-handle-form"] button'
76
+ RECIPE_ADD_OPTIONS_SELECTOR_TEMPLATE: Final = '[id="add-trigger-{}"]'
77
+ RECIPE_ADD_OPTION_SHOPPING_LIST_SELECTOR: Final = (
78
+ '[id="add-to-shopping-list-button"] button'
79
+ )
80
+ RECIPE_ADD_TO_SHOPPING_LIST_CONFIRM_SELECTOR: Final = (
81
+ 'core-conversion-teaser [href^="/shopping"]'
82
+ )
83
+ DOM_CHECK_ATTACHED: Final = "element => document.body.contains(element)"
84
+
85
+ DEFAULT_RETRIES = 3
86
+ DEFAULT_NETWORK_TIMEOUT = 5000
87
+ DEFAULT_TIMEOUT = 3000
88
+
89
+
90
+ DEFAULT_COOKIDOO_CONFIG = CookidooConfig(
91
+ {
92
+ "language_code": "de-CH",
93
+ "browser": "firefox",
94
+ "remote_addr": None,
95
+ "remote_port": "9222",
96
+ "headless": True,
97
+ "email": "your@email",
98
+ "password": "1234password!",
99
+ "network_timeout": DEFAULT_NETWORK_TIMEOUT,
100
+ "timeout": DEFAULT_TIMEOUT,
101
+ "retries": DEFAULT_RETRIES,
102
+ "load_media": True,
103
+ "tracing": False,
104
+ "screenshots": False,
105
+ "out_dir": "./out",
106
+ }
107
+ )