use os.path.join() instead of string concatenation to join paths

This change should make the program compatible with other operating systems.
This commit is contained in:
Marc Koch 2021-09-12 15:19:56 +02:00
parent dfa721e7c0
commit 70e5d574c5
2 changed files with 20 additions and 16 deletions

20
main.py
View File

@ -9,14 +9,16 @@ from models import TazDownloader, TazConfiguration
from exceptions import TazConfigurationError, TazDownloadError, TazDownloadFormatException
# Get directory
dir_path = os.path.dirname(os.path.realpath(__file__)) + '/'
dir_path = os.path.dirname(os.path.realpath(__file__))
def main(config: dict):
# Get german date for tomorrow
tomorrow = (datetime.now(pytz.timezone('Europe/Berlin')) + timedelta(1)).strftime('%Y_%m_%d')
# Define tmp/ folder
tmp_folder = os.path.join(dir_path, 'tmp')
# Set log level
try:
logging.getLogger().setLevel(config['log_level'].upper())
@ -25,7 +27,7 @@ def main(config: dict):
# Read download history from csv file
try:
df = pd.read_csv(dir_path + 'download_history.csv', header=0)
df = pd.read_csv(os.path.join(dir_path, 'download_history.csv'), header=0)
except FileNotFoundError:
# In case, there isn't yet a csv file, create data frame with headers
df = pd.DataFrame(
@ -69,7 +71,7 @@ def main(config: dict):
newspaper_downloaded = []
for n in newspaper_to_download:
try:
if taz_dl.download_newspaper(n):
if taz_dl.download_newspaper(n, tmp_folder):
newspaper_downloaded.append(n)
except Exception as e:
logging.error(f"Could not download {n}\n{e}", exc_info=True)
@ -85,17 +87,19 @@ def main(config: dict):
)
df = df.append(df_tmp, ignore_index=True)
df.sort_values(by='file', ascending=False, inplace=True)
df.to_csv(dir_path + 'download_history.csv', index=False)
df.to_csv(os.path.join(dir_path, 'download_history.csv'), index=False)
except Exception as e:
logging.error(f"Could not update download_history.csv\n{e}", exc_info=True)
# Move downloaded file to download folder
if os.path.isdir(config['download_folder']):
download_folder = \
config['download_folder'] if config['download_folder'].endswith('/') else config['download_folder'] + "/"
config['download_folder'] \
if config['download_folder'].endswith(os.path.sep) \
else config['download_folder'] + os.path.sep
for n in newspaper_downloaded:
try:
shutil.move(dir_path + 'tmp/' + n, download_folder)
shutil.move(os.path.join(tmp_folder, n), download_folder)
except Exception as e:
logging.error(f"Could not move file to download folder \"{download_folder}\"\n{e}", exc_info=True)
@ -104,7 +108,7 @@ if __name__ == '__main__':
# Set up logging
logging.basicConfig(
filename=dir_path + 'tazPlease.log',
filename=os.path.join(dir_path, 'tazPlease.log'),
level=logging.ERROR,
format='%(asctime)s - %(message)s'
)

View File

@ -7,7 +7,7 @@ from bs4 import BeautifulSoup
from envyaml import EnvYAML
import argparse
dir_path = os.path.dirname(os.path.realpath(__file__)) + '/'
dir_path = os.path.dirname(os.path.realpath(__file__))
class TazConfiguration:
@ -43,7 +43,7 @@ class TazConfiguration:
def _load_config(self):
# Try to load config.yaml
try:
conf_yaml = EnvYAML(dir_path + 'config.yaml', dir_path + '.env')
conf_yaml = EnvYAML(os.path.join(dir_path, 'config.yaml'), os.path.join(dir_path, '.env'))
except Exception as e:
raise Exception(f"Something went wrong when reading config.yaml.\n{e}")
@ -141,17 +141,17 @@ class TazDownloader:
except HTTPError as http_e:
raise TazDownloadError(f"Could not scrape available newspaper editions:\n{http_e}")
def download_newspaper(self, taz: str, download_folder: str = dir_path + 'tmp/'):
def download_newspaper(self, taz: str, download_folder: str = os.path.join(dir_path, 'tmp')):
"""
Downloads a newspaper from dl.taz.de and stores it in tmp/
Downloads a newspaper from dl.taz.de and stores it in tmp folder
"""
# Check if folder exists
try:
if not os.path.isdir(dir_path):
os.mkdirs(dir_path)
if not os.path.isdir(download_folder):
os.makedirs(download_folder)
except Exception as e:
raise TazDownloadError(f"Could find or create \"{dir_path}\":\n{e}")
raise TazDownloadError(f"Could find or create \"{download_folder}\":\n{e}")
# download taz
try:
@ -167,7 +167,7 @@ class TazDownloader:
}
) as r:
# write response to file
with open(download_folder + taz, "wb") as f:
with open(os.path.join(download_folder, taz), "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
return True