From 37a7ece9a5a529614b7635b3482ef894a20571d0 Mon Sep 17 00:00:00 2001 From: Ekin Bulut Date: Sun, 8 Jun 2025 21:24:25 +0300 Subject: [PATCH 1/2] Add CI workflow --- .github/workflows/ci.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..0b7b85f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,25 @@ +name: CI + +on: + push: + branches: ["main"] + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.12" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install ruff + - name: Run linters + run: ruff . + - name: Run tests + run: pytest -vv From 5a4fe9ba3b6e508608045c4ada7ed8b1ad3d6de5 Mon Sep 17 00:00:00 2001 From: Ekin Bulut Date: Sun, 8 Jun 2025 21:38:53 +0300 Subject: [PATCH 2/2] Fix CI workflow and clean up linting --- .github/workflows/ci.yml | 2 +- main.py | 1 - tests/test_news_fetcher.py | 4 ++-- tests/test_wordpress.py | 4 ++-- tests/test_wordpress_mock.py | 1 - tests/test_wordpress_poster.py | 18 ++++++++++++------ tests/test_wordpress_tags.py | 2 -- tools/news_fetcher_tool.py | 2 +- tools/wordpress_poster_tool.py | 6 ++---- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0b7b85f..483d4a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,6 @@ jobs: pip install -r requirements.txt pip install ruff - name: Run linters - run: ruff . + run: ruff check . - name: Run tests run: pytest -vv diff --git a/main.py b/main.py index 8f67a4e..2db3a39 100644 --- a/main.py +++ b/main.py @@ -3,7 +3,6 @@ from tools.wordpress_poster_tool import WordPressPosterTool from logger import setup_logger from check_ollama import check_ollama -from custom_ollama import CustomOllamaLLM import os import sys import time diff --git a/tests/test_news_fetcher.py b/tests/test_news_fetcher.py index d41cd83..1bf1232 100644 --- a/tests/test_news_fetcher.py +++ b/tests/test_news_fetcher.py @@ -15,7 +15,7 @@ def is_recent_date(date_str): parsed_date = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S %z") cutoff_date = datetime.now(timezone.utc) - timedelta(hours=24) return parsed_date >= cutoff_date - except: + except Exception: return False def test_news_fetcher(): @@ -75,7 +75,7 @@ def test_news_fetcher(): return True - except Exception as e: + except Exception: logger.exception("Test failed with exception") return False diff --git a/tests/test_wordpress.py b/tests/test_wordpress.py index 6f1c923..d8593b6 100644 --- a/tests/test_wordpress.py +++ b/tests/test_wordpress.py @@ -33,7 +33,7 @@ def test_wordpress_post(): logger.info(f"Raw response:\n{json.dumps(result, indent=2)}") if isinstance(result, dict) and 'id' in result: - logger.info(f"Post created successfully!") + logger.info("Post created successfully!") logger.info(f"Post ID: {result['id']}") logger.info(f"Post URL: {result.get('link', 'No link available')}") logger.info(f"Post Status: {result.get('status', 'unknown')}") @@ -48,6 +48,6 @@ def test_wordpress_post(): if __name__ == "__main__": try: test_wordpress_post() - except Exception as e: + except Exception: logger.error("Test failed", exc_info=True) sys.exit(1) diff --git a/tests/test_wordpress_mock.py b/tests/test_wordpress_mock.py index 6ad09ae..7b0c0cd 100644 --- a/tests/test_wordpress_mock.py +++ b/tests/test_wordpress_mock.py @@ -1,7 +1,6 @@ import unittest from unittest.mock import patch, MagicMock from tools.wordpress_poster_tool import WordPressPosterTool -import requests class TestWordPressPosterTool(unittest.TestCase): def setUp(self): diff --git a/tests/test_wordpress_poster.py b/tests/test_wordpress_poster.py index bd6991a..1ba889d 100644 --- a/tests/test_wordpress_poster.py +++ b/tests/test_wordpress_poster.py @@ -107,9 +107,12 @@ def test_missing_env_vars(): original_pass = os.environ.get('WORDPRESS_PASS') # Temporarily remove environment variables - if 'WORDPRESS_URL' in os.environ: del os.environ['WORDPRESS_URL'] - if 'WORDPRESS_USER' in os.environ: del os.environ['WORDPRESS_USER'] - if 'WORDPRESS_PASS' in os.environ: del os.environ['WORDPRESS_PASS'] + if 'WORDPRESS_URL' in os.environ: + del os.environ['WORDPRESS_URL'] + if 'WORDPRESS_USER' in os.environ: + del os.environ['WORDPRESS_USER'] + if 'WORDPRESS_PASS' in os.environ: + del os.environ['WORDPRESS_PASS'] try: tool = WordPressPosterTool( @@ -124,6 +127,9 @@ def test_missing_env_vars(): assert 'WORDPRESS_URL not set' in str(exc_info.value) finally: # Restore environment variables - if original_url: os.environ['WORDPRESS_URL'] = original_url - if original_user: os.environ['WORDPRESS_USER'] = original_user - if original_pass: os.environ['WORDPRESS_PASS'] = original_pass + if original_url: + os.environ['WORDPRESS_URL'] = original_url + if original_user: + os.environ['WORDPRESS_USER'] = original_user + if original_pass: + os.environ['WORDPRESS_PASS'] = original_pass diff --git a/tests/test_wordpress_tags.py b/tests/test_wordpress_tags.py index f54c351..ad7aecc 100644 --- a/tests/test_wordpress_tags.py +++ b/tests/test_wordpress_tags.py @@ -1,7 +1,5 @@ -import os import pytest import responses -import requests from requests.auth import HTTPBasicAuth from dotenv import load_dotenv from tools.wordpress_poster_tool import WordPressPosterTool diff --git a/tools/news_fetcher_tool.py b/tools/news_fetcher_tool.py index daca69e..7910049 100644 --- a/tools/news_fetcher_tool.py +++ b/tools/news_fetcher_tool.py @@ -4,7 +4,7 @@ from logger import setup_logger import time from datetime import datetime, timezone, timedelta -from typing import List, Dict, Any +from typing import Dict, Any logger = setup_logger() diff --git a/tools/wordpress_poster_tool.py b/tools/wordpress_poster_tool.py index 1c67f9b..534bd4b 100644 --- a/tools/wordpress_poster_tool.py +++ b/tools/wordpress_poster_tool.py @@ -6,9 +6,7 @@ from dotenv import load_dotenv from requests.auth import HTTPBasicAuth from logger import setup_logger -from typing import Dict, Any, List, Tuple, Optional, Union -from urllib.parse import urljoin, urlparse -import re +from typing import Dict, Any, List, Tuple, Optional import time logger = setup_logger() @@ -127,7 +125,7 @@ def _validate_response(self, response: requests.Response) -> Dict[str, Any]: except requests.exceptions.JSONDecodeError: raise ValueError(f"Invalid JSON response: {response.text}") - except requests.exceptions.HTTPError as e: + except requests.exceptions.HTTPError: if response.status_code == 401: raise ValueError("Authentication failed. Check your WordPress credentials.") elif response.status_code == 404: