tallyfy 1.0.3__tar.gz → 1.0.5__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 (116) hide show
  1. tallyfy-1.0.5/.github/workflows/build-whl.yml +34 -0
  2. tallyfy-1.0.5/CHANGELOG.md +79 -0
  3. {tallyfy-1.0.3 → tallyfy-1.0.5}/PKG-INFO +120 -56
  4. {tallyfy-1.0.3/tallyfy → tallyfy-1.0.5}/README.md +118 -55
  5. {tallyfy-1.0.3 → tallyfy-1.0.5}/pyproject.toml +3 -2
  6. {tallyfy-1.0.3 → tallyfy-1.0.5}/setup.py +5 -4
  7. tallyfy-1.0.5/tallyfy/__init__.py +24 -0
  8. {tallyfy-1.0.3 → tallyfy-1.0.5}/tallyfy/core.py +8 -8
  9. tallyfy-1.0.5/tallyfy/form_fields_management/__init__.py +70 -0
  10. tallyfy-1.0.5/tallyfy/form_fields_management/base.py +109 -0
  11. tallyfy-1.0.5/tallyfy/form_fields_management/crud_operations.py +234 -0
  12. tallyfy-1.0.5/tallyfy/form_fields_management/options_management.py +222 -0
  13. tallyfy-1.0.5/tallyfy/form_fields_management/suggestions.py +411 -0
  14. tallyfy-1.0.5/tallyfy/task_management/__init__.py +81 -0
  15. tallyfy-1.0.5/tallyfy/task_management/base.py +125 -0
  16. tallyfy-1.0.5/tallyfy/task_management/creation.py +221 -0
  17. tallyfy-1.0.5/tallyfy/task_management/retrieval.py +211 -0
  18. tallyfy-1.0.5/tallyfy/task_management/search.py +196 -0
  19. tallyfy-1.0.5/tallyfy/template_management/__init__.py +85 -0
  20. tallyfy-1.0.5/tallyfy/template_management/analysis.py +1093 -0
  21. tallyfy-1.0.5/tallyfy/template_management/automation.py +469 -0
  22. tallyfy-1.0.5/tallyfy/template_management/base.py +56 -0
  23. tallyfy-1.0.5/tallyfy/template_management/basic_operations.py +477 -0
  24. tallyfy-1.0.5/tallyfy/template_management/health_assessment.py +763 -0
  25. tallyfy-1.0.5/tallyfy/user_management/__init__.py +69 -0
  26. tallyfy-1.0.5/tallyfy/user_management/base.py +146 -0
  27. tallyfy-1.0.5/tallyfy/user_management/invitation.py +286 -0
  28. tallyfy-1.0.5/tallyfy/user_management/retrieval.py +339 -0
  29. {tallyfy-1.0.3 → tallyfy-1.0.5}/tallyfy.egg-info/PKG-INFO +120 -56
  30. tallyfy-1.0.5/tallyfy.egg-info/SOURCES.txt +35 -0
  31. {tallyfy-1.0.3 → tallyfy-1.0.5}/tallyfy.egg-info/requires.txt +1 -0
  32. tallyfy-1.0.3/.cursor/rules/mcp-server-development.mdc +0 -280
  33. tallyfy-1.0.3/.github/workflows/deploy-host.yml +0 -26
  34. tallyfy-1.0.3/.github/workflows/deploy-server.yml +0 -26
  35. tallyfy-1.0.3/CHANGELOG.md +0 -40
  36. tallyfy-1.0.3/CLAUDE.md +0 -551
  37. tallyfy-1.0.3/MANIFEST.in +0 -6
  38. tallyfy-1.0.3/README.md +0 -317
  39. tallyfy-1.0.3/admin/__init__.py +0 -7
  40. tallyfy-1.0.3/admin/server.py +0 -153
  41. tallyfy-1.0.3/architecture.mmd +0 -76
  42. tallyfy-1.0.3/host/Dockerfile +0 -12
  43. tallyfy-1.0.3/host/client/.env +0 -1
  44. tallyfy-1.0.3/host/client/__init__.py +0 -19
  45. tallyfy-1.0.3/host/client/client.py +0 -63
  46. tallyfy-1.0.3/host/client/config.py +0 -48
  47. tallyfy-1.0.3/host/client/conversation.py +0 -52
  48. tallyfy-1.0.3/host/client/exceptions.py +0 -21
  49. tallyfy-1.0.3/host/client/mcp_client.py +0 -211
  50. tallyfy-1.0.3/host/client/prompts.py +0 -84
  51. tallyfy-1.0.3/host/docker-compose.yml +0 -11
  52. tallyfy-1.0.3/host/launcher.py +0 -48
  53. tallyfy-1.0.3/host/requirements.txt +0 -11
  54. tallyfy-1.0.3/host/websocket/__init__.py +0 -1
  55. tallyfy-1.0.3/host/websocket/server.py +0 -368
  56. tallyfy-1.0.3/host/websocket/session_manager.py +0 -220
  57. tallyfy-1.0.3/main.py +0 -28
  58. tallyfy-1.0.3/requirements.txt +0 -13
  59. tallyfy-1.0.3/server/.dockerignore +0 -72
  60. tallyfy-1.0.3/server/Dockerfile +0 -12
  61. tallyfy-1.0.3/server/__init__.py +0 -0
  62. tallyfy-1.0.3/server/docker-compose.yml +0 -11
  63. tallyfy-1.0.3/server/requirements.txt +0 -4
  64. tallyfy-1.0.3/server/server.py +0 -116
  65. tallyfy-1.0.3/server/tools/__init__.py +0 -0
  66. tallyfy-1.0.3/server/tools/automation.py +0 -172
  67. tallyfy-1.0.3/server/tools/date_utils.py +0 -352
  68. tallyfy-1.0.3/server/tools/form_fields.py +0 -186
  69. tallyfy-1.0.3/server/tools/process_management.py +0 -58
  70. tallyfy-1.0.3/server/tools/search.py +0 -71
  71. tallyfy-1.0.3/server/tools/task_management.py +0 -342
  72. tallyfy-1.0.3/server/tools/template_management.py +0 -277
  73. tallyfy-1.0.3/server/tools/user_management.py +0 -125
  74. tallyfy-1.0.3/start_servers.py +0 -94
  75. tallyfy-1.0.3/swagger/activity_feed.json +0 -5776
  76. tallyfy-1.0.3/swagger/asset.json +0 -5645
  77. tallyfy-1.0.3/swagger/authentication.json +0 -5693
  78. tallyfy-1.0.3/swagger/favorites.json +0 -5720
  79. tallyfy-1.0.3/swagger/file.json +0 -6189
  80. tallyfy-1.0.3/swagger/folder.json +0 -5964
  81. tallyfy-1.0.3/swagger/form_field.json +0 -5695
  82. tallyfy-1.0.3/swagger/group.json +0 -5942
  83. tallyfy-1.0.3/swagger/guest.json +0 -7395
  84. tallyfy-1.0.3/swagger/list.json +0 -6017
  85. tallyfy-1.0.3/swagger/member.json +0 -7496
  86. tallyfy-1.0.3/swagger/organization.json +0 -7131
  87. tallyfy-1.0.3/swagger/process.json +0 -6002
  88. tallyfy-1.0.3/swagger/process_instances.json +0 -5866
  89. tallyfy-1.0.3/swagger/public.json +0 -6074
  90. tallyfy-1.0.3/swagger/public_process.json +0 -5895
  91. tallyfy-1.0.3/swagger/public_template.json +0 -5943
  92. tallyfy-1.0.3/swagger/recurringjob.json +0 -5889
  93. tallyfy-1.0.3/swagger/search.json +0 -5705
  94. tallyfy-1.0.3/swagger/security.json +0 -5851
  95. tallyfy-1.0.3/swagger/selectedtextcomment.json +0 -5911
  96. tallyfy-1.0.3/swagger/split_summary.json +0 -476
  97. tallyfy-1.0.3/swagger/step.json +0 -6580
  98. tallyfy-1.0.3/swagger/tag.json +0 -6050
  99. tallyfy-1.0.3/swagger/task.json +0 -8826
  100. tallyfy-1.0.3/swagger/template.json +0 -7072
  101. tallyfy-1.0.3/swagger/watching.json +0 -6122
  102. tallyfy-1.0.3/tallyfy/BUILD.md +0 -5
  103. tallyfy-1.0.3/tallyfy/__init__.py +0 -20
  104. tallyfy-1.0.3/tallyfy/form_fields_management.py +0 -582
  105. tallyfy-1.0.3/tallyfy/task_management.py +0 -356
  106. tallyfy-1.0.3/tallyfy/template_management.py +0 -2607
  107. tallyfy-1.0.3/tallyfy/user_management.py +0 -235
  108. tallyfy-1.0.3/tallyfy-requirements.txt +0 -2
  109. tallyfy-1.0.3/tallyfy.egg-info/SOURCES.txt +0 -90
  110. tallyfy-1.0.3/ui/index.html +0 -622
  111. {tallyfy-1.0.3 → tallyfy-1.0.5}/LICENSE +0 -0
  112. {tallyfy-1.0.3 → tallyfy-1.0.5}/setup.cfg +0 -0
  113. {tallyfy-1.0.3 → tallyfy-1.0.5}/tallyfy/models.py +0 -0
  114. {tallyfy-1.0.3 → tallyfy-1.0.5}/tallyfy.egg-info/dependency_links.txt +0 -0
  115. {tallyfy-1.0.3 → tallyfy-1.0.5}/tallyfy.egg-info/not-zip-safe +0 -0
  116. {tallyfy-1.0.3 → tallyfy-1.0.5}/tallyfy.egg-info/top_level.txt +0 -0
