tallyfy 1.0.6__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.

Files changed (40) hide show
  1. {tallyfy-1.0.6 → tallyfy-1.0.8}/CHANGELOG.md +1 -1
  2. {tallyfy-1.0.6/tallyfy.egg-info → tallyfy-1.0.8}/PKG-INFO +2 -2
  3. {tallyfy-1.0.6 → tallyfy-1.0.8}/README.md +1 -1
  4. {tallyfy-1.0.6 → tallyfy-1.0.8}/pyproject.toml +1 -1
  5. {tallyfy-1.0.6 → tallyfy-1.0.8}/setup.py +1 -1
  6. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/__init__.py +4 -1
  7. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/core.py +6 -0
  8. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/models.py +240 -0
  9. tallyfy-1.0.8/tallyfy/organization_management/__init__.py +26 -0
  10. tallyfy-1.0.8/tallyfy/organization_management/base.py +76 -0
  11. tallyfy-1.0.8/tallyfy/organization_management/retrieval.py +39 -0
  12. {tallyfy-1.0.6 → tallyfy-1.0.8/tallyfy.egg-info}/PKG-INFO +2 -2
  13. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy.egg-info/SOURCES.txt +3 -0
  14. {tallyfy-1.0.6 → tallyfy-1.0.8}/.github/workflows/build-whl.yml +0 -0
  15. {tallyfy-1.0.6 → tallyfy-1.0.8}/LICENSE +0 -0
  16. {tallyfy-1.0.6 → tallyfy-1.0.8}/setup.cfg +0 -0
  17. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/form_fields_management/__init__.py +0 -0
  18. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/form_fields_management/base.py +0 -0
  19. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/form_fields_management/crud_operations.py +0 -0
  20. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/form_fields_management/options_management.py +0 -0
  21. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/form_fields_management/suggestions.py +0 -0
  22. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/task_management/__init__.py +0 -0
  23. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/task_management/base.py +0 -0
  24. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/task_management/creation.py +0 -0
  25. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/task_management/retrieval.py +0 -0
  26. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/task_management/search.py +0 -0
  27. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/template_management/__init__.py +0 -0
  28. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/template_management/analysis.py +0 -0
  29. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/template_management/automation.py +0 -0
  30. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/template_management/base.py +0 -0
  31. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/template_management/basic_operations.py +0 -0
  32. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/template_management/health_assessment.py +0 -0
  33. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/user_management/__init__.py +0 -0
  34. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/user_management/base.py +0 -0
  35. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/user_management/invitation.py +0 -0
  36. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy/user_management/retrieval.py +0 -0
  37. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy.egg-info/dependency_links.txt +0 -0
  38. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy.egg-info/not-zip-safe +0 -0
  39. {tallyfy-1.0.6 → tallyfy-1.0.8}/tallyfy.egg-info/requires.txt +0 -0
  40. {tallyfy-1.0.6 → 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.6] - 2025-07-29
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.6
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.6
741
+ **Version:** 1.0.8
742
742
  **Last Updated:** 2025
@@ -693,5 +693,5 @@ For bugs, feature requests, or questions:
693
693
  2. Contact us at: support@tallyfy.com
694
694
  ---
695
695
 
696
- **Version:** 1.0.6
696
+ **Version:** 1.0.8
697
697
  **Last Updated:** 2025
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tallyfy"
7
- version = "1.0.6"
7
+ version = "1.0.8"
8
8
  description = "A comprehensive Python SDK for interacting with the Tallyfy API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.7"
@@ -17,7 +17,7 @@ def get_version():
17
17
  for line in f:
18
18
  if line.startswith('__version__'):
19
19
  return line.split('=')[1].strip().strip('"').strip("'")
20
- return '1.0.6'
20
+ return '1.0.8'
21
21
 
