Browse Source

Move date parse to it's own function

JoostSijm 4 years ago
parent
commit
91965797a6

+ 3 - 11
src/rival_regions_wrapper/api_wrapper/article.py

@@ -1,11 +1,11 @@
 """Articl class"""
 
-from datetime import timedelta, timezone
 import unicodedata
 import re
 
 from bs4 import BeautifulSoup
-from dateutil import parser
+
+from rival_regions_wrapper import functions
 
 
 class Article():
@@ -59,13 +59,5 @@ class Article():
 
         date_element = soup.select_one('.news_conent_title')
         date_string = date_element.text.replace('✘', '').strip()
-        if 'Yesterday' in date_string:
-            time = re.search(r'\d\d:\d\d', date_string)
-            article_info['post_date'] = parser.parse(time.group(0)) - timedelta(days=1)
-        elif 'Today' in date_string:
-            time = re.search(r'\d\d:\d\d', date_string)
-            article_info['post_date'] = parser.parse(time.group(0))
-        else:
-            article_info['post_date'] = parser.parse(date_string)
-        article_info['post_date'] = article_info['post_date'].replace(tzinfo=timezone.utc)
+        article_info['post_date'] = functions.parse_date(date_string)
         return article_info

+ 3 - 11
src/rival_regions_wrapper/api_wrapper/overview.py

@@ -1,10 +1,10 @@
 """Profile class"""
 
 import re
-from datetime import timedelta, timezone
 
 from bs4 import BeautifulSoup
-from dateutil import parser
+
+from rival_regions_wrapper import functions
 
 
 class Overview():
@@ -25,21 +25,13 @@ class Overview():
             if date_string:
                 upgrade_perk = int(perk['perk'])
                 date_string = re.sub(r'^.*:\s', '', soup.select_one('.perk_source_4 .small').text)
-                if 'tomorrow' in date_string:
-                    time = re.search(r'\d\d:\d\d', date_string)
-                    upgrade_date = parser.parse(time.group(0)) + timedelta(days=1)
-                elif 'today' in date_string:
-                    time = re.search(r'\d\d:\d\d', date_string)
-                    upgrade_date = parser.parse(time.group(0))
-                else:
-                    upgrade_date = parser.parse(date_string)
+                upgrade_date = functions.parse_date(date_string)
                 break
         auto_war = soup.select_one('.war_index_war span.pointer:nth-child(4)')
         if auto_war and auto_war.has_attr('action'):
             auto_war = auto_war['action'].replace('war/details/', '')
         else:
             auto_war = None
-        upgrade_date = upgrade_date.replace(tzinfo=timezone.utc) if upgrade_date else None
         overview = {
             'perks': {
                 'strenght': int(soup.find('div', {'perk': 1, 'class': 'perk_source_2'}).text),

+ 3 - 11
src/rival_regions_wrapper/api_wrapper/perks.py

@@ -1,10 +1,10 @@
 """Perks class"""
 
 import re
-from datetime import timedelta, timezone
 
 from bs4 import BeautifulSoup
-from dateutil import parser
+
+from rival_regions_wrapper import functions
 
 
 class Perks():
@@ -25,16 +25,8 @@ class Perks():
             if date_string:
                 upgrade_perk = int(perk['perk'])
                 date_string = re.sub(r'^.*:\s', '', soup.select_one('.perk_source_4 .small').text)
-                if 'tomorrow' in date_string:
-                    time = re.search(r'\d\d:\d\d', date_string)
-                    upgrade_date = parser.parse(time.group(0)) + timedelta(days=1)
-                elif 'today' in date_string:
-                    time = re.search(r'\d\d:\d\d', date_string)
-                    upgrade_date = parser.parse(time.group(0))
-                else:
-                    upgrade_date = parser.parse(date_string)
+                upgrade_date = functions.parse_date(date_string)
                 break
-        upgrade_date = upgrade_date.replace(tzinfo=timezone.utc) if upgrade_date else None
         perks = {
             'strenght': int(soup.find('div', {'perk': 1, 'class': 'perk_source_2'}).text),
             'education': int(soup.find('div', {'perk': 2, 'class': 'perk_source_2'}).text),

+ 7 - 0
src/rival_regions_wrapper/api_wrapper/war.py

@@ -6,6 +6,8 @@ import unicodedata
 
 from bs4 import BeautifulSoup
 
+from rival_regions_wrapper import functions
+
 
 class War():
     """Wrapper class for war"""
@@ -64,6 +66,11 @@ class War():
             seconds = int(search_result.group(0).replace('\'', ''))
             war_info['time_left'] = timedelta(seconds=seconds)
             war_info['finish_date'] = datetime.utcnow() + war_info['time_left']
+        else:
+            war_info['time_left'] = None
+            results = re.search(r'(?<=: ).*', soup.select_one('.slide_title .small').text)
+            if results:
+                war_info['finish_date'] = functions.parse_date(results.group(0))
 
         war_info['war_units'] = {}
         for war_unit in soup.select('.war_w_unit_div'):

+ 23 - 0
src/rival_regions_wrapper/functions.py

@@ -0,0 +1,23 @@
+"""Common functions"""
+
+import re
+from datetime import timedelta, timezone
+
+from dateutil import parser
+
+
+def parse_date(date_string):
+    """Try to parse any string to date"""
+    date_string = date_string.lower()
+    if 'yesterday' in date_string:
+        time = re.search(r'\d\d:\d\d', date_string)
+        date = parser.parse(time.group(0)) - timedelta(days=1)
+    elif 'today' in date_string:
+        time = re.search(r'\d\d:\d\d', date_string)
+        date = parser.parse(time.group(0))
+    elif 'tomorrow' in date_string:
+        time = re.search(r'\d\d:\d\d', date_string)
+        date = parser.parse(time.group(0)) + timedelta(days=1)
+    else:
+        date = parser.parse(date_string)
+    return date.replace(tzinfo=timezone.utc)

+ 0 - 1
src/rival_regions_wrapper/middleware.py

@@ -29,7 +29,6 @@ class LocalAuthentication(MiddlewareBase):
             'password': password,
             'login_method': login_method
         })
-        self.client.login()
         super().__init__()
 
     def get(self, path, add_c_var=False):