trovesuite 1.0.4__py3-none-any.whl → 1.0.6__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.
trovesuite/__init__.py CHANGED
@@ -1,16 +1,18 @@
1
1
  """
2
- TroveSuite Auth Package
2
+ TroveSuite Package
3
3
 
4
- A comprehensive authentication and authorization service for ERP systems.
5
- Provides JWT token validation, user authorization, and permission checking.
4
+ A comprehensive authentication, authorization, and notification service for ERP systems.
5
+ Provides JWT token validation, user authorization, permission checking, and notification capabilities.
6
6
  """
7
7
 
8
8
  from .auth import AuthService
9
+ from .notification import NotificationService
9
10
 
10
- __version__ = "1.0.8"
11
+ __version__ = "1.0.5"
11
12
  __author__ = "Bright Debrah Owusu"
12
13
  __email__ = "owusu.debrah@deladetech.com"
13
14
 
14
15
  __all__ = [
15
- "AuthService"
16
+ "AuthService",
17
+ "NotificationService"
16
18
  ]
@@ -5,13 +5,10 @@ Authentication and authorization services for ERP systems.
5
5
  """
6
6
 
7
7
  from .auth_service import AuthService
8
- from .auth_base import AuthBase
9
- from .auth_read_dto import AuthServiceReadDto, AuthControllerReadDto
8
+ from .auth_write_dto import AuthServiceWriteDto
10
9
 
11
10
  __all__ = [
12
11
  "AuthService",
13
- "AuthBase",
14
- "AuthServiceReadDto",
15
- "AuthControllerReadDto"
12
+ "AuthServiceWriteDto"
16
13
  ]
17
14
 
@@ -1,8 +1,8 @@
1
1
  from fastapi import APIRouter
2
- from src.trovesuite.auth.auth_write_dto import AuthControllerWriteDto
3
- from src.trovesuite.auth.auth_read_dto import AuthControllerReadDto
4
- from src.trovesuite.auth.auth_service import AuthService
5
- from src.trovesuite.entities.sh_response import Respons
2
+ from .auth_write_dto import AuthControllerWriteDto
3
+ from .auth_read_dto import AuthControllerReadDto
4
+ from .auth_service import AuthService
5
+ from ..entities.sh_response import Respons
6
6
 
7
7
  auth_router = APIRouter()
8
8
 
@@ -1,8 +1,8 @@
1
1
  from fastapi import APIRouter
2
- from src.entities.shared.shared_response import Respons
3
- from src.configs.settings import db_settings
4
- from src.configs.database import DatabaseManager
5
- from src.configs.logging import get_logger
2
+ from .sh_response import Respons
3
+ from ..configs.settings import db_settings
4
+ from ..configs.database import DatabaseManager
5
+ from ..configs.logging import get_logger
6
6
 
7
7
  health_check_router = APIRouter(tags=["Health Path"])
8
8
  logger = get_logger("health")
@@ -0,0 +1,14 @@
1
+ """
2
+ TroveSuite Notification Service
3
+
4
+ Provides email and SMS notification capabilities for TroveSuite applications.
5
+ """
6
+
7
+ from .notification_service import NotificationService
8
+ from .notification_write_dto import NotificationEmailServiceWriteDto, NotificationSMSServiceWriteDto
9
+
10
+ __all__ = [
11
+ "NotificationService",
12
+ "NotificationEmailServiceWriteDto",
13
+ "NotificationSMSServiceWriteDto"
14
+ ]
@@ -0,0 +1,13 @@
1
+ from typing import List, Optional, Union
2
+ from pydantic import BaseModel
3
+
4
+ class NotificationEmailBase(BaseModel):
5
+ sender_email: str
6
+ receiver_email: Union[str, List[str]]
7
+ password: str
8
+ subject: str
9
+ text_message: str
10
+ html_message: Optional[str] = None
11
+
12
+ class NotificationSMSBase(BaseModel):
13
+ pass
@@ -0,0 +1,21 @@
1
+ from .notification_write_dto import (
2
+ NotificationEmailControllerWriteDto,
3
+ NotificationSMSControllerWriteDto
4
+ )
5
+ from .notification_read_dto import (
6
+ NotificationEmailControllerReadDto,
7
+ NotificationSMSControllerReadDto
8
+ )
9
+ from .notification_service import NotificationService
10
+ from ..entities.sh_response import Respons
11
+ from fastapi import APIRouter
12
+
13
+ notification_router = APIRouter()
14
+
15
+ @notification_router.post("/send_email", response_model=Respons[NotificationEmailControllerReadDto])
16
+ async def send_email(data: NotificationEmailControllerWriteDto):
17
+ return NotificationService.send_email(data=data)
18
+
19
+ @notification_router.post("/send_sms", response_model=Respons[NotificationSMSControllerReadDto])
20
+ async def send_sms(data: NotificationSMSControllerWriteDto):
21
+ return NotificationService.send_sms(data=data)
@@ -0,0 +1,21 @@
1
+ from .notification_base import (
2
+ NotificationEmailBase,
3
+ NotificationSMSBase
4
+ )
5
+ from pydantic import BaseModel
6
+
7
+ # EMAIL Notification
8
+
9
+ class NotificationEmailControllerReadDto(NotificationEmailBase):
10
+ pass
11
+
12
+ class NotificationEmailServiceReadDto(BaseModel):
13
+ pass
14
+
15
+ # SMS Notification
16
+
17
+ class NotificationSMSControllerReadDto(NotificationSMSBase):
18
+ pass
19
+
20
+ class NotificationSMSServiceReadDto(BaseModel):
21
+ pass
@@ -0,0 +1,73 @@
1
+ import smtplib
2
+ from email.mime.text import MIMEText
3
+ from email.mime.multipart import MIMEMultipart
4
+ from ..entities.sh_response import Respons
5
+ from .notification_read_dto import (
6
+ NotificationEmailServiceReadDto,
7
+ NotificationSMSServiceReadDto
8
+ )
9
+ from .notification_write_dto import (
10
+ NotificationEmailServiceWriteDto,
11
+ NotificationSMSServiceWriteDto
12
+ )
13
+
14
+ class NotificationService:
15
+
16
+ @staticmethod
17
+ def send_email(data: NotificationEmailServiceWriteDto) -> Respons[NotificationEmailServiceReadDto]:
18
+ """
19
+ Send an email (single or multiple recipients) via Gmail SMTP.
20
+ Supports both plain text and HTML email bodies.
21
+ """
22
+
23
+ # Extract input data
24
+ receiver_email = data.receiver_email
25
+ text_message = data.text_message
26
+ html_message = getattr(data, "html_message", None)
27
+ sender_email = data.sender_email
28
+ password = data.password
29
+ subject = data.subject
30
+
31
+ # Allow single email or list
32
+ if isinstance(receiver_email, str):
33
+ receiver_email = [receiver_email]
34
+
35
+ # Create the email container
36
+ message = MIMEMultipart("alternative")
37
+ message["From"] = sender_email
38
+ message["To"] = ", ".join(receiver_email)
39
+ message["Subject"] = subject
40
+
41
+ # Attach plain text
42
+ message.attach(MIMEText(text_message, "plain"))
43
+
44
+ # Attach HTML if provided
45
+ if html_message:
46
+ message.attach(MIMEText(html_message, "html"))
47
+
48
+ try:
49
+ with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
50
+ server.login(sender_email, password)
51
+ server.sendmail(sender_email, receiver_email, message.as_string())
52
+
53
+ return Respons[NotificationEmailServiceReadDto](
54
+ detail=f"Email successfully sent to {len(receiver_email)} recipient(s)",
55
+ error=None,
56
+ data=[],
57
+ status_code=200,
58
+ success=True,
59
+ )
60
+
61
+ except Exception as e:
62
+ print(e)
63
+ return Respons[NotificationEmailServiceReadDto](
64
+ detail="An error occurred while sending the email",
65
+ error=str(e),
66
+ data=[],
67
+ status_code=500,
68
+ success=False,
69
+ )
70
+
71
+ @staticmethod
72
+ def send_sms(data: NotificationSMSServiceWriteDto) -> Respons[NotificationSMSServiceReadDto]:
73
+ pass
@@ -0,0 +1,21 @@
1
+ from pydantic import BaseModel
2
+ from .notification_base import (
3
+ NotificationEmailBase,
4
+ NotificationSMSBase
5
+ )
6
+
7
+ # Email Notification
8
+
9
+ class NotificationEmailControllerWriteDto(NotificationEmailBase):
10
+ pass
11
+
12
+ class NotificationEmailServiceWriteDto(NotificationEmailControllerWriteDto):
13
+ pass
14
+
15
+ # SMS Notification
16
+
17
+ class NotificationSMSControllerWriteDto(NotificationSMSBase):
18
+ pass
19
+
20
+ class NotificationSMSServiceWriteDto(BaseModel):
21
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trovesuite
3
- Version: 1.0.4
3
+ Version: 1.0.6
4
4
  Summary: TroveSuite services package providing authentication, authorization, notifications, and other enterprise services for TroveSuite applications
5
5
  Home-page: https://dev.azure.com/brightgclt/trovesuite/_git/packages
6
6
  Author: Bright Debrah Owusu
@@ -119,10 +119,28 @@ poetry install --with dev
119
119
 
120
120
  ## Quick Start
121
121
 
122
+ > **✅ Package Status**: All import issues have been resolved in version 1.0.5. The package now works correctly when installed from PyPI or wheel files.
123
+
124
+ ### Import Patterns
125
+
126
+ The package provides clean, simplified import patterns:
127
+
128
+ ```python
129
+ # Import services and DTOs from main package
130
+ from trovesuite import AuthService, NotificationService
131
+ from trovesuite.auth import AuthServiceWriteDto
132
+ from trovesuite.notification import NotificationEmailServiceWriteDto, NotificationSMSServiceWriteDto
133
+
134
+ # Or import everything you need in one line
135
+ from trovesuite import AuthService, NotificationService
136
+ from trovesuite.auth import AuthServiceWriteDto
137
+ from trovesuite.notification import NotificationEmailServiceWriteDto
138
+ ```
139
+
122
140
  ### Basic Usage
123
141
 
124
142
  ```python
125
- from trovesuite import AuthService
143
+ from trovesuite import AuthService, NotificationService
126
144
  from trovesuite.configs.settings import db_settings
127
145
 
128
146
  # Configure your database settings
@@ -137,7 +155,7 @@ db_settings.SECRET_KEY = "your-secret-key"
137
155
  auth_service = AuthService()
138
156
 
139
157
  # Authorize a user
140
- from trovesuite.auth.auth_write_dto import AuthServiceWriteDto
158
+ from trovesuite.auth import AuthServiceWriteDto
141
159
  auth_data = AuthServiceWriteDto(user_id="user123", tenant="tenant456")
142
160
  result = AuthService.authorize(auth_data)
143
161
 
@@ -149,6 +167,30 @@ else:
149
167
  print(f"Authorization failed: {result.detail}")
150
168
  ```
151
169
 
170
+ ### Notification Service Usage
171
+
172
+ ```python
173
+ from trovesuite import NotificationService
174
+ from trovesuite.notification import NotificationEmailServiceWriteDto
175
+
176
+ # Send an email notification
177
+ email_data = NotificationEmailServiceWriteDto(
178
+ sender_email="your-email@gmail.com",
179
+ receiver_email=["recipient1@example.com", "recipient2@example.com"],
180
+ password="your-app-password", # Gmail app password
181
+ subject="Test Notification",
182
+ text_message="This is a plain text message",
183
+ html_message="<h1>This is an HTML message</h1><p>With rich formatting!</p>"
184
+ )
185
+
186
+ result = NotificationService.send_email(email_data)
187
+
188
+ if result.success:
189
+ print(f"Email sent successfully: {result.detail}")
190
+ else:
191
+ print(f"Email failed: {result.error}")
192
+ ```
193
+
152
194
  ### JWT Token Decoding
153
195
 
154
196
  ```python
@@ -166,7 +208,7 @@ async def protected_route(token: str = Depends(oauth2_scheme)):
166
208
  tenant_id = user_data["tenant_id"]
167
209
 
168
210
  # Authorize user
169
- from trovesuite.auth.auth_write_dto import AuthServiceWriteDto
211
+ from trovesuite.auth import AuthServiceWriteDto
170
212
  auth_data = AuthServiceWriteDto(user_id=user_id, tenant=tenant_id)
171
213
  auth_result = AuthService.authorize(auth_data)
172
214
  return auth_result
@@ -395,8 +437,84 @@ Check if user has all of the required permissions.
395
437
  **Returns:**
396
438
  - `bool`: True if user has all of the required permissions
397
439
 
440
+ ### NotificationService
441
+
442
+ #### `send_email(data: NotificationEmailServiceWriteDto) -> Respons[NotificationEmailServiceReadDto]`
443
+
444
+ Sends an email notification via Gmail SMTP. Supports both plain text and HTML email bodies.
445
+
446
+ **Parameters:**
447
+ - `data`: Email notification data including sender, recipients, subject, and message content
448
+
449
+ **Returns:**
450
+ - `Respons[NotificationEmailServiceReadDto]`: Email sending result with success status and details
451
+
452
+ **Example:**
453
+ ```python
454
+ from trovesuite import NotificationService
455
+ from trovesuite.notification import NotificationEmailServiceWriteDto
456
+
457
+ email_data = NotificationEmailServiceWriteDto(
458
+ sender_email="sender@gmail.com",
459
+ receiver_email=["user1@example.com", "user2@example.com"],
460
+ password="your-gmail-app-password",
461
+ subject="Welcome to TroveSuite",
462
+ text_message="Welcome! This is a plain text message.",
463
+ html_message="<h1>Welcome!</h1><p>This is an <strong>HTML</strong> message.</p>"
464
+ )
465
+
466
+ result = NotificationService.send_email(email_data)
467
+ if result.success:
468
+ print("Email sent successfully!")
469
+ else:
470
+ print(f"Failed to send email: {result.error}")
471
+ ```
472
+
473
+ #### `send_sms(data: NotificationSMSServiceWriteDto) -> Respons[NotificationSMSServiceReadDto]`
474
+
475
+ Sends an SMS notification (currently not implemented).
476
+
477
+ **Parameters:**
478
+ - `data`: SMS notification data
479
+
480
+ **Returns:**
481
+ - `Respons[NotificationSMSServiceReadDto]`: SMS sending result
482
+
398
483
  ### Data Models
399
484
 
485
+ #### `NotificationEmailServiceWriteDto`
486
+
487
+ ```python
488
+ class NotificationEmailServiceWriteDto(BaseModel):
489
+ sender_email: str
490
+ receiver_email: Union[str, List[str]] # Single email or list of emails
491
+ password: str # Gmail app password
492
+ subject: str
493
+ text_message: str
494
+ html_message: Optional[str] = None # Optional HTML content
495
+ ```
496
+
497
+ #### `NotificationEmailServiceReadDto`
498
+
499
+ ```python
500
+ class NotificationEmailServiceReadDto(BaseModel):
501
+ pass # Empty response model for email service
502
+ ```
503
+
504
+ #### `NotificationSMSServiceWriteDto`
505
+
506
+ ```python
507
+ class NotificationSMSServiceWriteDto(BaseModel):
508
+ pass # To be implemented for SMS functionality
509
+ ```
510
+
511
+ #### `NotificationSMSServiceReadDto`
512
+
513
+ ```python
514
+ class NotificationSMSServiceReadDto(BaseModel):
515
+ pass # To be implemented for SMS functionality
516
+ ```
517
+
400
518
  #### `AuthServiceReadDto`
401
519
 
402
520
  ```python
@@ -557,15 +675,65 @@ poetry install
557
675
 
558
676
  This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
559
677
 
678
+ ## Troubleshooting
679
+
680
+ ### Import Issues
681
+
682
+ If you encounter import errors, make sure you're using the correct import patterns:
683
+
684
+ ```python
685
+ # ✅ Correct imports
686
+ from trovesuite import AuthService, NotificationService
687
+ from trovesuite.auth import AuthServiceWriteDto
688
+ from trovesuite.notification import NotificationEmailServiceWriteDto
689
+
690
+ # ❌ Incorrect imports (will fail)
691
+ from trovesuite.auth.auth_write_dto import AuthServiceWriteDto # Too specific
692
+ from trovesuite.notification.notification_write_dto import NotificationEmailServiceWriteDto # Too specific
693
+ ```
694
+
695
+ ### Package Installation
696
+
697
+ If you're having issues with the package installation:
698
+
699
+ 1. **Make sure you have the latest version**:
700
+ ```bash
701
+ pip install --upgrade trovesuite
702
+ ```
703
+
704
+ 2. **Force reinstall if needed**:
705
+ ```bash
706
+ pip install --force-reinstall trovesuite
707
+ ```
708
+
709
+ 3. **Check your Python environment**:
710
+ ```bash
711
+ python -c "import trovesuite; print('Package installed successfully')"
712
+ ```
713
+
714
+ ### Common Issues
715
+
716
+ - **ImportError: No module named 'src'**: This was fixed in version 1.0.5. Update to the latest version.
717
+ - **AttributeError: module has no attribute 'AuthServiceWriteDto'**: Use `from trovesuite.auth import AuthServiceWriteDto` instead of importing from the main package.
718
+
560
719
  ## Support
561
720
 
562
721
  For support, email brightgclt@gmail.com or create a work item in the [Azure DevOps repository](https://dev.azure.com/brightgclt/trovesuite/_workitems/create).
563
722
 
564
723
  ## Changelog
565
724
 
725
+ ### 1.0.5
726
+ - Fixed all import issues across auth, notification, and entities modules
727
+ - Changed absolute imports (`from src.trovesuite.`) to relative imports (`from .` and `from ..`)
728
+ - Ensured package works correctly when installed from PyPI or wheel
729
+ - Added service write DTOs to module exports for easier usage
730
+ - Updated documentation with simplified import patterns
731
+ - All services and DTOs now import correctly in clean environments
732
+ - Package builds and installs without import errors
733
+
566
734
  ### 1.0.8
567
735
  - Restructured package for direct service imports
568
- - Added notification services
736
+ - Added comprehensive notification services with email support
569
737
  - Excluded controllers from package build
570
738
  - Updated import paths for better usability
571
739
  - JWT token validation
@@ -574,3 +742,6 @@ For support, email brightgclt@gmail.com or create a work item in the [Azure DevO
574
742
  - PostgreSQL database integration
575
743
  - Comprehensive logging
576
744
  - Azure integration support
745
+ - Email notification service with Gmail SMTP support
746
+ - Support for both plain text and HTML email content
747
+ - Multiple recipient support for email notifications
@@ -0,0 +1,27 @@
1
+ trovesuite/__init__.py,sha256=xDbpC3gIBHze_rI2C7xkof4xSoX6tZUOfp56-B2W8-w,457
2
+ trovesuite/auth/__init__.py,sha256=OjZllVvjul1glDazJ-d5TrNjgHFigFlQQi1G99DYshk,239
3
+ trovesuite/auth/auth_base.py,sha256=rZHQVLeJRBQ8GClgF5UwG-er4_HXVX5-nt8o6_Z29uY,75
4
+ trovesuite/auth/auth_controller.py,sha256=mQ5IDz2frgEFhcwnvbR2F2j9wKduPhlQTyPdoTWTaOY,407
5
+ trovesuite/auth/auth_read_dto.py,sha256=pQT1ouRVZMAiJn4wAG7NQOKQKTquTMWUe-dYcpLTmEo,533
6
+ trovesuite/auth/auth_service.py,sha256=if2RFI6F1DpbNEuCTSpPbhHVBdYQEg4hVkoxTCnvC4k,14298
7
+ trovesuite/auth/auth_write_dto.py,sha256=rdwI7w6-9QZGv1H0PAGrjkLBCzaMHjgPIXeLb9RmNec,234
8
+ trovesuite/configs/__init__.py,sha256=h1mSZOaZ3kUy1ZMO_m9O9KklsxywM0RfMVZLh9h9WvQ,328
9
+ trovesuite/configs/database.py,sha256=TYPlwydfWirOvCdA1N2gdqJWeesnxLBmRcxqVInZzEA,8320
10
+ trovesuite/configs/logging.py,sha256=mGjR2d4urVNry9l5_aXycMMtcY2RAFIpEL35hw33KZg,9308
11
+ trovesuite/configs/settings.py,sha256=yUbkiFi4QdO9JZG1RRFbP4tYurT47HmN-ohgYcs2SHM,2561
12
+ trovesuite/entities/__init__.py,sha256=Dbl_03Bueyh2vOP2hykd40MmNMrl5nNHSRGP-kqwwNo,160
13
+ trovesuite/entities/health.py,sha256=KaW7yxTQdymIPlnkJJkDqEebBXkD0a7A66i5GgNZLoE,2700
14
+ trovesuite/entities/sh_response.py,sha256=1_sw3PpVaDxWsNiBU0W9YLHZgTFxEj4JJBLBfSY63Ho,1579
15
+ trovesuite/notification/__init__.py,sha256=mjglzmlk29SREP6LfvBYGmCSc-K1SKKAEx_OJdJ2Vrs,394
16
+ trovesuite/notification/notification_base.py,sha256=6Xo0Gnnpg3RgN1_SRkAcH-K4l7DwNDZvn1gRm3oMWyk,320
17
+ trovesuite/notification/notification_controller.py,sha256=nG4owOk_skgnVW1HxjuoluWbfDjQCZKerQRyOE7P_ak,826
18
+ trovesuite/notification/notification_read_dto.py,sha256=K0DFLyAArvtqOGS7q1VzmqO28StTMbcNCgpmhzhad8E,423
19
+ trovesuite/notification/notification_service.py,sha256=sf_lJWcrmRIUeEabdEYLaSdRz2H1D3RBEwKMOA1h2pY,2433
20
+ trovesuite/notification/notification_write_dto.py,sha256=PGpww3PomrmJgXTgpwGhXasv_fC8mgUQvTloaTqaSTA,452
21
+ trovesuite/utils/__init__.py,sha256=3UPKTz9cluTgAM-ldNsJxsnoPTZiqacXlAmzUEHy6q8,143
22
+ trovesuite/utils/helper.py,sha256=lvZ1mvaqY84dkIPB5Ov0uwYDOWBziAS8twobEJZh2Ik,1002
23
+ trovesuite-1.0.6.dist-info/licenses/LICENSE,sha256=EJT35ct-Q794JYPdAQy3XNczQGKkU1HzToLeK1YVw2s,1070
24
+ trovesuite-1.0.6.dist-info/METADATA,sha256=3a3sW9xHPiXx2t7cipfcCfAHoNIWw69UT3n18HJ0FVg,21607
25
+ trovesuite-1.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
26
+ trovesuite-1.0.6.dist-info/top_level.txt,sha256=GzKhG_-MTaxeHrIgkGkBH_nof2vroGFBrjeHKWUIwNc,11
27
+ trovesuite-1.0.6.dist-info/RECORD,,
@@ -1,21 +0,0 @@
1
- trovesuite/__init__.py,sha256=a9jSrjmrhOey6yE2I83TO_rVJDogIwGDyL3HJBGiGqM,347
2
- trovesuite/auth/__init__.py,sha256=d8d5POjq9lGe7GVbc7Qm6hUpx1bgLqEVQFG1iYafdxI,337
3
- trovesuite/auth/auth_base.py,sha256=rZHQVLeJRBQ8GClgF5UwG-er4_HXVX5-nt8o6_Z29uY,75
4
- trovesuite/auth/auth_controller.py,sha256=mMAyTV_0rFeArpcIDu9Pr_IATvFZU6wfIo6ViQoUv0U,477
5
- trovesuite/auth/auth_read_dto.py,sha256=pQT1ouRVZMAiJn4wAG7NQOKQKTquTMWUe-dYcpLTmEo,533
6
- trovesuite/auth/auth_service.py,sha256=if2RFI6F1DpbNEuCTSpPbhHVBdYQEg4hVkoxTCnvC4k,14298
7
- trovesuite/auth/auth_write_dto.py,sha256=rdwI7w6-9QZGv1H0PAGrjkLBCzaMHjgPIXeLb9RmNec,234
8
- trovesuite/configs/__init__.py,sha256=h1mSZOaZ3kUy1ZMO_m9O9KklsxywM0RfMVZLh9h9WvQ,328
9
- trovesuite/configs/database.py,sha256=TYPlwydfWirOvCdA1N2gdqJWeesnxLBmRcxqVInZzEA,8320
10
- trovesuite/configs/logging.py,sha256=mGjR2d4urVNry9l5_aXycMMtcY2RAFIpEL35hw33KZg,9308
11
- trovesuite/configs/settings.py,sha256=yUbkiFi4QdO9JZG1RRFbP4tYurT47HmN-ohgYcs2SHM,2561
12
- trovesuite/entities/__init__.py,sha256=Dbl_03Bueyh2vOP2hykd40MmNMrl5nNHSRGP-kqwwNo,160
13
- trovesuite/entities/health.py,sha256=H8-XUywzvMfZy2dZwDyJGAUbmuULuZYvYIUWhiaVGdY,2729
14
- trovesuite/entities/sh_response.py,sha256=1_sw3PpVaDxWsNiBU0W9YLHZgTFxEj4JJBLBfSY63Ho,1579
15
- trovesuite/utils/__init__.py,sha256=3UPKTz9cluTgAM-ldNsJxsnoPTZiqacXlAmzUEHy6q8,143
16
- trovesuite/utils/helper.py,sha256=lvZ1mvaqY84dkIPB5Ov0uwYDOWBziAS8twobEJZh2Ik,1002
17
- trovesuite-1.0.4.dist-info/licenses/LICENSE,sha256=EJT35ct-Q794JYPdAQy3XNczQGKkU1HzToLeK1YVw2s,1070
18
- trovesuite-1.0.4.dist-info/METADATA,sha256=-HtCWfAoPzJCmZdj_YCKzy8DG17EKe4mCBZDleqG7aQ,16000
19
- trovesuite-1.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
20
- trovesuite-1.0.4.dist-info/top_level.txt,sha256=GzKhG_-MTaxeHrIgkGkBH_nof2vroGFBrjeHKWUIwNc,11
21
- trovesuite-1.0.4.dist-info/RECORD,,