diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6bbfeb6..55e529d 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{".":"0.5.0"} +{".":"0.6.0"} diff --git a/CHANGELOG.md b/CHANGELOG.md index fd191bb..da9412a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.0](https://github.com/tagshelfsrl/alfred-python/compare/v0.5.0...v0.6.0) (2025-03-24) + + +### Features + +* enhance AlfredRealTimeClient with error handling and connection callbacks ([#44](https://github.com/tagshelfsrl/alfred-python/issues/44)) ([ac7aed5](https://github.com/tagshelfsrl/alfred-python/commit/ac7aed5747c2eff300460c2c5b0ff31c808c9f5c)) + ## [0.5.0](https://github.com/tagshelfsrl/alfred-python/compare/v0.4.0...v0.5.0) (2024-05-20) diff --git a/README.md b/README.md index a9cb879..4257653 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,16 @@ result = client.jobs.get("XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX") print(result) ``` +#### Get paginated jobs + +```python +# Get paginated jobs +response = client.jobs.get_all(page_size=None, current_page=None) +print(response.is_empty) +print(response.result) +print(response.total) +``` + #### Create job ```python @@ -190,7 +200,13 @@ auth_config = AuthConfiguration({ "api_key": "AXXXXXXXXXXXXXXXXXXXXXX" }) -client = AlfredRealTimeClient(config, auth_config, verbose=True) +client = AlfredRealTimeClient( + config, + auth_config, + verbose=False, + on_callback=None, + on_connect=None +) ``` ### File Events diff --git a/alfred/realtime/__init__.py b/alfred/realtime/__init__.py index 4075ffd..bbac754 100644 --- a/alfred/realtime/__init__.py +++ b/alfred/realtime/__init__.py @@ -13,7 +13,7 @@ class AlfredRealTimeClient: - def __init__(self, config: ConfigurationDict, auth_config: AuthConfiguration, verbose=False): + def __init__(self, config: ConfigurationDict, auth_config: AuthConfiguration, verbose=False, error_callback=None, on_connect=None): """ Initializes the AlfredRealTimeClient class. @@ -27,6 +27,8 @@ def __init__(self, config: ConfigurationDict, auth_config: AuthConfiguration, ve self.config = config self.auth_config = auth_config self.base_url = config.get("realtime_url") + self.error_callback = error_callback + self.on_connect = on_connect # Initialize logger self.logger = logging.getLogger("alfred-python") @@ -35,7 +37,6 @@ def __init__(self, config: ConfigurationDict, auth_config: AuthConfiguration, ve "level": "DEBUG" if verbose else "INFO", "name": "alfred-python" }) - print(self.logger.level) # Subscribe to connection life-cycle events. self.socket.on('connect', self.__on_connect) @@ -55,12 +56,15 @@ def __on_connect(self): Handles the 'connect' event. """ self.logger.info(f"Successfully connected to: {self.base_url}") + if self.on_connect: + self.on_connect() def __on_disconnect(self): """ Handles the 'disconnect' event. """ - self.logger.info("Disconnected from the server.") + if self.verbose: + self.logger.info("Disconnected from the server.") def __on_connect_error(self, err): """ @@ -69,9 +73,12 @@ def __on_connect_error(self, err): Args: err (str): The error message. """ - self.logger.info("Connection error: %s", err) + if self.verbose: + self.logger.error("Connection error: %s", err) self.disconnect() - raise Exception(f"Failed to connect to {self.base_url}: {err}") + # trigger error callback: + if self.error_callback: + self.error_callback(err) def __callback(self, event: Union[FileEvent, JobEvent, EventType], callback): """ @@ -122,3 +129,4 @@ def disconnect(self): """ self.logger.info("Closing connection...") self.socket.disconnect() + diff --git a/alfred/rest/jobs/base.py b/alfred/rest/jobs/base.py index 95f6b3e..14569a3 100644 --- a/alfred/rest/jobs/base.py +++ b/alfred/rest/jobs/base.py @@ -22,3 +22,13 @@ def get(self, job_id: Text) -> Any: Args: - job_id: Unique identifier of the Job. """ + + @abstractmethod + def get_all(self, page_size: int = None, current_page: int = None) -> Any: + """ + Fetches all jobs for a company + + Args: + - page_size: Number of jobs to fetch per page. + - current_page: Page number to fetch. + """ diff --git a/alfred/rest/jobs/v1.py b/alfred/rest/jobs/v1.py index bd3f627..8d5e08d 100644 --- a/alfred/rest/jobs/v1.py +++ b/alfred/rest/jobs/v1.py @@ -30,3 +30,19 @@ def get(self, job_id: Text): """ parsed_resp, _ = self.http_client.get(f"/api/job/detail/{job_id}") return parsed_resp + + def get_all(self, page_size: int = None, current_page: int = None): + """ + Fetches all jobs for a company + + Args: + - page_size: Number of jobs to fetch per page. + - current_page: Page number to fetch. + """ + params = {} + if page_size: + params["pageSize"] = page_size + if current_page: + params["currentPage"] = current_page + parsed_resp, _ = self.http_client.get("/api/job/all", params=params) + return parsed_resp diff --git a/pyproject.toml b/pyproject.toml index 8c139e8..c39e9b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "alfred-python" -version = "0.5.0" +version = "0.6.0" authors = [{ name = "Tagshelf LLC", email = "support@tagshelf.com" }] description = "Python library designed to simplify and streamline interactions with the Alfred API" readme = "README.md"