PyEmailerAJM 1.9.3__tar.gz → 1.9.3.2__tar.gz
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.
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PKG-INFO +2 -2
- pyemailerajm-1.9.3.2/PyEmailerAJM/_version.py +1 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/msg/msg.py +3 -2
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/py_emailer_ajm.py +2 -1
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/searchers/__init__.py +3 -1
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/searchers/factory.py +3 -3
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/searchers/searchers.py +7 -7
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM.egg-info/PKG-INFO +2 -2
- pyemailerajm-1.9.3/PyEmailerAJM/_version.py +0 -1
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/LICENSE.txt +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/__init__.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/backend/__init__.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/backend/enums.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/backend/errs.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/backend/logger.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/backend/the_sandman.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/__init__.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/backend/__init__.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/backend/continuous_colorizer.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/backend/continuous_monitor_base.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/backend/email_state.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/backend/snooze_tracking.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/continuous_monitor.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/continuous_monitor_alert_send.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/msg/__init__.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/msg/alert_messages.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/msg/factory.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM.egg-info/SOURCES.txt +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM.egg-info/dependency_links.txt +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM.egg-info/requires.txt +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM.egg-info/top_level.txt +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/README.md +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/setup.cfg +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/setup.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/tests/test_PyEmailerAJM.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/tests/test_continuous_monitor_base.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/tests/test_email_signature.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/tests/test_logger.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/tests/test_msg_properties.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/tests/test_searcher_factory.py +0 -0
- {pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/tests/test_snooze_tracking.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyEmailerAJM
|
|
3
|
-
Version: 1.9.3
|
|
3
|
+
Version: 1.9.3.2
|
|
4
4
|
Summary: Allows for automating sending Email with the Outlook Desktop client. Future releases will add more client support
|
|
5
5
|
Home-page: https://github.com/amcsparron2793-Water/PyEmailer
|
|
6
|
-
Download-URL: https://github.com/amcsparron2793-Water/PyEmailer/archive/refs/tags/1.9.3.tar.gz
|
|
6
|
+
Download-URL: https://github.com/amcsparron2793-Water/PyEmailer/archive/refs/tags/1.9.3.2.tar.gz
|
|
7
7
|
Author: Amcsparron
|
|
8
8
|
Author-email: amcsparron@albanyny.gov
|
|
9
9
|
License: MIT License
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '1.9.3.2'
|
|
@@ -80,7 +80,8 @@ class _BasicMsgProperties:
|
|
|
80
80
|
|
|
81
81
|
@importance.setter
|
|
82
82
|
def importance(self, value: Union[EmailMsgImportanceLevel, str, int]):
|
|
83
|
-
|
|
83
|
+
# the previous comparison caused an issue with 3.8 compatability
|
|
84
|
+
if value in [x for x in EmailMsgImportanceLevel] or value in [x.name for x in EmailMsgImportanceLevel]:
|
|
84
85
|
if isinstance(value, str):
|
|
85
86
|
value = EmailMsgImportanceLevel[value].value
|
|
86
87
|
elif isinstance(value, EmailMsgImportanceLevel):
|
|
@@ -93,7 +94,7 @@ class _BasicMsgProperties:
|
|
|
93
94
|
|
|
94
95
|
|
|
95
96
|
class Msg(_BasicMsgProperties):
|
|
96
|
-
def __init__(self, email_item: win32.CDispatch
|
|
97
|
+
def __init__(self, email_item: Union[win32.CDispatch,extract_msg.Message], **kwargs):
|
|
97
98
|
super().__init__(email_item)
|
|
98
99
|
self._logger: Logger = kwargs.get('logger', getLogger(__name__))
|
|
99
100
|
self.send_success = False
|
|
@@ -8,6 +8,7 @@ install win32 with pip install pywin32
|
|
|
8
8
|
from os import environ
|
|
9
9
|
from os.path import isfile, join, isdir
|
|
10
10
|
from tempfile import gettempdir
|
|
11
|
+
from typing import Optional
|
|
11
12
|
|
|
12
13
|
# install win32 with pip install pywin32
|
|
13
14
|
import win32com.client as win32
|
|
@@ -272,7 +273,7 @@ class PyEmailer(EmailerInitializer):
|
|
|
272
273
|
else:
|
|
273
274
|
print("Please respond with 'y' or 'n'.")
|
|
274
275
|
|
|
275
|
-
def display_tracker_check(self) -> bool
|
|
276
|
+
def display_tracker_check(self) -> Optional[bool]:
|
|
276
277
|
if self.display_window:
|
|
277
278
|
c = self._display_tracking_warning_confirm()
|
|
278
279
|
if c:
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
# "urn:schemas:httpmail:subject".
|
|
8
8
|
# - Wrap aliases in [brackets] when calling Items.Restrict.
|
|
9
9
|
# - For dates, use ISO-like strings or properly constructed COM dates.
|
|
10
|
-
|
|
10
|
+
from typing import Tuple
|
|
11
|
+
|
|
12
|
+
OUTLOOK_ATSQL_ALIASES: Tuple[str, ...] = (
|
|
11
13
|
# Mail/general
|
|
12
14
|
'Subject', 'Body', 'Categories', 'MessageClass', 'Size', 'Importance', 'Sensitivity', 'UnRead', 'HasAttachment',
|
|
13
15
|
'EntryID', 'ConversationTopic',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from collections.abc import Callable
|
|
2
|
-
from typing import Type
|
|
2
|
+
from typing import Type, Tuple, Optional
|
|
3
3
|
|
|
4
4
|
from . import BaseSearcher, AttributeSearcher, OUTLOOK_ATSQL_ALIASES
|
|
5
5
|
|
|
@@ -9,12 +9,12 @@ class SearcherFactory:
|
|
|
9
9
|
"""Dynamic factory returning a searcher class or instance for a given search option."""
|
|
10
10
|
|
|
11
11
|
@staticmethod
|
|
12
|
-
def available_types() ->
|
|
12
|
+
def available_types() -> Tuple[str, ...]:
|
|
13
13
|
"""All registered specialized search types (from subclasses that set SEARCH_TYPE)."""
|
|
14
14
|
return tuple(sorted(BaseSearcher._REGISTRY.keys()))
|
|
15
15
|
|
|
16
16
|
@staticmethod
|
|
17
|
-
def get_searcher(search_type: str, *, attribute: str
|
|
17
|
+
def get_searcher(search_type: str, *, attribute: Optional[str] = None, **kwargs) -> BaseSearcher:
|
|
18
18
|
"""
|
|
19
19
|
Return an instance of a searcher matching `search_type`.
|
|
20
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
2
|
from collections.abc import Callable, Iterable
|
|
3
|
-
from typing import List, Dict, Type, Optional
|
|
3
|
+
from typing import List, Dict, Type, Optional, Tuple
|
|
4
4
|
|
|
5
5
|
# Provide a safe fallback for CDispatch when pywin32 is unavailable (e.g., in test environments)
|
|
6
6
|
try: # pragma: no cover - trivial import guard
|
|
@@ -17,11 +17,11 @@ class BaseSearcher:
|
|
|
17
17
|
# Global registry of searchers keyed by SEARCH_TYPE
|
|
18
18
|
_REGISTRY: Dict[str, Type['BaseSearcher']] = {}
|
|
19
19
|
|
|
20
|
-
SEARCH_TYPE: str
|
|
20
|
+
SEARCH_TYPE: Optional[str] = None # subclasses set this to a unique key (e.g. 'subject')
|
|
21
21
|
SEARCHING_STRING = "Searching for Messages..." # partial match ok: {partial_match_ok}"
|
|
22
22
|
|
|
23
23
|
# NEW: class-level default that can be set once for all instances
|
|
24
|
-
_DEFAULT_GET_MESSAGES: Optional[Callable[..., Iterable]] = None
|
|
24
|
+
_DEFAULT_GET_MESSAGES: Optional[Callable] = None#[..., Iterable]] = None
|
|
25
25
|
|
|
26
26
|
def __init_subclass__(cls, **kwargs):
|
|
27
27
|
super().__init_subclass__(**kwargs)
|
|
@@ -30,7 +30,7 @@ class BaseSearcher:
|
|
|
30
30
|
key = cls.SEARCH_TYPE.lower()
|
|
31
31
|
BaseSearcher._REGISTRY[key] = cls
|
|
32
32
|
|
|
33
|
-
def __init__(self, logger=None, *, get_messages: Callable
|
|
33
|
+
def __init__(self, logger=None, *, get_messages: Optional[Callable] = None, **kwargs):
|
|
34
34
|
self._searching_string = None
|
|
35
35
|
if logger:
|
|
36
36
|
self.logger = logger
|
|
@@ -49,7 +49,7 @@ class BaseSearcher:
|
|
|
49
49
|
...
|
|
50
50
|
|
|
51
51
|
@classmethod
|
|
52
|
-
def set_default_get_messages(cls, provider: Callable
|
|
52
|
+
def set_default_get_messages(cls, provider: Callable) -> None:
|
|
53
53
|
"""Set a global default provider for all searchers (current and future instances).
|
|
54
54
|
Typically provider = py_emailer.GetMessages.
|
|
55
55
|
"""
|
|
@@ -362,7 +362,7 @@ class SubjectSearcher(BaseSearcher):
|
|
|
362
362
|
# "urn:schemas:httpmail:subject".
|
|
363
363
|
# - Wrap aliases in [brackets] when calling Items.Restrict.
|
|
364
364
|
# - For dates, use ISO-like strings or properly constructed COM dates.
|
|
365
|
-
OUTLOOK_ATSQL_ALIASES:
|
|
365
|
+
OUTLOOK_ATSQL_ALIASES: Tuple[str, ...] = (
|
|
366
366
|
# Mail/general
|
|
367
367
|
'Subject', 'Body', 'Categories', 'MessageClass', 'Size', 'Importance', 'Sensitivity', 'UnRead', 'HasAttachment',
|
|
368
368
|
'EntryID', 'ConversationTopic',
|
|
@@ -375,7 +375,7 @@ OUTLOOK_ATSQL_ALIASES: tuple[str, ...] = (
|
|
|
375
375
|
)
|
|
376
376
|
|
|
377
377
|
|
|
378
|
-
def get_outlook_sql_aliases() -> Iterable[str]:
|
|
378
|
+
def get_outlook_sql_aliases() -> Iterable:#[str]:
|
|
379
379
|
"""Return a tuple of commonly recognized Outlook @SQL field aliases.
|
|
380
380
|
|
|
381
381
|
Outlook's @SQL provider recognizes a set of field aliases that can be referenced with [Alias]
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyEmailerAJM
|
|
3
|
-
Version: 1.9.3
|
|
3
|
+
Version: 1.9.3.2
|
|
4
4
|
Summary: Allows for automating sending Email with the Outlook Desktop client. Future releases will add more client support
|
|
5
5
|
Home-page: https://github.com/amcsparron2793-Water/PyEmailer
|
|
6
|
-
Download-URL: https://github.com/amcsparron2793-Water/PyEmailer/archive/refs/tags/1.9.3.tar.gz
|
|
6
|
+
Download-URL: https://github.com/amcsparron2793-Water/PyEmailer/archive/refs/tags/1.9.3.2.tar.gz
|
|
7
7
|
Author: Amcsparron
|
|
8
8
|
Author-email: amcsparron@albanyny.gov
|
|
9
9
|
License: MIT License
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '1.9.3'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/backend/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/backend/email_state.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyemailerajm-1.9.3 → pyemailerajm-1.9.3.2}/PyEmailerAJM/continuous_monitor/continuous_monitor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|