@@ -0,0 +1,34 @@
1
+ name: Build and Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+ release:
8
+ types: [published]
9
+
10
+ jobs:
11
+ build-and-publish:
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - name: Set up Python
18
+ uses: actions/setup-python@v4
19
+ with:
20
+ python-version: '3.x'
21
+
22
+ - name: Install dependencies
23
+ run: |
24
+ python -m pip install --upgrade pip
25
+ pip install build twine
26
+
27
+ - name: Build package
28
+ run: python -m build
29
+
30
+ - name: Publish to PyPI
31
+ env:
32
+ TWINE_USERNAME: __token__
33
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
34
+ run: twine upload dist/*
@@ -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.5] - 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
3
+ Version: 1.0.5
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 -r requirements.txt
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
- - `UserManagement` - User and guest operations with full profile support
105
- - `TaskManagement` - Task and process operations with natural language processing
106
- - `TemplateManagement` - Template/checklist operations with automation analysis
107
- - `FormFieldManagement` - Form field operations with AI-powered suggestions
108
- - **Utility Modules:**
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.py # User and guest management
120
- ├── task_management.py # Task and process management
121
- ├── template_management.py # Template management
122
- ├── form_fields_management.py # Form field management
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
- - Invite new users to organization with role assignment
140
- - Support for user groups and permissions
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
- # Invite user to organization
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, first_name, last_name,
216
- role="light", message=None
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
- # Add kickoff fields
310
- kickoff_data = {
311
- "field_type": "text",
312
- "label": "Project Name",
313
- "required": True,
314
- "validation_rules": {"min_length": 3}
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.3
741
+ **Version:** 1.0.5
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 -r requirements.txt
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
- - `UserManagement` - User and guest operations with full profile support
61
- - `TaskManagement` - Task and process operations with natural language processing
62
- - `TemplateManagement` - Template/checklist operations with automation analysis
63
- - `FormFieldManagement` - Form field operations with AI-powered suggestions
64
- - **Utility Modules:**
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.py # User and guest management
76
- ├── task_management.py # Task and process management
77
- ├── template_management.py # Template management
78
- ├── form_fields_management.py # Form field management
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
- - Invite new users to organization with role assignment
96
- - Support for user groups and permissions
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
- # Invite user to organization
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, first_name, last_name,
172
- role="light", message=None
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
- # Add kickoff fields
266
- kickoff_data = {
267
- "field_type": "text",
268
- "label": "Project Name",
269
- "required": True,
270
- "validation_rules": {"min_length": 3}
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.3
696
+ **Version:** 1.0.5
634
697
  **Last Updated:** 2025
@@ -4,9 +4,9 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tallyfy"
7
- version = "1.0.3"
7
+ version = "1.0.5"
8
8
  description = "A comprehensive Python SDK for interacting with the Tallyfy API"
9
- readme = "tallyfy/README.md"
9
+ readme = "README.md"
10
10
  requires-python = ">=3.7"
11
11
  license = {text = "MIT"}
12
12
  authors = [
@@ -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]