tallyfy 1.0.5__tar.gz → 1.0.7__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 (37) hide show
  1. {tallyfy-1.0.5 → tallyfy-1.0.7}/CHANGELOG.md +1 -1
  2. {tallyfy-1.0.5/tallyfy.egg-info → tallyfy-1.0.7}/PKG-INFO +2 -2
  3. {tallyfy-1.0.5 → tallyfy-1.0.7}/README.md +1 -1
  4. {tallyfy-1.0.5 → tallyfy-1.0.7}/pyproject.toml +1 -1
  5. {tallyfy-1.0.5 → tallyfy-1.0.7}/setup.py +1 -1
  6. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/__init__.py +4 -1
  7. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/core.py +9 -0
  8. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/models.py +243 -1
  9. {tallyfy-1.0.5 → tallyfy-1.0.7/tallyfy.egg-info}/PKG-INFO +2 -2
  10. {tallyfy-1.0.5 → tallyfy-1.0.7}/.github/workflows/build-whl.yml +0 -0
  11. {tallyfy-1.0.5 → tallyfy-1.0.7}/LICENSE +0 -0
  12. {tallyfy-1.0.5 → tallyfy-1.0.7}/setup.cfg +0 -0
  13. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/form_fields_management/__init__.py +0 -0
  14. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/form_fields_management/base.py +0 -0
  15. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/form_fields_management/crud_operations.py +0 -0
  16. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/form_fields_management/options_management.py +0 -0
  17. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/form_fields_management/suggestions.py +0 -0
  18. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/task_management/__init__.py +0 -0
  19. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/task_management/base.py +0 -0
  20. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/task_management/creation.py +0 -0
  21. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/task_management/retrieval.py +0 -0
  22. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/task_management/search.py +0 -0
  23. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/template_management/__init__.py +0 -0
  24. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/template_management/analysis.py +0 -0
  25. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/template_management/automation.py +0 -0
  26. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/template_management/base.py +0 -0
  27. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/template_management/basic_operations.py +0 -0
  28. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/template_management/health_assessment.py +0 -0
  29. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/user_management/__init__.py +0 -0
  30. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/user_management/base.py +0 -0
  31. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/user_management/invitation.py +0 -0
  32. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy/user_management/retrieval.py +0 -0
  33. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy.egg-info/SOURCES.txt +0 -0
  34. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy.egg-info/dependency_links.txt +0 -0
  35. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy.egg-info/not-zip-safe +0 -0
  36. {tallyfy-1.0.5 → tallyfy-1.0.7}/tallyfy.egg-info/requires.txt +0 -0
  37. {tallyfy-1.0.5 → tallyfy-1.0.7}/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.5] - 2025-07-29
8
+ ## [1.0.7] - 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.5
3
+ Version: 1.0.7
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.5
741
+ **Version:** 1.0.7
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.5
696
+ **Version:** 1.0.7
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.5"
7
+ version = "1.0.7"
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.5'
20
+ return '1.0.7'
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,12 +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
 
163
+ def get_current_user_info(self, org_id: str):
164
+ """Get current user information."""
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)
161
170
  # Backward compatibility methods - delegate to management modules
162
171
  def get_organization_users(self, org_id: str, with_groups: bool = False):
163
172
  """Get all organization members with full profile data."""
@@ -70,6 +70,7 @@ class User:
70
70
  date_format: Optional[str] = None
71
71
  last_known_ip: Optional[str] = None
72
72
  last_known_country: Optional[str] = None
73
+ role: Optional[str] = None
73
74
 
74
75
  @classmethod
75
76
  def from_dict(cls, data: Dict[str, Any]) -> 'User':
@@ -110,7 +111,8 @@ class User:
110
111
  status=data.get('status'),
111
112
  date_format=data.get('date_format'),
112
113
  last_known_ip=data.get('last_known_ip'),
113
- last_known_country=data.get('last_known_country')
114
+ last_known_country=data.get('last_known_country'),
115
+ role=data.get('role')
114
116
  )
115
117
 
116
118
 
@@ -1054,6 +1056,246 @@ class PaginationMeta:
1054
1056
  )
1055
1057
 
1056
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
+
1057
1299
  @dataclass
1058
1300
  class TemplatesList:
1059
1301
  """Templates list response with pagination"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tallyfy
3
- Version: 1.0.5
3
+ Version: 1.0.7
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.5
741
+ **Version:** 1.0.7
742
742
  **Last Updated:** 2025
File without changes
File without changes