tallyfy 1.0.6__py3-none-any.whl → 1.0.7__py3-none-any.whl

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/__init__.py CHANGED
@@ -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
  ]
tallyfy/core.py CHANGED
@@ -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."""
tallyfy/models.py CHANGED
@@ -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"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tallyfy
3
- Version: 1.0.6
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.6
741
+ **Version:** 1.0.7
742
742
  **Last Updated:** 2025
@@ -1,6 +1,6 @@
1
- tallyfy/__init__.py,sha256=vE4XedttVizpD6kJHpTkg686xmokJwQ4rZ749yUCKEA,638
2
- tallyfy/core.py,sha256=ZEQQIIUDajH8t4RVPxtqu9VR2mFurDBH_o5Hzl0YUUA,16590
3
- tallyfy/models.py,sha256=6TcrkaLtbp7zz1ZCW6W3Gk5k9Jyp305I1QpLRgO1uw8,38136
1
+ tallyfy/__init__.py,sha256=J9as-n31M7Q9A6Do_UpzAUIAkSmSyIiD9Sb-9wVa6ac,776
2
+ tallyfy/core.py,sha256=7o-SyAhlLYQaz0T56B5srjKkARegUFpKQes4BBp71fc,16946
3
+ tallyfy/models.py,sha256=mdppunITlCRsDj0K8qmr0GKrvkPtzzqDHTPLB7utZVk,48338
4
4
  tallyfy/form_fields_management/__init__.py,sha256=epEFynMhcKUKJhY58ZtZ_fCkreBMtg9HbbEQouvK8FM,2567
5
5
  tallyfy/form_fields_management/base.py,sha256=6YH5wGTlG1EDEuEFxROz4CPadNHOVX1UZY1zLlfTqbg,3215
6
6
  tallyfy/form_fields_management/crud_operations.py,sha256=3XCJunGwMo8z4we8fva8zRryKajBcQMt9Jgg_Y_QM5Q,8877
@@ -21,8 +21,8 @@ tallyfy/user_management/__init__.py,sha256=LTyxJ7i4JrsUMf8QMdtrLdwbgtv8_mmMi8eUm
21
21
  tallyfy/user_management/base.py,sha256=jD5jOAu3y0K7fumSH65t9zFRDLriOV-YYPZSuJzYuTE,4681
22
22
  tallyfy/user_management/invitation.py,sha256=Ss1Gtii-sS02GuY-XUPYi7dHwAKWMkaG_tRFVOfS_2Q,11395
23
23
  tallyfy/user_management/retrieval.py,sha256=M5xFlY2IPIR2b5TUbF0YF2Cm12Mdnu5ZU1iahBFI1vA,11696
24
- tallyfy-1.0.6.dist-info/licenses/LICENSE,sha256=8HUsrXnc3l2sZxhPV9Z1gYinq76Q2Ym7ahYJy57QlLc,1063
25
- tallyfy-1.0.6.dist-info/METADATA,sha256=ayLEgfiP9ESfd0MH2HAfYGhVgo3guelApM2QabEAQQo,26359
26
- tallyfy-1.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- tallyfy-1.0.6.dist-info/top_level.txt,sha256=yIycWbR61EZJD0MYRPwUQjOS2XZw5B5jCWx1IP73KcM,8
28
- tallyfy-1.0.6.dist-info/RECORD,,
24
+ tallyfy-1.0.7.dist-info/licenses/LICENSE,sha256=8HUsrXnc3l2sZxhPV9Z1gYinq76Q2Ym7ahYJy57QlLc,1063
25
+ tallyfy-1.0.7.dist-info/METADATA,sha256=ubTQlHzZnNEbfGa2dDYSFQHmnF9JnYSYoRwjF_iMsCo,26359
26
+ tallyfy-1.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
+ tallyfy-1.0.7.dist-info/top_level.txt,sha256=yIycWbR61EZJD0MYRPwUQjOS2XZw5B5jCWx1IP73KcM,8
28
+ tallyfy-1.0.7.dist-info/RECORD,,