tallyfy 1.0.4__tar.gz → 1.0.6__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.6/CHANGELOG.md +79 -0
- {tallyfy-1.0.4/tallyfy.egg-info → tallyfy-1.0.6}/PKG-INFO +120 -56
- {tallyfy-1.0.4 → tallyfy-1.0.6}/README.md +118 -55
- {tallyfy-1.0.4 → tallyfy-1.0.6}/pyproject.toml +2 -1
- {tallyfy-1.0.4 → tallyfy-1.0.6}/setup.py +4 -3
- tallyfy-1.0.6/tallyfy/__init__.py +24 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6}/tallyfy/core.py +11 -8
- tallyfy-1.0.6/tallyfy/form_fields_management/__init__.py +70 -0
- tallyfy-1.0.6/tallyfy/form_fields_management/base.py +109 -0
- tallyfy-1.0.6/tallyfy/form_fields_management/crud_operations.py +234 -0
- tallyfy-1.0.6/tallyfy/form_fields_management/options_management.py +222 -0
- tallyfy-1.0.6/tallyfy/form_fields_management/suggestions.py +411 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6}/tallyfy/models.py +3 -1
- tallyfy-1.0.6/tallyfy/task_management/__init__.py +81 -0
- tallyfy-1.0.6/tallyfy/task_management/base.py +125 -0
- tallyfy-1.0.6/tallyfy/task_management/creation.py +221 -0
- tallyfy-1.0.6/tallyfy/task_management/retrieval.py +211 -0
- tallyfy-1.0.6/tallyfy/task_management/search.py +196 -0
- tallyfy-1.0.6/tallyfy/template_management/__init__.py +85 -0
- tallyfy-1.0.6/tallyfy/template_management/analysis.py +1093 -0
- tallyfy-1.0.6/tallyfy/template_management/automation.py +469 -0
- tallyfy-1.0.6/tallyfy/template_management/base.py +56 -0
- tallyfy-1.0.6/tallyfy/template_management/basic_operations.py +477 -0
- tallyfy-1.0.6/tallyfy/template_management/health_assessment.py +763 -0
- tallyfy-1.0.6/tallyfy/user_management/__init__.py +69 -0
- tallyfy-1.0.6/tallyfy/user_management/base.py +146 -0
- tallyfy-1.0.6/tallyfy/user_management/invitation.py +286 -0
- tallyfy-1.0.6/tallyfy/user_management/retrieval.py +339 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6/tallyfy.egg-info}/PKG-INFO +120 -56
- tallyfy-1.0.6/tallyfy.egg-info/SOURCES.txt +35 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6}/tallyfy.egg-info/requires.txt +1 -0
- tallyfy-1.0.4/CHANGELOG.md +0 -40
- tallyfy-1.0.4/tallyfy/BUILD.md +0 -5
- tallyfy-1.0.4/tallyfy/__init__.py +0 -20
- tallyfy-1.0.4/tallyfy/form_fields_management.py +0 -582
- tallyfy-1.0.4/tallyfy/task_management.py +0 -356
- tallyfy-1.0.4/tallyfy/template_management.py +0 -2607
- tallyfy-1.0.4/tallyfy/user_management.py +0 -235
- tallyfy-1.0.4/tallyfy.egg-info/SOURCES.txt +0 -20
- {tallyfy-1.0.4 → tallyfy-1.0.6}/.github/workflows/build-whl.yml +0 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6}/LICENSE +0 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6}/setup.cfg +0 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6}/tallyfy.egg-info/dependency_links.txt +0 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6}/tallyfy.egg-info/not-zip-safe +0 -0
- {tallyfy-1.0.4 → tallyfy-1.0.6}/tallyfy.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the Tallyfy SDK will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.6] - 2025-07-29
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **BREAKING**: Refactored user management from monolithic to modular architecture
|
|
12
|
+
- `user_management.py` → `user_management/` package with specialized modules
|
|
13
|
+
- New `UserManager` class replaces `UserManagement` (backward compatible alias maintained)
|
|
14
|
+
- Improved separation of concerns with dedicated retrieval and invitation modules
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **Enhanced User Management Features**:
|
|
18
|
+
- `get_user_by_email()` - Find users by email address with exact matching
|
|
19
|
+
- `get_guest_by_email()` - Find guests by email address with exact matching
|
|
20
|
+
- `search_members_by_name()` - Fuzzy search for users and guests by name
|
|
21
|
+
- `get_all_organization_members()` - Convenience method to get users and guests in one call
|
|
22
|
+
- `invite_multiple_users()` - Batch invitation support with default role/message handling
|
|
23
|
+
- `resend_invitation()` - Resend invitations with custom messaging
|
|
24
|
+
- `get_invitation_template_message()` - Generate customized invitation messages
|
|
25
|
+
- `validate_invitation_data()` - Validate invitation data before sending
|
|
26
|
+
|
|
27
|
+
- **Modular Architecture Improvements**:
|
|
28
|
+
- `user_management/base.py` - Common validation and error handling
|
|
29
|
+
- `user_management/retrieval.py` - User and guest retrieval operations
|
|
30
|
+
- `user_management/invitation.py` - User invitation operations with enhanced features
|
|
31
|
+
- Direct access to specialized modules via `sdk.users.retrieval` and `sdk.users.invitation`
|
|
32
|
+
|
|
33
|
+
### Improved
|
|
34
|
+
- **Enhanced Validation**: Comprehensive email validation with regex patterns
|
|
35
|
+
- **Better Error Handling**: Context-aware error messages with operation details
|
|
36
|
+
- **Query Parameter Handling**: Flexible parameter building with proper boolean conversion
|
|
37
|
+
- **Code Organization**: Clear separation between retrieval and invitation concerns
|
|
38
|
+
- **Type Safety**: Enhanced type hints and validation across all user operations
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
- **Python Keyword Conflicts**: Resolved issues with `with` keyword in query parameters
|
|
42
|
+
- **Import Compatibility**: Maintained full backward compatibility while enabling new functionality
|
|
43
|
+
|
|
44
|
+
### Deprecated
|
|
45
|
+
- `UserManagement` class name (use `UserManager` instead, though alias is maintained)
|
|
46
|
+
|
|
47
|
+
## [1.0.0] - 2025-06-25
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
- Initial release of Tallyfy SDK
|
|
51
|
+
- Complete user management functionality
|
|
52
|
+
- Task management with natural language processing
|
|
53
|
+
- Template management with automation support
|
|
54
|
+
- Form field management with AI-powered suggestions
|
|
55
|
+
- Comprehensive data models with type safety
|
|
56
|
+
- Error handling with automatic retry logic
|
|
57
|
+
- Session management and connection pooling
|
|
58
|
+
- Full API coverage for Tallyfy platform
|
|
59
|
+
|
|
60
|
+
### Features
|
|
61
|
+
- **User Management**: Organization members, guests, and invitations
|
|
62
|
+
- **Task Management**: Personal tasks, process tasks, and natural language creation
|
|
63
|
+
- **Template Management**: Template CRUD, automation rules, and health assessment
|
|
64
|
+
- **Form Fields**: Dynamic form field management with AI suggestions
|
|
65
|
+
- **Search**: Universal search across processes, templates, and tasks
|
|
66
|
+
- **Natural Language Processing**: Date extraction and task parsing
|
|
67
|
+
- **Error Handling**: Comprehensive error handling with detailed response data
|
|
68
|
+
- **Type Safety**: Full dataclass models with type hints
|
|
69
|
+
|
|
70
|
+
### Dependencies
|
|
71
|
+
- requests>=2.25.0
|
|
72
|
+
- typing-extensions>=4.0.0 (Python < 3.8)
|
|
73
|
+
|
|
74
|
+
### Development
|
|
75
|
+
- Python 3.7+ support
|
|
76
|
+
- Comprehensive test suite
|
|
77
|
+
- Type checking with mypy
|
|
78
|
+
- Code formatting with black
|
|
79
|
+
- Linting with flake8
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tallyfy
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.6
|
|
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
|
|
@@ -31,6 +31,7 @@ Description-Content-Type: text/markdown
|
|
|
31
31
|
License-File: LICENSE
|
|
32
32
|
Requires-Dist: requests>=2.25.0
|
|
33
33
|
Requires-Dist: typing-extensions>=4.0.0; python_version < "3.8"
|
|
34
|
+
Requires-Dist: email-validator==2.2.0
|
|
34
35
|
Provides-Extra: dev
|
|
35
36
|
Requires-Dist: pytest>=6.0.0; extra == "dev"
|
|
36
37
|
Requires-Dist: pytest-cov>=2.10.0; extra == "dev"
|
|
@@ -62,7 +63,7 @@ A comprehensive Python SDK for interacting with the Tallyfy API. This SDK provid
|
|
|
62
63
|
## Installation
|
|
63
64
|
|
|
64
65
|
```bash
|
|
65
|
-
pip install
|
|
66
|
+
pip install tallyfy
|
|
66
67
|
```
|
|
67
68
|
|
|
68
69
|
**Dependencies:**
|
|
@@ -101,12 +102,11 @@ The Tallyfy SDK follows a modular architecture with specialized management class
|
|
|
101
102
|
- **`TallyfySDK`** - Main SDK class that orchestrates all operations with backward compatibility methods
|
|
102
103
|
- **`BaseSDK`** - Base class with HTTP request handling, retry logic, and connection pooling
|
|
103
104
|
- **Management Modules:**
|
|
104
|
-
- `
|
|
105
|
-
- `
|
|
106
|
-
- `
|
|
107
|
-
- `
|
|
108
|
-
- **
|
|
109
|
-
- `DateExtractor` - Natural language date parsing and task extraction
|
|
105
|
+
- `UserManager` - User and guest operations with modular retrieval and invitation components
|
|
106
|
+
- `TaskManager` - Task and process operations with search and creation capabilities
|
|
107
|
+
- `TemplateManager` - Template/checklist operations with automation analysis and health assessment
|
|
108
|
+
- `FormFieldManager` - Form field operations with AI-powered suggestions and dropdown management
|
|
109
|
+
- **Error Handling:**
|
|
110
110
|
- `TallyfyError` - Custom exception handling with status codes and response data
|
|
111
111
|
|
|
112
112
|
### File Structure
|
|
@@ -116,10 +116,30 @@ tallyfy/
|
|
|
116
116
|
├── __init__.py # SDK exports and version
|
|
117
117
|
├── core.py # BaseSDK and TallyfySDK classes
|
|
118
118
|
├── models.py # Data models and types
|
|
119
|
-
├── user_management
|
|
120
|
-
├──
|
|
121
|
-
├──
|
|
122
|
-
├──
|
|
119
|
+
├── user_management/ # User and guest management (modular)
|
|
120
|
+
│ ├── __init__.py # UserManager with unified interface
|
|
121
|
+
│ ├── base.py # Common validation and error handling
|
|
122
|
+
│ ├── retrieval.py # User and guest retrieval operations
|
|
123
|
+
│ └── invitation.py # User invitation operations
|
|
124
|
+
├── task_management/ # Task and process management (modular)
|
|
125
|
+
│ ├── __init__.py # TaskManager with unified interface
|
|
126
|
+
│ ├── base.py # Common task operations base
|
|
127
|
+
│ ├── retrieval.py # Task and process retrieval
|
|
128
|
+
│ ├── search.py # Search functionality
|
|
129
|
+
│ └── creation.py # Task creation operations
|
|
130
|
+
├── template_management/ # Template management (modular)
|
|
131
|
+
│ ├── __init__.py # TemplateManager with unified interface
|
|
132
|
+
│ ├── base.py # Common template operations
|
|
133
|
+
│ ├── basic_operations.py # Template retrieval and CRUD operations
|
|
134
|
+
│ ├── automation.py # Automation rule management
|
|
135
|
+
│ ├── analysis.py # Template analysis and health checks
|
|
136
|
+
│ └── health_assessment.py # Template health assessment functionality
|
|
137
|
+
├── form_fields_management/ # Form field management (modular)
|
|
138
|
+
│ ├── __init__.py # FormFieldManager with unified interface
|
|
139
|
+
│ ├── base.py # Common form field operations
|
|
140
|
+
│ ├── crud_operations.py # CRUD operations for form fields
|
|
141
|
+
│ ├── options_management.py # Dropdown options management
|
|
142
|
+
│ └── suggestions.py # AI-powered field suggestions
|
|
123
143
|
└── README.md # This documentation
|
|
124
144
|
```
|
|
125
145
|
|
|
@@ -133,16 +153,19 @@ tallyfy/
|
|
|
133
153
|
- Comprehensive error handling with detailed error information
|
|
134
154
|
|
|
135
155
|
### 👥 User Management
|
|
156
|
+
- **Modular architecture** with specialized retrieval and invitation components
|
|
136
157
|
- Get organization members with full profile data (country, timezone, job details)
|
|
137
158
|
- Get minimal user lists for performance-critical operations
|
|
138
159
|
- Manage guests and external users with guest-specific features
|
|
139
|
-
-
|
|
140
|
-
-
|
|
160
|
+
- **Enhanced search capabilities** - Find users by email or name with fuzzy matching
|
|
161
|
+
- **Batch invitation support** - Invite multiple users with default roles and messages
|
|
162
|
+
- **Advanced invitation features** - Custom messages, role validation, and resend functionality
|
|
163
|
+
- Support for user groups and permissions with flexible query parameters
|
|
164
|
+
- **Convenience methods** - Get all members (users + guests) in a single call
|
|
141
165
|
|
|
142
166
|
### ✅ Task Management
|
|
143
167
|
- Get tasks for specific users or processes with filtering
|
|
144
168
|
- Create standalone tasks with rich assignment options
|
|
145
|
-
- **Natural language task creation** with automatic date/time extraction
|
|
146
169
|
- Search processes by name with fuzzy matching
|
|
147
170
|
- Advanced filtering for organization runs (status, owners, tags, etc.)
|
|
148
171
|
- Universal search across processes, templates, and tasks
|
|
@@ -175,16 +198,8 @@ tallyfy/
|
|
|
175
198
|
- Exact and fuzzy matching with relevance scoring
|
|
176
199
|
- Pagination support with configurable page sizes
|
|
177
200
|
- Rich search results with metadata and context
|
|
178
|
-
- **Natural language date extraction** from search queries
|
|
179
201
|
- Process and template name-based search with suggestions
|
|
180
202
|
|
|
181
|
-
### 🤖 Natural Language Processing
|
|
182
|
-
- **Task creation from natural language** with automatic parsing
|
|
183
|
-
- **Date extraction** supporting various formats ("next Monday at 12PM", "tomorrow morning")
|
|
184
|
-
- **User/guest resolution** from names and emails
|
|
185
|
-
- **Smart task parsing** extracting titles, descriptions, and deadlines
|
|
186
|
-
- **Fuzzy matching** for user names and process titles
|
|
187
|
-
|
|
188
203
|
## API Reference
|
|
189
204
|
|
|
190
205
|
### SDK Initialization
|
|
@@ -201,20 +216,88 @@ TallyfySDK(
|
|
|
201
216
|
### User Management
|
|
202
217
|
|
|
203
218
|
```python
|
|
204
|
-
# Get all organization users
|
|
219
|
+
# Get all organization users with optional group data
|
|
205
220
|
users = sdk.users.get_organization_users(org_id, with_groups=False)
|
|
206
221
|
|
|
207
|
-
# Get minimal user list
|
|
222
|
+
# Get minimal user list for performance
|
|
208
223
|
users_list = sdk.users.get_organization_users_list(org_id)
|
|
209
224
|
|
|
210
|
-
# Get organization guests
|
|
225
|
+
# Get organization guests with optional statistics
|
|
211
226
|
guests = sdk.users.get_organization_guests(org_id, with_stats=False)
|
|
212
227
|
|
|
213
|
-
#
|
|
228
|
+
# Get current user info
|
|
229
|
+
current_user = sdk.users.get_current_user_info(org_id)
|
|
230
|
+
|
|
231
|
+
# Enhanced search capabilities
|
|
232
|
+
user = sdk.users.get_user_by_email(org_id, "john@company.com")
|
|
233
|
+
guest = sdk.users.get_guest_by_email(org_id, "contractor@company.com")
|
|
234
|
+
|
|
235
|
+
# Search members by name (fuzzy matching)
|
|
236
|
+
search_results = sdk.users.search_members_by_name(org_id, "John Smith", include_guests=True)
|
|
237
|
+
matching_users = search_results['users']
|
|
238
|
+
matching_guests = search_results['guests']
|
|
239
|
+
|
|
240
|
+
# Get all members in one call
|
|
241
|
+
all_members = sdk.users.get_all_organization_members(
|
|
242
|
+
org_id, include_guests=True, with_groups=True, with_stats=True
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
# Invite single user to organization
|
|
214
246
|
user = sdk.users.invite_user_to_organization(
|
|
215
|
-
org_id, email,
|
|
216
|
-
|
|
247
|
+
org_id, email="new.hire@company.com",
|
|
248
|
+
first_name="John", last_name="Doe",
|
|
249
|
+
role="standard",
|
|
250
|
+
message="Welcome! Please complete your onboarding process."
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
# Batch invite multiple users
|
|
254
|
+
invitations = [
|
|
255
|
+
{
|
|
256
|
+
"email": "user1@company.com",
|
|
257
|
+
"first_name": "Jane",
|
|
258
|
+
"last_name": "Smith",
|
|
259
|
+
"role": "standard"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"email": "user2@company.com",
|
|
263
|
+
"first_name": "Bob",
|
|
264
|
+
"last_name": "Johnson",
|
|
265
|
+
"message": "Welcome to the engineering team!"
|
|
266
|
+
}
|
|
267
|
+
]
|
|
268
|
+
results = sdk.users.invite_multiple_users(
|
|
269
|
+
org_id, invitations,
|
|
270
|
+
default_role="light",
|
|
271
|
+
default_message="Welcome to our organization!"
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
# Resend invitation
|
|
275
|
+
success = sdk.users.resend_invitation(
|
|
276
|
+
org_id, email="pending@company.com",
|
|
277
|
+
message="Reminder: Please accept your invitation to join our organization."
|
|
217
278
|
)
|
|
279
|
+
|
|
280
|
+
# Generate custom invitation message
|
|
281
|
+
message = sdk.users.get_invitation_template_message(
|
|
282
|
+
org_name="ACME Corp",
|
|
283
|
+
custom_text="We're excited to have you join our innovative team!"
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
# Validate invitation data before sending
|
|
287
|
+
invitation_data = {
|
|
288
|
+
"email": "new@company.com",
|
|
289
|
+
"first_name": "Alice",
|
|
290
|
+
"last_name": "Wilson",
|
|
291
|
+
"role": "admin"
|
|
292
|
+
}
|
|
293
|
+
validated_data = sdk.users.validate_invitation_data(invitation_data)
|
|
294
|
+
|
|
295
|
+
# Access modular components directly (advanced usage)
|
|
296
|
+
# Retrieval operations
|
|
297
|
+
users_with_groups = sdk.users.retrieval.get_organization_users(org_id, with_groups=True)
|
|
298
|
+
|
|
299
|
+
# Invitation operations
|
|
300
|
+
batch_results = sdk.users.invitation.invite_multiple_users(org_id, invitations)
|
|
218
301
|
```
|
|
219
302
|
|
|
220
303
|
### Task Management
|
|
@@ -244,14 +327,6 @@ task = sdk.tasks.create_task(
|
|
|
244
327
|
description="Please review the attached document"
|
|
245
328
|
)
|
|
246
329
|
|
|
247
|
-
# Create task from natural language (via MCP Server)
|
|
248
|
-
task_result = create_task_from_text(
|
|
249
|
-
org_id,
|
|
250
|
-
"Create a task called Review Document with description Review the quarterly report the deadline is next Monday at 12PM",
|
|
251
|
-
user_emails=["john@company.com"],
|
|
252
|
-
max_assignable=2
|
|
253
|
-
)
|
|
254
|
-
|
|
255
330
|
# Search processes, templates, or tasks
|
|
256
331
|
results = sdk.tasks.search(org_id, "onboarding", search_type="process")
|
|
257
332
|
|
|
@@ -306,14 +381,13 @@ suggestions = sdk.templates.suggest_automation_consolidation(org_id, template_id
|
|
|
306
381
|
# Assess overall template health
|
|
307
382
|
health_report = sdk.templates.assess_template_health(org_id, template_id)
|
|
308
383
|
|
|
309
|
-
#
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
"
|
|
313
|
-
"
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
kickoff_field = sdk.templates.add_kickoff_field(org_id, template_id, kickoff_data)
|
|
384
|
+
# Template metadata management
|
|
385
|
+
updated = sdk.templates.update_template_metadata(
|
|
386
|
+
org_id, template_id,
|
|
387
|
+
title="Updated Template Title",
|
|
388
|
+
guidance="New guidance text",
|
|
389
|
+
is_featured=True
|
|
390
|
+
)
|
|
317
391
|
|
|
318
392
|
# Add assignees to step
|
|
319
393
|
assignees = {"users": [123, 456], "groups": ["managers"], "guests": ["contractor@company.com"]}
|
|
@@ -640,13 +714,6 @@ enhance_template_with_smart_fields(org_id, "your_template_id")
|
|
|
640
714
|
|
|
641
715
|
## Contributing
|
|
642
716
|
|
|
643
|
-
### Development Setup
|
|
644
|
-
|
|
645
|
-
1. Clone the repository
|
|
646
|
-
2. Install dependencies: `pip install -r requirements.txt`
|
|
647
|
-
3. Set up environment variables in `.env`
|
|
648
|
-
4. Run tests: `python -m pytest tests/`
|
|
649
|
-
|
|
650
717
|
### Code Style
|
|
651
718
|
|
|
652
719
|
- Follow PEP 8 style guidelines
|
|
@@ -662,9 +729,6 @@ enhance_template_with_smart_fields(org_id, "your_template_id")
|
|
|
662
729
|
4. Include error handling and logging
|
|
663
730
|
5. Update this README with usage examples
|
|
664
731
|
|
|
665
|
-
## License
|
|
666
|
-
|
|
667
|
-
This SDK is part of the Tallyfy MCP project. See the main project repository for license information.
|
|
668
732
|
|
|
669
733
|
## Support
|
|
670
734
|
|
|
@@ -674,5 +738,5 @@ For bugs, feature requests, or questions:
|
|
|
674
738
|
2. Contact us at: support@tallyfy.com
|
|
675
739
|
---
|
|
676
740
|
|
|
677
|
-
**Version:** 1.0.
|
|
741
|
+
**Version:** 1.0.6
|
|
678
742
|
**Last Updated:** 2025
|
|
@@ -18,7 +18,7 @@ A comprehensive Python SDK for interacting with the Tallyfy API. This SDK provid
|
|
|
18
18
|
## Installation
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
pip install
|
|
21
|
+
pip install tallyfy
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
**Dependencies:**
|
|
@@ -57,12 +57,11 @@ The Tallyfy SDK follows a modular architecture with specialized management class
|
|
|
57
57
|
- **`TallyfySDK`** - Main SDK class that orchestrates all operations with backward compatibility methods
|
|
58
58
|
- **`BaseSDK`** - Base class with HTTP request handling, retry logic, and connection pooling
|
|
59
59
|
- **Management Modules:**
|
|
60
|
-
- `
|
|
61
|
-
- `
|
|
62
|
-
- `
|
|
63
|
-
- `
|
|
64
|
-
- **
|
|
65
|
-
- `DateExtractor` - Natural language date parsing and task extraction
|
|
60
|
+
- `UserManager` - User and guest operations with modular retrieval and invitation components
|
|
61
|
+
- `TaskManager` - Task and process operations with search and creation capabilities
|
|
62
|
+
- `TemplateManager` - Template/checklist operations with automation analysis and health assessment
|
|
63
|
+
- `FormFieldManager` - Form field operations with AI-powered suggestions and dropdown management
|
|
64
|
+
- **Error Handling:**
|
|
66
65
|
- `TallyfyError` - Custom exception handling with status codes and response data
|
|
67
66
|
|
|
68
67
|
### File Structure
|
|
@@ -72,10 +71,30 @@ tallyfy/
|
|
|
72
71
|
├── __init__.py # SDK exports and version
|
|
73
72
|
├── core.py # BaseSDK and TallyfySDK classes
|
|
74
73
|
├── models.py # Data models and types
|
|
75
|
-
├── user_management
|
|
76
|
-
├──
|
|
77
|
-
├──
|
|
78
|
-
├──
|
|
74
|
+
├── user_management/ # User and guest management (modular)
|
|
75
|
+
│ ├── __init__.py # UserManager with unified interface
|
|
76
|
+
│ ├── base.py # Common validation and error handling
|
|
77
|
+
│ ├── retrieval.py # User and guest retrieval operations
|
|
78
|
+
│ └── invitation.py # User invitation operations
|
|
79
|
+
├── task_management/ # Task and process management (modular)
|
|
80
|
+
│ ├── __init__.py # TaskManager with unified interface
|
|
81
|
+
│ ├── base.py # Common task operations base
|
|
82
|
+
│ ├── retrieval.py # Task and process retrieval
|
|
83
|
+
│ ├── search.py # Search functionality
|
|
84
|
+
│ └── creation.py # Task creation operations
|
|
85
|
+
├── template_management/ # Template management (modular)
|
|
86
|
+
│ ├── __init__.py # TemplateManager with unified interface
|
|
87
|
+
│ ├── base.py # Common template operations
|
|
88
|
+
│ ├── basic_operations.py # Template retrieval and CRUD operations
|
|
89
|
+
│ ├── automation.py # Automation rule management
|
|
90
|
+
│ ├── analysis.py # Template analysis and health checks
|
|
91
|
+
│ └── health_assessment.py # Template health assessment functionality
|
|
92
|
+
├── form_fields_management/ # Form field management (modular)
|
|
93
|
+
│ ├── __init__.py # FormFieldManager with unified interface
|
|
94
|
+
│ ├── base.py # Common form field operations
|
|
95
|
+
│ ├── crud_operations.py # CRUD operations for form fields
|
|
96
|
+
│ ├── options_management.py # Dropdown options management
|
|
97
|
+
│ └── suggestions.py # AI-powered field suggestions
|
|
79
98
|
└── README.md # This documentation
|
|
80
99
|
```
|
|
81
100
|
|
|
@@ -89,16 +108,19 @@ tallyfy/
|
|
|
89
108
|
- Comprehensive error handling with detailed error information
|
|
90
109
|
|
|
91
110
|
### 👥 User Management
|
|
111
|
+
- **Modular architecture** with specialized retrieval and invitation components
|
|
92
112
|
- Get organization members with full profile data (country, timezone, job details)
|
|
93
113
|
- Get minimal user lists for performance-critical operations
|
|
94
114
|
- Manage guests and external users with guest-specific features
|
|
95
|
-
-
|
|
96
|
-
-
|
|
115
|
+
- **Enhanced search capabilities** - Find users by email or name with fuzzy matching
|
|
116
|
+
- **Batch invitation support** - Invite multiple users with default roles and messages
|
|
117
|
+
- **Advanced invitation features** - Custom messages, role validation, and resend functionality
|
|
118
|
+
- Support for user groups and permissions with flexible query parameters
|
|
119
|
+
- **Convenience methods** - Get all members (users + guests) in a single call
|
|
97
120
|
|
|
98
121
|
### ✅ Task Management
|
|
99
122
|
- Get tasks for specific users or processes with filtering
|
|
100
123
|
- Create standalone tasks with rich assignment options
|
|
101
|
-
- **Natural language task creation** with automatic date/time extraction
|
|
102
124
|
- Search processes by name with fuzzy matching
|
|
103
125
|
- Advanced filtering for organization runs (status, owners, tags, etc.)
|
|
104
126
|
- Universal search across processes, templates, and tasks
|
|
@@ -131,16 +153,8 @@ tallyfy/
|
|
|
131
153
|
- Exact and fuzzy matching with relevance scoring
|
|
132
154
|
- Pagination support with configurable page sizes
|
|
133
155
|
- Rich search results with metadata and context
|
|
134
|
-
- **Natural language date extraction** from search queries
|
|
135
156
|
- Process and template name-based search with suggestions
|
|
136
157
|
|
|
137
|
-
### 🤖 Natural Language Processing
|
|
138
|
-
- **Task creation from natural language** with automatic parsing
|
|
139
|
-
- **Date extraction** supporting various formats ("next Monday at 12PM", "tomorrow morning")
|
|
140
|
-
- **User/guest resolution** from names and emails
|
|
141
|
-
- **Smart task parsing** extracting titles, descriptions, and deadlines
|
|
142
|
-
- **Fuzzy matching** for user names and process titles
|
|
143
|
-
|
|
144
158
|
## API Reference
|
|
145
159
|
|
|
146
160
|
### SDK Initialization
|
|
@@ -157,20 +171,88 @@ TallyfySDK(
|
|
|
157
171
|
### User Management
|
|
158
172
|
|
|
159
173
|
```python
|
|
160
|
-
# Get all organization users
|
|
174
|
+
# Get all organization users with optional group data
|
|
161
175
|
users = sdk.users.get_organization_users(org_id, with_groups=False)
|
|
162
176
|
|
|
163
|
-
# Get minimal user list
|
|
177
|
+
# Get minimal user list for performance
|
|
164
178
|
users_list = sdk.users.get_organization_users_list(org_id)
|
|
165
179
|
|
|
166
|
-
# Get organization guests
|
|
180
|
+
# Get organization guests with optional statistics
|
|
167
181
|
guests = sdk.users.get_organization_guests(org_id, with_stats=False)
|
|
168
182
|
|
|
169
|
-
#
|
|
183
|
+
# Get current user info
|
|
184
|
+
current_user = sdk.users.get_current_user_info(org_id)
|
|
185
|
+
|
|
186
|
+
# Enhanced search capabilities
|
|
187
|
+
user = sdk.users.get_user_by_email(org_id, "john@company.com")
|
|
188
|
+
guest = sdk.users.get_guest_by_email(org_id, "contractor@company.com")
|
|
189
|
+
|
|
190
|
+
# Search members by name (fuzzy matching)
|
|
191
|
+
search_results = sdk.users.search_members_by_name(org_id, "John Smith", include_guests=True)
|
|
192
|
+
matching_users = search_results['users']
|
|
193
|
+
matching_guests = search_results['guests']
|
|
194
|
+
|
|
195
|
+
# Get all members in one call
|
|
196
|
+
all_members = sdk.users.get_all_organization_members(
|
|
197
|
+
org_id, include_guests=True, with_groups=True, with_stats=True
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# Invite single user to organization
|
|
170
201
|
user = sdk.users.invite_user_to_organization(
|
|
171
|
-
org_id, email,
|
|
172
|
-
|
|
202
|
+
org_id, email="new.hire@company.com",
|
|
203
|
+
first_name="John", last_name="Doe",
|
|
204
|
+
role="standard",
|
|
205
|
+
message="Welcome! Please complete your onboarding process."
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
# Batch invite multiple users
|
|
209
|
+
invitations = [
|
|
210
|
+
{
|
|
211
|
+
"email": "user1@company.com",
|
|
212
|
+
"first_name": "Jane",
|
|
213
|
+
"last_name": "Smith",
|
|
214
|
+
"role": "standard"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"email": "user2@company.com",
|
|
218
|
+
"first_name": "Bob",
|
|
219
|
+
"last_name": "Johnson",
|
|
220
|
+
"message": "Welcome to the engineering team!"
|
|
221
|
+
}
|
|
222
|
+
]
|
|
223
|
+
results = sdk.users.invite_multiple_users(
|
|
224
|
+
org_id, invitations,
|
|
225
|
+
default_role="light",
|
|
226
|
+
default_message="Welcome to our organization!"
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
# Resend invitation
|
|
230
|
+
success = sdk.users.resend_invitation(
|
|
231
|
+
org_id, email="pending@company.com",
|
|
232
|
+
message="Reminder: Please accept your invitation to join our organization."
|
|
173
233
|
)
|
|
234
|
+
|
|
235
|
+
# Generate custom invitation message
|
|
236
|
+
message = sdk.users.get_invitation_template_message(
|
|
237
|
+
org_name="ACME Corp",
|
|
238
|
+
custom_text="We're excited to have you join our innovative team!"
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
# Validate invitation data before sending
|
|
242
|
+
invitation_data = {
|
|
243
|
+
"email": "new@company.com",
|
|
244
|
+
"first_name": "Alice",
|
|
245
|
+
"last_name": "Wilson",
|
|
246
|
+
"role": "admin"
|
|
247
|
+
}
|
|
248
|
+
validated_data = sdk.users.validate_invitation_data(invitation_data)
|
|
249
|
+
|
|
250
|
+
# Access modular components directly (advanced usage)
|
|
251
|
+
# Retrieval operations
|
|
252
|
+
users_with_groups = sdk.users.retrieval.get_organization_users(org_id, with_groups=True)
|
|
253
|
+
|
|
254
|
+
# Invitation operations
|
|
255
|
+
batch_results = sdk.users.invitation.invite_multiple_users(org_id, invitations)
|
|
174
256
|
```
|
|
175
257
|
|
|
176
258
|
### Task Management
|
|
@@ -200,14 +282,6 @@ task = sdk.tasks.create_task(
|
|
|
200
282
|
description="Please review the attached document"
|
|
201
283
|
)
|
|
202
284
|
|
|
203
|
-
# Create task from natural language (via MCP Server)
|
|
204
|
-
task_result = create_task_from_text(
|
|
205
|
-
org_id,
|
|
206
|
-
"Create a task called Review Document with description Review the quarterly report the deadline is next Monday at 12PM",
|
|
207
|
-
user_emails=["john@company.com"],
|
|
208
|
-
max_assignable=2
|
|
209
|
-
)
|
|
210
|
-
|
|
211
285
|
# Search processes, templates, or tasks
|
|
212
286
|
results = sdk.tasks.search(org_id, "onboarding", search_type="process")
|
|
213
287
|
|
|
@@ -262,14 +336,13 @@ suggestions = sdk.templates.suggest_automation_consolidation(org_id, template_id
|
|
|
262
336
|
# Assess overall template health
|
|
263
337
|
health_report = sdk.templates.assess_template_health(org_id, template_id)
|
|
264
338
|
|
|
265
|
-
#
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
"
|
|
269
|
-
"
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
kickoff_field = sdk.templates.add_kickoff_field(org_id, template_id, kickoff_data)
|
|
339
|
+
# Template metadata management
|
|
340
|
+
updated = sdk.templates.update_template_metadata(
|
|
341
|
+
org_id, template_id,
|
|
342
|
+
title="Updated Template Title",
|
|
343
|
+
guidance="New guidance text",
|
|
344
|
+
is_featured=True
|
|
345
|
+
)
|
|
273
346
|
|
|
274
347
|
# Add assignees to step
|
|
275
348
|
assignees = {"users": [123, 456], "groups": ["managers"], "guests": ["contractor@company.com"]}
|
|
@@ -596,13 +669,6 @@ enhance_template_with_smart_fields(org_id, "your_template_id")
|
|
|
596
669
|
|
|
597
670
|
## Contributing
|
|
598
671
|
|
|
599
|
-
### Development Setup
|
|
600
|
-
|
|
601
|
-
1. Clone the repository
|
|
602
|
-
2. Install dependencies: `pip install -r requirements.txt`
|
|
603
|
-
3. Set up environment variables in `.env`
|
|
604
|
-
4. Run tests: `python -m pytest tests/`
|
|
605
|
-
|
|
606
672
|
### Code Style
|
|
607
673
|
|
|
608
674
|
- Follow PEP 8 style guidelines
|
|
@@ -618,9 +684,6 @@ enhance_template_with_smart_fields(org_id, "your_template_id")
|
|
|
618
684
|
4. Include error handling and logging
|
|
619
685
|
5. Update this README with usage examples
|
|
620
686
|
|
|
621
|
-
## License
|
|
622
|
-
|
|
623
|
-
This SDK is part of the Tallyfy MCP project. See the main project repository for license information.
|
|
624
687
|
|
|
625
688
|
## Support
|
|
626
689
|
|
|
@@ -630,5 +693,5 @@ For bugs, feature requests, or questions:
|
|
|
630
693
|
2. Contact us at: support@tallyfy.com
|
|
631
694
|
---
|
|
632
695
|
|
|
633
|
-
**Version:** 1.0.
|
|
696
|
+
**Version:** 1.0.6
|
|
634
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.
|
|
7
|
+
version = "1.0.6"
|
|
8
8
|
description = "A comprehensive Python SDK for interacting with the Tallyfy API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.7"
|
|
@@ -35,6 +35,7 @@ classifiers = [
|
|
|
35
35
|
dependencies = [
|
|
36
36
|
"requests>=2.25.0",
|
|
37
37
|
"typing-extensions>=4.0.0; python_version<'3.8'",
|
|
38
|
+
"email-validator==2.2.0",
|
|
38
39
|
]
|
|
39
40
|
|
|
40
41
|
[project.optional-dependencies]
|
|
@@ -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.
|
|
20
|
+
return '1.0.6'
|
|
21
21
|
|
|
22
22
|
setup(
|
|
23
23
|
name='tallyfy',
|
|
@@ -49,6 +49,7 @@ setup(
|
|
|
49
49
|
install_requires=[
|
|
50
50
|
'requests>=2.25.0',
|
|
51
51
|
'typing-extensions>=4.0.0; python_version<"3.8"',
|
|
52
|
+
"email-validator==2.2.0",
|
|
52
53
|
],
|
|
53
54
|
extras_require={
|
|
54
55
|
'dev': [
|
|
@@ -62,8 +63,8 @@ setup(
|
|
|
62
63
|
keywords='tallyfy api sdk workflow automation task management',
|
|
63
64
|
project_urls={
|
|
64
65
|
'Documentation': 'https://tallyfy.com/products/',
|
|
65
|
-
'Source': 'https://github.com/tallyfy/
|
|
66
|
-
'Tracker': 'https://github.com/tallyfy/
|
|
66
|
+
'Source': 'https://github.com/tallyfy/sdk',
|
|
67
|
+
'Tracker': 'https://github.com/tallyfy/sdk/issues',
|
|
67
68
|
},
|
|
68
69
|
include_package_data=True,
|
|
69
70
|
zip_safe=False,
|