tallyfy 1.0.7__tar.gz → 1.0.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of tallyfy might be problematic. Click here for more details.
- {tallyfy-1.0.7 → tallyfy-1.0.8}/CHANGELOG.md +1 -1
- {tallyfy-1.0.7/tallyfy.egg-info → tallyfy-1.0.8}/PKG-INFO +2 -2
- {tallyfy-1.0.7 → tallyfy-1.0.8}/README.md +1 -1
- {tallyfy-1.0.7 → tallyfy-1.0.8}/pyproject.toml +1 -1
- {tallyfy-1.0.7 → tallyfy-1.0.8}/setup.py +1 -1
- tallyfy-1.0.8/tallyfy/organization_management/__init__.py +26 -0
- tallyfy-1.0.8/tallyfy/organization_management/base.py +76 -0
- tallyfy-1.0.8/tallyfy/organization_management/retrieval.py +39 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8/tallyfy.egg-info}/PKG-INFO +2 -2
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy.egg-info/SOURCES.txt +3 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/.github/workflows/build-whl.yml +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/LICENSE +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/setup.cfg +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/__init__.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/core.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/form_fields_management/__init__.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/form_fields_management/base.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/form_fields_management/crud_operations.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/form_fields_management/options_management.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/form_fields_management/suggestions.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/models.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/task_management/__init__.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/task_management/base.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/task_management/creation.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/task_management/retrieval.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/task_management/search.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/template_management/__init__.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/template_management/analysis.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/template_management/automation.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/template_management/base.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/template_management/basic_operations.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/template_management/health_assessment.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/user_management/__init__.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/user_management/base.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/user_management/invitation.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy/user_management/retrieval.py +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy.egg-info/dependency_links.txt +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy.egg-info/not-zip-safe +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy.egg-info/requires.txt +0 -0
- {tallyfy-1.0.7 → tallyfy-1.0.8}/tallyfy.egg-info/top_level.txt +0 -0
|
@@ -5,7 +5,7 @@ All notable changes to the Tallyfy SDK will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [1.0.
|
|
8
|
+
## [1.0.8] - 2025-07-29
|
|
9
9
|
|
|
10
10
|
### Changed
|
|
11
11
|
- **BREAKING**: Refactored user management from monolithic to modular architecture
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tallyfy
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.8
|
|
4
4
|
Summary: A comprehensive Python SDK for interacting with the Tallyfy API
|
|
5
5
|
Home-page: https://github.com/tallyfy/tallyfy-sdk
|
|
6
6
|
Author: Tallyfy
|
|
@@ -738,5 +738,5 @@ For bugs, feature requests, or questions:
|
|
|
738
738
|
2. Contact us at: support@tallyfy.com
|
|
739
739
|
---
|
|
740
740
|
|
|
741
|
-
**Version:** 1.0.
|
|
741
|
+
**Version:** 1.0.8
|
|
742
742
|
**Last Updated:** 2025
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Organization management module for Tallyfy SDK
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from .base import OrganizationManagerBase
|
|
6
|
+
from .retrieval import OrganizationRetrieval
|
|
7
|
+
|
|
8
|
+
class OrganizationManager(OrganizationRetrieval):
|
|
9
|
+
"""
|
|
10
|
+
Complete organization management interface combining all functionality.
|
|
11
|
+
|
|
12
|
+
This class provides access to:
|
|
13
|
+
- Organization retrieval operations
|
|
14
|
+
|
|
15
|
+
Example:
|
|
16
|
+
>>> from tallyfy import TallyfySDK
|
|
17
|
+
>>> sdk = TallyfySDK(api_key="your_api_key")
|
|
18
|
+
>>> orgs = sdk.organizations.get_current_user_organizations()
|
|
19
|
+
>>> print(f"User belongs to {len(orgs.data)} organizations")
|
|
20
|
+
"""
|
|
21
|
+
pass
|
|
22
|
+
|
|
23
|
+
# Maintain backward compatibility
|
|
24
|
+
OrganizationManagement = OrganizationManager
|
|
25
|
+
|
|
26
|
+
__all__ = ['OrganizationManager', 'OrganizationManagement', 'OrganizationRetrieval', 'OrganizationManagerBase']
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Base class for organization management operations
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from typing import Dict, Any, List, Optional
|
|
7
|
+
from ..models import TallyfyError
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class OrganizationManagerBase:
|
|
11
|
+
"""Base class providing common functionality for organization management operations"""
|
|
12
|
+
|
|
13
|
+
def __init__(self, sdk):
|
|
14
|
+
"""
|
|
15
|
+
Initialize the organization manager base.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
sdk: The main Tallyfy SDK instance
|
|
19
|
+
"""
|
|
20
|
+
self.sdk = sdk
|
|
21
|
+
self.logger = logging.getLogger(f"{__name__}.{self.__class__.__name__}")
|
|
22
|
+
|
|
23
|
+
def _extract_data(self, response_data: Dict[str, Any], default_empty: bool = True) -> Any:
|
|
24
|
+
"""
|
|
25
|
+
Extract data from API response.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
response_data: Raw API response
|
|
29
|
+
default_empty: Return empty list if no data found
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Extracted data
|
|
33
|
+
"""
|
|
34
|
+
if not response_data:
|
|
35
|
+
return [] if default_empty else None
|
|
36
|
+
|
|
37
|
+
# Handle direct data responses
|
|
38
|
+
if 'data' in response_data:
|
|
39
|
+
return response_data['data']
|
|
40
|
+
|
|
41
|
+
# Handle responses where the main content is directly available
|
|
42
|
+
# This is common for single item responses
|
|
43
|
+
return response_data if not default_empty else []
|
|
44
|
+
|
|
45
|
+
def _handle_api_error(self, error: Exception, operation: str, **context) -> None:
|
|
46
|
+
"""
|
|
47
|
+
Handle and log API errors consistently.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
error: The exception that occurred
|
|
51
|
+
operation: Description of the operation that failed
|
|
52
|
+
**context: Additional context for debugging
|
|
53
|
+
"""
|
|
54
|
+
context_str = ", ".join([f"{k}={v}" for k, v in context.items()])
|
|
55
|
+
error_message = f"Failed to {operation}"
|
|
56
|
+
if context_str:
|
|
57
|
+
error_message += f" ({context_str})"
|
|
58
|
+
|
|
59
|
+
self.logger.error(f"{error_message}: {str(error)}")
|
|
60
|
+
|
|
61
|
+
if isinstance(error, TallyfyError):
|
|
62
|
+
raise error
|
|
63
|
+
else:
|
|
64
|
+
raise TallyfyError(f"{error_message}: {str(error)}")
|
|
65
|
+
|
|
66
|
+
def _build_query_params(self, **kwargs) -> Dict[str, Any]:
|
|
67
|
+
"""
|
|
68
|
+
Build query parameters for API requests.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
**kwargs: Parameters to include in the query string
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Dictionary of query parameters with None values filtered out
|
|
75
|
+
"""
|
|
76
|
+
return {key: value for key, value in kwargs.items() if value is not None}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Organization retrieval operations
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import List, Optional
|
|
6
|
+
from .base import OrganizationManagerBase
|
|
7
|
+
from ..models import Organization, OrganizationsList, TallyfyError
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class OrganizationRetrieval(OrganizationManagerBase):
|
|
11
|
+
"""Handles organization retrieval operations"""
|
|
12
|
+
|
|
13
|
+
def get_current_user_organizations(self, page: int = 1, per_page: int = 10) -> OrganizationsList:
|
|
14
|
+
"""
|
|
15
|
+
Get all organizations the current member is a part of.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
page: Page number (default: 1)
|
|
19
|
+
per_page: Number of results per page (default: 10, max: 100)
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
OrganizationsList object containing organizations and pagination metadata
|
|
23
|
+
|
|
24
|
+
Raises:
|
|
25
|
+
TallyfyError: If the request fails
|
|
26
|
+
"""
|
|
27
|
+
try:
|
|
28
|
+
endpoint = "me/organizations"
|
|
29
|
+
params = self._build_query_params(page=page, per_page=min(per_page, 100))
|
|
30
|
+
|
|
31
|
+
response_data = self.sdk._make_request('GET', endpoint, params=params)
|
|
32
|
+
|
|
33
|
+
# Return the structured response with pagination
|
|
34
|
+
return OrganizationsList.from_dict(response_data)
|
|
35
|
+
|
|
36
|
+
except TallyfyError:
|
|
37
|
+
raise
|
|
38
|
+
except Exception as e:
|
|
39
|
+
self._handle_api_error(e, "get my organizations", page=page, per_page=per_page)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tallyfy
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.8
|
|
4
4
|
Summary: A comprehensive Python SDK for interacting with the Tallyfy API
|
|
5
5
|
Home-page: https://github.com/tallyfy/tallyfy-sdk
|
|
6
6
|
Author: Tallyfy
|
|
@@ -738,5 +738,5 @@ For bugs, feature requests, or questions:
|
|
|
738
738
|
2. Contact us at: support@tallyfy.com
|
|
739
739
|
---
|
|
740
740
|
|
|
741
|
-
**Version:** 1.0.
|
|
741
|
+
**Version:** 1.0.8
|
|
742
742
|
**Last Updated:** 2025
|
|
@@ -18,6 +18,9 @@ tallyfy/form_fields_management/base.py
|
|
|
18
18
|
tallyfy/form_fields_management/crud_operations.py
|
|
19
19
|
tallyfy/form_fields_management/options_management.py
|
|
20
20
|
tallyfy/form_fields_management/suggestions.py
|
|
21
|
+
tallyfy/organization_management/__init__.py
|
|
22
|
+
tallyfy/organization_management/base.py
|
|
23
|
+
tallyfy/organization_management/retrieval.py
|
|
21
24
|
tallyfy/task_management/__init__.py
|
|
22
25
|
tallyfy/task_management/base.py
|
|
23
26
|
tallyfy/task_management/creation.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|