Skip to content

Commit

Permalink
add thriftbooks; f ix homedepot; fix generic
Browse files Browse the repository at this point in the history
  • Loading branch information
ljmerza committed Jul 3, 2023
1 parent ee3ffca commit 81f0820
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 12 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ Supported Emails
- Sony
- Swiss Post
- Target
- Thriftbooks
- Timeless
- The Smartest House
- Ubiquiti
Expand Down
2 changes: 1 addition & 1 deletion custom_components/email/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
"imapclient==2.3.1",
"mail-parser==3.9.3"
],
"version": "3.5.0"
"version": "3.12.0"
}
2 changes: 1 addition & 1 deletion custom_components/email/parsers/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ def parse_generic(email):
if tracking_number not in tracking_numbers:
tracking_numbers.append(tracking_number)

return tracking_numbers,
return tracking_numbers
18 changes: 10 additions & 8 deletions custom_components/email/parsers/home_depot.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
EMAIL_DOMAIN_HOME_DEPOT = 'homedepot.com'


track_copy_pattern = re.compile(r"track my order", re.IGNORECASE)
order_number_pattern = re.compile(r"^[A-Za-z]{2}\d{8}$")

def parse_home_depot(email):
"""Parse home depot tracking numbers."""
tracking_numbers = []
Expand All @@ -27,15 +30,14 @@ def parse_home_depot(email):
if 'link.order.homedepot.com' not in link:
continue

try:
tracking_number = element.text
isNan = math.isnan(int(tracking_number))
match = re.search(order_number_pattern, element.text)

stripped_number = tracking_number.rstrip()
if match:
tracking_numbers.append({
'link': link,
'tracking_number': match.group()
})

if not isNan and stripped_number not in tracking_numbers:
tracking_numbers.append(stripped_number)
except:
pass

_LOGGER.error({ "tracking_numbers" : tracking_numbers})
return tracking_numbers
43 changes: 43 additions & 0 deletions custom_components/email/parsers/thriftbooks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import logging
import re
import math

from bs4 import BeautifulSoup
from ..const import EMAIL_ATTR_BODY


_LOGGER = logging.getLogger(__name__)
ATTR_THRIFT_BOOKS = 'thrift_books'
EMAIL_DOMAIN_THRIFT_BOOKS = 'thriftbooks'

track_copy_pattern = re.compile(r"track my package", re.IGNORECASE)
order_number_pattern = re.compile(r"Order #:\s+(\d+)")

def parse_thrift_books(email):
"""Parse thrift books tracking numbers."""
tracking_numbers = []

soup = BeautifulSoup(email[EMAIL_ATTR_BODY], 'html.parser')
elements = soup.find_all('a')

for element in elements:
link = element.get('href')

if not link:
continue

if 'spmailtechno' not in link:
continue

try:
if re.search(track_copy_pattern, element.text):
match = re.search(order_number_pattern, email[EMAIL_ATTR_BODY])
if match:
tracking_numbers.append({
'link': link,
'tracking_number': match.group(1)
})
except:
pass

return tracking_numbers
5 changes: 3 additions & 2 deletions custom_components/email/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
from .parsers.sony import ATTR_SONY, EMAIL_DOMAIN_SONY, parse_sony
from .parsers.sylvane import ATTR_SYLVANE, EMAIL_DOMAIN_SYLVANE, parse_sylvane
from .parsers.adafruit import ATTR_ADAFRUIT, EMAIL_DOMAIN_ADAFRUIT, parse_adafruit
from .parsers.thriftbooks import ATTR_THRIFT_BOOKS, EMAIL_DOMAIN_THRIFT_BOOKS, parse_thrift_books

from .parsers.generic import ATTR_GENERIC, EMAIL_DOMAIN_GENERIC, parse_generic

Expand Down Expand Up @@ -110,7 +111,7 @@
(ATTR_SONY, EMAIL_DOMAIN_SONY, parse_sony),
(ATTR_SYLVANE, EMAIL_DOMAIN_SYLVANE, parse_sylvane),
(ATTR_ADAFRUIT, EMAIL_DOMAIN_ADAFRUIT, parse_adafruit),

(ATTR_THRIFT_BOOKS, EMAIL_DOMAIN_THRIFT_BOOKS, parse_thrift_books),
(ATTR_GENERIC, EMAIL_DOMAIN_GENERIC, parse_generic),
]

Expand Down Expand Up @@ -234,7 +235,7 @@ def find_carrier(tracking_number, email_domain):
return {
'tracking_number': tracking_number,
'carrier': carrier,
'origin': email_domain,
'origin': email_domain or carrier,
'link': f'{link}{tracking_number}',
}

Expand Down

0 comments on commit 81f0820

Please sign in to comment.