22
22
  setup(
23
23
  name='tallyfy',
@@ -8,6 +8,7 @@ from .user_management import UserManager, UserManagement
8
8
  from .task_management import TaskManager, TaskManagement
9
9
  from .template_management import TemplateManager, TemplateManagement
10
10
  from .form_fields_management import FormFieldManager, FormFieldManagement
11
+ from .organization_management import OrganizationManager, OrganizationManagement
11
12
 
12
13
  __version__ = "1.0.0"
13
14
  __all__ = [
@@ -20,5 +21,7 @@ __all__ = [
20
21
  "TemplateManager",
21
22
  "TemplateManagement",
22
23
  "FormFieldManager",
23
- "FormFieldManagement"
24
+ "FormFieldManagement",
25
+ "OrganizationManager",
26
+ "OrganizationManagement"
24
27
  ]
@@ -152,15 +152,21 @@ class TallyfySDK(BaseSDK):
152
152
  from .task_management import TaskManager
153
153
  from .template_management import TemplateManager
154
154
  from .form_fields_management import FormFieldManager
155
+ from .organization_management import OrganizationManager
155
156
 
156
157
  self.users = UserManager(self)
157
158
  self.tasks = TaskManager(self)
158
159
  self.templates = TemplateManager(self)
159
160
  self.form_fields = FormFieldManager(self)
161
+ self.organizations = OrganizationManager(self)
160
162
 
161
163
  def get_current_user_info(self, org_id: str):
162
164
  """Get current user information."""
163
165
  return self.users.get_current_user_info(org_id)
166
+
167
+ def get_current_user_organizations(self, page: int = 1, per_page: int = 10):
168
+ """Get all organizations the current member is a part of."""
169
+ return self.organizations.get_current_user_organizations(page, per_page)
164
170
  # Backward compatibility methods - delegate to management modules
165
171
  def get_organization_users(self, org_id: str, with_groups: bool = False):
166
172
  """Get all organization members with full profile data."""
@@ -1056,6 +1056,246 @@ class PaginationMeta:
1056
1056
  )
1057
1057
 
1058
1058
 
1059
+ @dataclass
1060
+ class OrganizationWorkingDays:
1061
+ """Organization working days configuration"""
1062
+ Monday: Optional[Dict[str, Any]] = None
1063
+ Tuesday: Optional[Dict[str, Any]] = None
1064
+ Wednesday: Optional[Dict[str, Any]] = None
1065
+ Thursday: Optional[Dict[str, Any]] = None
1066
+ Friday: Optional[Dict[str, Any]] = None
1067
+ Saturday: Optional[Dict[str, Any]] = None
1068
+ Sunday: Optional[Dict[str, Any]] = None
1069
+
1070
+ @classmethod
1071
+ def from_dict(cls, data: Dict[str, Any]) -> 'OrganizationWorkingDays':
1072
+ """Create OrganizationWorkingDays instance from dictionary"""
1073
+ return cls(
1074
+ Monday=data.get('Monday'),
1075
+ Tuesday=data.get('Tuesday'),
1076
+ Wednesday=data.get('Wednesday'),
1077
+ Thursday=data.get('Thursday'),
1078
+ Friday=data.get('Friday'),
1079
+ Saturday=data.get('Saturday'),
1080
+ Sunday=data.get('Sunday')
1081
+ )
1082
+
1083
+
1084
+ @dataclass
1085
+ class OrganizationDefaultDeadline:
1086
+ """Organization default deadline configuration"""
1087
+ type: str = "days"
1088
+ value: int = 5
1089
+
1090
+ @classmethod
1091
+ def from_dict(cls, data: Dict[str, Any]) -> 'OrganizationDefaultDeadline':
1092
+ """Create OrganizationDefaultDeadline instance from dictionary"""
1093
+ return cls(
1094
+ type=data.get('type', 'days'),
1095
+ value=data.get('value', 5)
1096
+ )
1097
+
1098
+
1099
+ @dataclass
1100
+ class OrganizationAutoArchive:
1101
+ """Organization auto archive configuration"""
1102
+ unit: str = "weeks"
1103
+ value: int = 52
1104
+
1105
+ @classmethod
1106
+ def from_dict(cls, data: Dict[str, Any]) -> 'OrganizationAutoArchive':
1107
+ """Create OrganizationAutoArchive instance from dictionary"""
1108
+ return cls(
1109
+ unit=data.get('unit', 'weeks'),
1110
+ value=data.get('value', 52)
1111
+ )
1112
+
1113
+
1114
+ @dataclass
1115
+ class Organization:
1116
+ """Organization data model"""
1117
+ id: str
1118
+ name: str
1119
+ industry: Optional[str] = None
1120
+ description: Optional[str] = None
1121
+ address1: Optional[str] = None
1122
+ address2: Optional[str] = None
1123
+ created_on: Optional[str] = None
1124
+ last_updated: Optional[str] = None
1125
+ live_support_enabled: int = 0
1126
+ org_logo: Optional[str] = None
1127
+ settings: Optional[str] = None
1128
+ country: Optional[str] = None
1129
+ state: Optional[str] = None
1130
+ city: Optional[str] = None
1131
+ zipcode: Optional[str] = None
1132
+ users_count: int = 0
1133
+ payment_state: Optional[str] = None
1134
+ team_size: Optional[List[int]] = None
1135
+ signup_survey: Optional[str] = None
1136
+ in_trial: bool = False
1137
+ analytics_enabled: bool = True
1138
+ limit_trial_features: bool = False
1139
+ real_time_billing: bool = True
1140
+ saml_enabled: bool = False
1141
+ saml_login_url: Optional[str] = None
1142
+ sso_default_role: Optional[str] = None
1143
+ preferred_trial_plan: Optional[str] = None
1144
+ google_analytics_id: Optional[str] = None
1145
+ mixpanel_token: Optional[str] = None
1146
+ plan_code: Optional[str] = None
1147
+ auto_join_signups: bool = False
1148
+ home_bg: Optional[str] = None
1149
+ guest_onboarding_snippet: Optional[str] = None
1150
+ maximum_group_assignment_limit: int = 0
1151
+ allow_user_invite: bool = True
1152
+ allow_manage_groups: bool = True
1153
+ working_days: Optional[OrganizationWorkingDays] = None
1154
+ deadline_setting: Optional[str] = None
1155
+ wyiwyg: bool = True
1156
+ cadence_days: Optional[List[str]] = None
1157
+ guest_cadence_days: Optional[List[str]] = None
1158
+ timezone: Optional[str] = None
1159
+ default_deadline: Optional[OrganizationDefaultDeadline] = None
1160
+ auto_archive: bool = False
1161
+ auto_complete_tasks: bool = True
1162
+ auto_complete_task_months: int = 18
1163
+ light_role_error_snippet: Optional[str] = None
1164
+ azure_cognitive_service: Optional[str] = None
1165
+ global_css: Optional[str] = None
1166
+ error_404_template: Optional[str] = None
1167
+ enable_custom_404_error: bool = False
1168
+ enable_custom_smtp: bool = False
1169
+ onboarding_template_id: Optional[str] = None
1170
+ enable_onboarding_template: bool = True
1171
+ disable_min_members_billing: bool = False
1172
+ enable_light_users_billing: bool = False
1173
+ webhook_date_field_format: str = "yyyy-MM-ddTHH:mm:ssZ"
1174
+ purpose: Optional[str] = None
1175
+ process_today: Optional[str] = None
1176
+ restrict_blueprint_permissions: bool = False
1177
+ auto_archive_processes_after: Optional[OrganizationAutoArchive] = None
1178
+ use_generative_ai: bool = True
1179
+ homepage_snippet: Optional[str] = None
1180
+ onboarding_snippet: Optional[str] = None
1181
+ disabled_on: Optional[str] = None
1182
+ last_accessed: Optional[str] = None
1183
+ user_role: Optional[str] = None
1184
+
1185
+ def __post_init__(self):
1186
+ """Initialize empty lists if None"""
1187
+ if self.team_size is None:
1188
+ self.team_size = []
1189
+ if self.cadence_days is None:
1190
+ self.cadence_days = []
1191
+ if self.guest_cadence_days is None:
1192
+ self.guest_cadence_days = []
1193
+
1194
+ @classmethod
1195
+ def from_dict(cls, data: Dict[str, Any]) -> 'Organization':
1196
+ """Create Organization instance from dictionary"""
1197
+ working_days_data = data.get('working_days')
1198
+ working_days = OrganizationWorkingDays.from_dict(working_days_data) if working_days_data else None
1199
+
1200
+ default_deadline_data = data.get('default_deadline')
1201
+ default_deadline = OrganizationDefaultDeadline.from_dict(default_deadline_data) if default_deadline_data else None
1202
+
1203
+ auto_archive_processes_after_data = data.get('auto_archive_processes_after')
1204
+ auto_archive_processes_after = OrganizationAutoArchive.from_dict(auto_archive_processes_after_data) if auto_archive_processes_after_data else None
1205
+
1206
+ return cls(
1207
+ id=data.get('id', ''),
1208
+ name=data.get('name', ''),
1209
+ industry=data.get('industry'),
1210
+ description=data.get('description'),
1211
+ address1=data.get('address1'),
1212
+ address2=data.get('address2'),
1213
+ created_on=data.get('created_on'),
1214
+ last_updated=data.get('last_updated'),
1215
+ live_support_enabled=data.get('live_support_enabled', 0),
1216
+ org_logo=data.get('org_logo'),
1217
+ settings=data.get('settings'),
1218
+ country=data.get('country'),
1219
+ state=data.get('state'),
1220
+ city=data.get('city'),
1221
+ zipcode=data.get('zipcode'),
1222
+ users_count=data.get('users_count', 0),
1223
+ payment_state=data.get('payment_state'),
1224
+ team_size=data.get('team_size', []),
1225
+ signup_survey=data.get('signup_survey'),
1226
+ in_trial=data.get('in_trial', False),
1227
+ analytics_enabled=data.get('analytics_enabled', True),
1228
+ limit_trial_features=data.get('limit_trial_features', False),
1229
+ real_time_billing=data.get('real_time_billing', True),
1230
+ saml_enabled=data.get('saml_enabled', False),
1231
+ saml_login_url=data.get('saml_login_url'),
1232
+ sso_default_role=data.get('sso_default_role'),
1233
+ preferred_trial_plan=data.get('preferred_trial_plan'),
1234
+ google_analytics_id=data.get('google_analytics_id'),
1235
+ mixpanel_token=data.get('mixpanel_token'),
1236
+ plan_code=data.get('plan_code'),
1237
+ auto_join_signups=data.get('auto_join_signups', False),
1238
+ home_bg=data.get('home_bg'),
1239
+ guest_onboarding_snippet=data.get('guest_onboarding_snippet'),
1240
+ maximum_group_assignment_limit=data.get('maximum_group_assignment_limit', 0),
1241
+ allow_user_invite=data.get('allow_user_invite', True),
1242
+ allow_manage_groups=data.get('allow_manage_groups', True),
1243
+ working_days=working_days,
1244
+ deadline_setting=data.get('deadline_setting'),
1245
+ wyiwyg=data.get('wyiwyg', True),
1246
+ cadence_days=data.get('cadence_days', []),
1247
+ guest_cadence_days=data.get('guest_cadence_days', []),
1248
+ timezone=data.get('timezone'),
1249
+ default_deadline=default_deadline,
1250
+ auto_archive=data.get('auto_archive', False),
1251
+ auto_complete_tasks=data.get('auto_complete_tasks', True),
1252
+ auto_complete_task_months=data.get('auto_complete_task_months', 18),
1253
+ light_role_error_snippet=data.get('light_role_error_snippet'),
1254
+ azure_cognitive_service=data.get('azure_cognitive_service'),
1255
+ global_css=data.get('global_css'),
1256
+ error_404_template=data.get('error_404_template'),
1257
+ enable_custom_404_error=data.get('enable_custom_404_error', False),
1258
+ enable_custom_smtp=data.get('enable_custom_smtp', False),
1259
+ onboarding_template_id=data.get('onboarding_template_id'),
1260
+ enable_onboarding_template=data.get('enable_onboarding_template', True),
1261
+ disable_min_members_billing=data.get('disable_min_members_billing', False),
1262
+ enable_light_users_billing=data.get('enable_light_users_billing', False),
1263
+ webhook_date_field_format=data.get('webhook_date_field_format', 'yyyy-MM-ddTHH:mm:ssZ'),
1264
+ purpose=data.get('purpose'),
1265
+ process_today=data.get('process_today'),
1266
+ restrict_blueprint_permissions=data.get('restrict_blueprint_permissions', False),
1267
+ auto_archive_processes_after=auto_archive_processes_after,
1268
+ use_generative_ai=data.get('use_generative_ai', True),
1269
+ homepage_snippet=data.get('homepage_snippet'),
1270
+ onboarding_snippet=data.get('onboarding_snippet'),
1271
+ disabled_on=data.get('disabled_on'),
1272
+ last_accessed=data.get('last_accessed'),
1273
+ user_role=data.get('user_role')
1274
+ )
1275
+
1276
+
1277
+ @dataclass
1278
+ class OrganizationsList:
1279
+ """Organizations list response with pagination"""
1280
+ data: List[Organization]
1281
+ meta: PaginationMeta
1282
+
1283
+ @classmethod
1284
+ def from_dict(cls, data: Dict[str, Any]) -> 'OrganizationsList':
1285
+ """Create OrganizationsList instance from dictionary"""
1286
+ organizations_data = data.get('data', [])
1287
+ organizations = [Organization.from_dict(org_data) for org_data in organizations_data]
1288
+
1289
+ meta_data = data.get('meta', {})
1290
+ pagination_meta = meta_data.get('pagination', {})
1291
+ meta = PaginationMeta.from_dict(pagination_meta)
1292
+
1293
+ return cls(
1294
+ data=organizations,
1295
+ meta=meta
1296
+ )
1297
+
1298
+
1059
1299
  @dataclass
1060
1300
  class TemplatesList:
1061
1301
  """Templates list response with pagination"""
@@ -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.6
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.6
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