damoov-admin


Namedamoov-admin JSON
Version 0.9.1 PyPI version JSON
download
home_page
SummarySDK for Damoov's APIs
upload_time2024-01-04 12:01:31
maintainer
docs_urlNone
authorDamoov
requires_python
license
keywords damoov sdk telematics mobiletelematics safety driving safe-driving fleetmanagement fleet-management fleet driving-behavior driving-behaviour driving-behavior-analysis driving-behaviour-analysis driving-behavior-monitoring driving-behaviour-monitoring driving-behavior-score driving-behaviour-score driving-behavior-scoring driving-behaviour-scoring driving-behavior-analysis driving-behaviour-analysis driving-behavior-monitoring driving-behaviour-monitoring driving-behavior-score driving-behaviour-score driving-behavior-scoring driving-behaviour-scoring driving-behavior-analysis driving-behaviour-analysis driving-behavior-monitoring driving-behaviour-monitoring driving-behavior-score driving-behaviour-score driving-behavior-scoring driving-behaviour-scoring driving-behavior-analysis driving-behaviour-analysis driving-behavior-monitoring driving-behaviour-monitoring driving-behavior-score driving-behaviour-score driving-behavior-scoring driving-behaviour-scoring
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# Damoov-Admin Python SDK for Telematics API and Services

![Damoov Logo](https://www.damoov.com/wp-content/uploads/2022/07/Damoov_logo_BIMI.svg)

**Damoov** is a leading telematics platform leveraging smartphone capabilities to capture and analyze driving behaviors. Our Python SDK is designed to enable developers to easily integrate and harness the power of Damoov's robust telematics data.

**Changelog** 
version 0.9.1 Release date December 28, 2023
* New method: get_user_details
* General improvements

version 0.9.0 Release date December 14, 2023
* Auth improvements.
* Iterable objects

version 0.8.0 Release date November 27, 2023
* New module available: accounts. the module includes methods to manage applications and instances


version 0.7.7 Release date 13/11/2023:
* New module available: engagement. the module includes leaderboards: general leaderboard and user leaderboard
* Authentication improvements: now, the SDK supports multiple credentials simultaneously.
* Response improvements: default response for empty or no data users.


version 0.7.6 Release date 01/11/2023:
* bug fix

version 0.7.5 Release date 25/10/2023:
* bug fix


version 0.7.4 Release date 20/10/2023:

Security Enhancements:
JWT Token Storage:
* Improved Security: Moved JWT token storage from a local file to secure place, providing an added layer of security.
* Robust Token Handling: Enhanced the methods for saving and loading tokens.

Other Updates:
* Error Handling: Improved HTTP error handling across all API calls, ensuring smoother recovery and clear notifications on issues.
* Code Optimization: Refactored and optimized various parts of the codebase for clarity and performance.

---

## Installation

Install the SDK using pip:

```bash
pip install damoov-admin
```

## Features

- **Authentication:** Seamlessly authenticate and manage sessions.
- **Telematics Data Retrieval:** Fetch driving statistics, safety patterns, performance metrics, and more.
- **Error Handling:** Handle errors effectively with descriptive messages.
- **Utility Functions:** Set of helper functions for date and time management.

## Quick Start

[Full Documentation](https://docs.damoov.com/docs/python-sdk)

1. **Authentication:**

   ```python
    from damoov_admin import statistics, trips, users
    email = "" 
    password = ''

    #Generate your admin credential in Datahub (https://docs.damoov.com/docs/datahub)

    data = <module>.DamoovAuth(email=email, password=password)
   ```

## Documentation

Detailed documentation is available at [Developer Portal](https://docs.damoov.com/docs/python-sdk).

## Feedback and Support

If you have any feedback or need support, please contact us at [hellp@damoov.com](mailto:hello@damoov.com).

## License

This SDK is distributed under the [MIT License](https://docs.damoov.com/docs/license).
=======
# python-admin-sdk
Damoov's Python SDK enables seamless integration with our leading telematics platform. Harness the power of smartphones to capture and analyze driving behaviors. This repo provides tools to easily tap into driving insights, safety metrics, and performance data. Drive smarter with Damoov.


# Modules
## Statistics
*** 
The `Statistics` module provides a comprehensive suite of functionalities to gather various statistics data, ranging from daily user scores to unique tags. Below is a breakdown of its methods and their usage:

## 1. Get started

If you haven't already, install the Damoov-Admin SDK for Python.

```curl
pip install damoov-admin
```

Begin by importing the Statistics module and finalizing the authentication process.

```python
from damoov_admin import statistics
email="your_admin_creds@auth.me"
password="YOUR PASSWORD"

stats = statistics.DamoovAuth(email=email, password=password)

```

## 2. Methods

#### Syntaxes:

- `user_id`: ID of the user, also known as a DeviceToken
- `start_date`: Start date in format `YYYY-MM-DDTHH:MM:SS`
- `end_date`: End date in format `YYYY-MM-DDTHH:MM:SS`
- `tag` : ['Tag1', '...', 'TagX']

***

### `user_daily_statistics`

Obtain daily statistics of a user.

**Parameters**:

- `user_id`: ID of the user
- `start_date`: Start date in format `YYYY-MM-DDTHH:MM:SS`
- `end_date`: End date in format `YYYY-MM-DDTHH:MM:SS`
- `tag` (optional): Tag to filter

**Example**:

Request:

```python
user_statistics=stats.user_daily_statistics(
        user_id='2948a036-36f8-4f76-babd-0635874aa3er',
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
  			tag=['Business', 'Personal']
        )
```

Response: 

```json
{"Result": [
{
            "UserId": "2948a036-36f8-4f76-babd-0635874aa3er",
            "InstanceId": "",
            "AppId": "",
            "CompanyId": "",
            "ReportDate": "2023-09-02T00:00:00",
            "MileageKm": 200.7945138572461,
            "MileageMile": 124.77371091089272,
            "TripsCount": 8,
            "DriverTripsCount": 8,
            "OtherTripsCount": 0,
            "MaxSpeedKmh": 122.29244232177734,
            "MaxSpeedMileh": 75.99252365875243,
            "AverageSpeedKmh": 54.68438828527036,
            "AverageSpeedMileh": 33.980878880466996,
            "TotalSpeedingKm": 12.483415754279346,
            "TotalSpeedingMile": 7.757194549709185,
            "AccelerationsCount": 4,
            "BrakingsCount": 5,
            "CorneringsCount": 4,
            "PhoneUsageDurationMin": 3.5368999999999997,
            "PhoneUsageMileageKm": 2.2573077536862733,
            "PhoneUsageMileageMile": 1.40269103814065,
            "PhoneUsageSpeedingDurationMin": 0.0,
            "PhoneUsageSpeedingMileageKm": 0.0,
            "PhoneUsageSpeedingMileageMile": 0.0,
            "DrivingTime": 186.96666666666667,
            "NightDrivingTime": 0.0,
            "DayDrivingTime": 45.993165254592896,
            "RushHoursDrivingTime": 140.0721311569214,
            "PermissionsLevel": 92,
            "TrustLevel": 92.0
        },
  ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `user_daily_ecoscore`

Retrieve a user's daily ecoscore.

**Parameters**:

- `user_id`: ID of the user
- `start_date`: Start date
- `end_date`: End date

**Example**:

Request:

```python
user_statistics=stats.user_daily_ecoscore(
        user_id='2948a036-36f8-4f76-babd-0635874aa3er',
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        )
```

Response: 

```json
"Result": [
         {
            "UserId": "2948a036-36f8-4f76-babd-0635874aa3er",
            "InstanceId": "",
            "AppId": "",
            "CompanyId": "",
            "CalcDate": "2023-10-02T00:00:00",
            "EcoScoreFuel": 97.80603418529739,
            "EcoScoreTyres": 100.0,
            "EcoScoreBrakes": 71.24604879817583,
            "EcoScoreDepreciation": 30.066967347066047,
            "EcoScore": 75.74524464826901,
            "PermissionsLevel": 100,
            "TrustLevel": 100.0
        }
    ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `user_daily_safetyscore`

Get a user's daily safety score.

**Parameters**:

- `user_id`: ID of the user
- `start_date`: Start date
- `end_date`: End date
- `tag` (optional): Tag to filter

**Example**:

Request:

```python
    user_statistics=stats.user_daily_safetyscore(
        user_id='2948a036-36f8-4f76-babd-0635874aa3er',
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        )
```

Response:

```json
"Result": [     
  {
            "UserId": "2948a036-36f8-4f76-babd-0635874aa3er",
            "InstanceId": "",
            "AppId": "",
            "CompanyId": "",
            "AccelerationScore": 78.0,
            "BrakingScore": 80.0,
            "SpeedingScore": 72.0,
            "PhoneUsageScore": 86.0,
            "CorneringScore": 79.0,
            "SafetyScore": 90.0,
            "CalcDate": "2023-10-02T00:00:00",
            "PermissionsLevel": 100,
            "TrustLevel": 100.0
        }
    ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `user_accumulated_statistics`

Fetch accumulated statistics for a user.

**Parameters**:

- `user_id`: ID of the user
- `start_date`: Start date
- `end_date`: End date
- `tag` (optional): Tag to filter

**Example**:

Request:

```python
    user_statistics=stats.user_accumulated_statistics(
        user_id='2948a036-36f8-4f76-babd-0635874aa3er',
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        )
```

Response:

```json
    "Result": [
        {
            "UserId": "2948a036-36f8-4f76-babd-0635874aa3er",
            "InstanceId": "",
            "AppId": "",
            "CompanyId": "",
            "MileageKm": 2111.0221881212033,
            "MileageMile": 1311.789187698516,
            "TripsCount": 153,
            "DriverTripsCount": 153,
            "OtherTripsCount": 0,
            "MaxSpeedKmh": 122.29244232177734,
            "MaxSpeedMileh": 75.99252365875243,
            "AverageSpeedKmh": 43.86747108399977,
            "AverageSpeedMileh": 27.25924653159745,
            "TotalSpeedingKm": 144.23474761841058,
            "TotalSpeedingMile": 89.6274721700803,
            "AccelerationsCount": 94,
            "BrakingsCount": 78,
            "CorneringsCount": 45,
            "PhoneUsageDurationMin": 20.447583333333334,
            "PhoneUsageMileageKm": 17.025709577441788,
            "PhoneUsageMileageMile": 10.579775931422326,
            "PhoneUsageSpeedingDurationMin": 0.2427833333333333,
            "PhoneUsageSpeedingMileageKm": 0.32201192397028167,
            "PhoneUsageSpeedingMileageMile": 0.20009820955513297,
            "DrivingTime": 3301.6166666666663,
            "NightDrivingTime": 0.0,
            "DayDrivingTime": 1807.0491929650307,
            "RushHoursDrivingTime": 1490.29370367527,
            "PermissionsLevel": 93,
            "TrustLevel": 93.0
        }
    ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `user_accumulated_ecoscore`

Acquire a user's accumulated ecoscore over a range.

**Parameters**:

- `user_id`: ID of the user
- `start_date`: Start date
- `end_date`: End date

**Example**:

Request:

```python
    user_statistics.user_accumulated_ecoscore(
        user_id='2948a036-36f8-4f46-babd-0635870aa7ed',
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00'
        )
```

Response:

```json
"Result": [
        {
            "UserId": "2948a036-36f8-4f76-babd-0635874aa3er",
            "InstanceId": "",
            "AppId": "",
            "CompanyId": "",
            "EcoScoreFuel": 97.21532847773788,
            "EcoScoreTyres": 100.0,
            "EcoScoreBrakes": 83.25091485161596,
            "EcoScoreDepreciation": 26.5303907938692,
            "EcoScore": 75.00759345586548,
            "PermissionsLevel": 93,
            "TrustLevel": 93.0
        }
      ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `user_accumulated_safetyscore`

Obtain a user's accumulated safety score.

**Parameters**:

- `user_id`: ID of the user
- `start_date`: Start date
- `end_date`: End date
- `tag` (optional): Tag to filter

**Example**:

Request:

```python
    user_statistics=stats.user_accumulated_safetyscore(
        user_id='2948a036-36f8-4f76-babd-0635874aa3er',
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        tag='')
```

Response:

```json
"Result": [
        {
            "UserId": "2948a036-36f8-4f76-babd-0635874aa3er",
            "InstanceId": "",
            "AppId": "",
            "CompanyId": "",
            "AccelerationScore": 77.625,
            "BrakingScore": 81.96875,
            "SpeedingScore": 70.125,
            "PhoneUsageScore": 86.46875,
            "CorneringScore": 85.71875,
            "SafetyScore": 89.53125,
            "PermissionsLevel": 93,
            "TrustLevel": 93.0
        }
    ],
    "Status": 200,
    "Title": "",
    "Errors": []
```

***

### `entity_accumulated_ecoscore`

Retrieve the accumulated ecoscore for an entity.

**Parameters**:

- `start_date`: Start date
- `end_date`: End date
- `tag` (optional): Tag to filter
- One of the following must be provided: 
  - `instance_id`: Instance ID 
  - `app_id`: Application ID 
  - `company_id`: Company ID

**Example**:

Request:

```python
    instance_statistics=stats.entity_accumulated_ecoscore(
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        instance_id="your_instance_id",

    )
```

Response:

```json
    "Result": {
        "UserId": null,
        "InstanceId": "your_instance_id",
        "AppId": null,
        "CompanyId": null,
        "EcoScoreFuel": 97.52329737487166,
        "EcoScoreTyres": 100.0,
        "EcoScoreBrakes": 75.59935000534821,
        "EcoScoreDepreciation": 44.719564784133794,
        "EcoScore": 80.30344045080935,
        "PermissionsLevel": 94,
        "TrustLevel": 94.0
    },
    "Status": 200,
    "Title": "",
    "Errors": []
```

***

### `entity_daily_statistics`

Fetch daily statistics for an entity.

**Parameters**:

- `start_date`: Start date
- `end_date`: End date
- `tag` (optional): Tag to filter
- One of the following must be provided:
  - `instance_id`: Instance ID 
  - `app_id`: Application ID 
  - `company_id`: Company ID

**Example**:

Request:

```python
company_d_statistics=stats.entity_daily_statistics(
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        company_id='your_company_id'
    )
```

Response:

```json
"Result": [
        {
            "InstanceId": null,
            "AppId": null,
            "CompanyId": "your_company_id",
            "ReportDate": "2023-09-18T00:00:00",
            "RegisteredUsers": 12,
            "ActiveUsers": 282,
            "MileageKm": 25382.13108184097,
            "MileageMile": 15772.456254255985,
            "TripsCount": 1789,
            "DriverTripsCount": 1786,
            "OtherTripsCount": 3,
            "MaxSpeedKmh": 146.1915283203125,
            "MaxSpeedMileh": 90.84341569824218,
            "AverageSpeedKmh": 36.002057830035696,
            "AverageSpeedMileh": 22.371678735584183,
            "TotalSpeedingKm": 560.9847620514762,
            "TotalSpeedingMile": 348.595931138787,
            "AccelerationsCount": 1139,
            "BrakingsCount": 1326,
            "CorneringsCount": 1474,
            "PhoneUsageDurationMin": 3800.4465833333334,
            "PhoneUsageMileageKm": 2284.020002380001,
            "PhoneUsageMileageMile": 1419.290029478932,
            "PhoneUsageSpeedingDurationMin": 12.098366666666667,
            "PhoneUsageSpeedingMileageKm": 10.980101468687467,
            "PhoneUsageSpeedingMileageMile": 6.823035052642389,
            "DrivingTime": 35077.866666666676,
            "NightDrivingTime": 1351.4007195532322,
            "DayDrivingTime": 21381.867682458833,
            "RushHoursDrivingTime": 12418.06661722064,
            "PermissionsLevel": 95,
            "TrustLevel": 95.0
        },
  ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `entity_safety_score`

Obtain safety score for an entity.

**Parameters**:

- `start_date`: Start date
- `end_date`: End date
- `tag` (optional): Tag to filter
- One of the following must be provided:
  - `instance_id`: Instance ID 
  - `app_id`: Application ID 
  - `company_id`: Company ID

**Example**:

Request:

```python
instance_statistics=stats.entity_daily_safetyscore(
        start_date='2023-09-20T00:00:00',
        end_date='2023-10-02T00:00:00',
        app_id="your_app_id",
    )
```

Response:

```json
"Result": [
			{
            "InstanceId": null,
            "AppId": "your_app_id",
            "CompanyId": null,
            "ReportDate": "2023-10-02T00:00:00",
            "AccelerationScore": 76.99007444168734,
            "BrakingScore": 76.41935483870968,
            "SpeedingScore": 90.21339950372209,
            "PhoneUsageScore": 74.04466501240695,
            "CorneringScore": 74.01488833746899,
            "SafetyScore": 83.22332506203475,
            "PermissionsLevel": 95,
            "TrustLevel": 95.0
        }
    ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `entity_accumulated_statistics`

Get accumulated statistics for an entity.

**Parameters**:

- `start_date`: Start date
- `end_date`: End date
- `tag` (optional): Tag to filter
- One of the following must be provided:
  - `instance_id`: Instance ID 
  - `app_id`: Application ID 
  - `company_id`: Company ID

**Example**:

Request:

```python
    company_statistics=stats.entity_accumulated_statistics(
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        company_id='your_company_id'
    )
```

Response

```json
{
    "Result": {
        "InstanceId": null,
        "AppId": null,
        "CompanyId": "your_company_id",
        "TotalRegisteredUsers": 299,
        "ActiveUsers": 491,
        "MileageKm": 765112.3461886081,
        "MileageMile": 475440.8119216011,
        "TripsCount": 47429,
        "DriverTripsCount": 47200,
        "OtherTripsCount": 229,
        "MaxSpeedKmh": 235.80712890625,
        "MaxSpeedMileh": 146.53054990234375,
        "AverageSpeedKmh": 37.49730203560512,
        "AverageSpeedMileh": 23.300823484925015,
        "TotalSpeedingKm": 18645.076059143215,
        "TotalSpeedingMile": 11586.050263151588,
        "AccelerationsCount": 31278,
        "BrakingsCount": 39863,
        "CorneringsCount": 40161,
        "PhoneUsageDurationMin": 117555.1976166667,
        "PhoneUsageMileageKm": 67128.67055363058,
        "PhoneUsageMileageMile": 41713.75588202606,
        "PhoneUsageSpeedingDurationMin": 347.51840000000016,
        "PhoneUsageSpeedingMileageKm": 357.2293322990894,
        "PhoneUsageSpeedingMileageMile": 221.98230709065405,
        "DrivingTime": 1014552.5333333339,
        "NightDrivingTime": 43901.92194293812,
        "DayDrivingTime": 636574.804801112,
        "RushHoursDrivingTime": 341089.71085665515,
        "PermissionsLevel": 95,
        "TrustLevel": 95.0
    },
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `entity_daily_safetyscore`

Fetch daily safety score for an entity.

**Parameters**:

- `start_date`: Start date
- `end_date`: End date
- `tag` (optional): Tag to filter
- One of the following must be provided:
  - `instance_id`: Instance ID 
  - `app_id`: Application ID 
  - `company_id`: Company ID

**Example**:

Request:

```python
    app_statistics=stats.entity_daily_safetyscore(
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        app_id="your_app_id", 
    )
```

Response:

```json
"Result": [
{
            "InstanceId": null,
            "AppId": "your_app_id",
            "CompanyId": null,
            "ReportDate": "2023-10-02T00:00:00",
            "AccelerationScore": 76.99007444168734,
            "BrakingScore": 76.41935483870968,
            "SpeedingScore": 90.21339950372209,
            "PhoneUsageScore": 74.04466501240695,
            "CorneringScore": 74.01488833746899,
            "SafetyScore": 83.22332506203475,
            "PermissionsLevel": 95,
            "TrustLevel": 95.0
        },
    ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `lastupdates`

Get the last updates for a user.

**Parameters**:

- `user_id`: ID of the user

**Example**:

Request:

```python
    metadata=stats.lastupdates(
        user_id='2948a036-36f8-4f46-babd-0635870aa7ed'
        )
```

Response:

```json
{
    "Result": [
        {
            "UserId": "your_user_id",
            "InstanceId": "your_instance_id",
            "AppId": "your_app_id",
            "CompanyId": "your_company_id",
            "LatestTripDate": "2023-10-11T14:33:40+01:00",
            "LatestScoringDate": "2023-10-11T00:00:00"
        }
    ],
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `uniquetags`

Obtain unique tags for a user within a specific range.

**Parameters**:

- `user_id`: ID of the user
- `start_date`: Start date
- `end_date`: End date

**Example**:

Request:

```python
   metadata=stats.uniquetags(
        user_id='2948a036-36f8-4f46-babd-0635870aa7ed',
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',                                 
    )
```

Response:

```json
{
    "Result": {
        "UniqueTagsCount": 2,
        "UniqueTagsList": [
            "your_tag_1",
            "your_tag_x"
        ]
    },
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

## 4. Note

- In all methods, if there's a `HTTPError`, the error will be printed, and the response will be handled accordingly.
- For daily statistics, scores, and list of trips, the methods automatically modify the requested period to 14 days if the original request spans a period longer than that.

## 5. Response

The `Statistics Response` processes and provides easy access to specific parts of the data returned by the `Statistics` module. Here's a detailed breakdown of its properties and methods:

### `result`

Provides the 'Result' from the response. If the result is a list with a single item, it returns that item. Otherwise, it returns the full list or results.

**Return Type**: `dict` or `list`

***

### `status`

Returns the 'Status' from the response.

**Return Type**: `dict`

***

### `title`

Returns the 'Title' of the response.

**Return Type**: `str`

***

### `errors`

Fetches any 'Errors' from the response.

**Return Type**: `list`

***

### `latest_trip_date`

Provides the 'LatestTripDate' from the result.

**Return Type**: Depends on data (e.g., `str`, `None`)

***

### `latest_scoring_date`

Retrieves the 'LatestScoringDate' from the result.

**Return Type**: Depends on data (e.g., `str`, `None`)

***

### `tags_count`

Gives the 'UniqueTagsCount' from the result.

**Return Type**: Depends on data (e.g., `int`, `None`)

***

### `tags_list`

Fetches the 'UniqueTagsList' from the result.

**Return Type**: Depends on data (e.g., `list`, `None`)

## 5. Usage

After you fetch data using methods from the `Statistics` module, you can pass the returned data to `StatisticsResponse` to further process and easily access specific parts of the response.

```python
# Import and initial initialization

from damoov_admin import statistics
email="your_admin_creds@auth.me"
password="YOUR PASSWORD"

stats = statistics.DamoovAuth(email=email, password=password)

# Methods to fetch user statistics and scores
app_statistics=stats.entity_daily_safetyscore(
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',
        app_id="your_app_id", 
    )
  print(app_statistics)
  print(app_statistics.status)
  print(app_statistics.result)
  
  
  metadata=stats.uniquetags(
        user_id='2948a036-36f8-4f46-babd-0635870aa7ed',
        start_date='2023-09-01T00:00:00',
        end_date='2023-10-02T00:00:00',                                 
    )
  print(metadata.tags_list)
  print(metadata.tags_count)
  
  
  metadata=stats.lastupdates(
        user_id='2948a036-36f8-4f46-babd-0635870aa7ed'
        )
  print(metadata.latest_trip_date)
  print(metadata.latest_scoring_date)
```

## Trips
***
The `Trips` module offers a robust set of functionalities designed for efficient trip data management. This encompasses a range of operations from fetching trip details, updating trip

## 1. Get started

If you haven't already, install the Damoov-Admin SDK for Python.

```curl
pip install damoov-admin
```

Begin by importing the User management module and finalizing the authentication process.

```python
from damoov_admin import trips
email="your_admin_creds@auth.me"
password="YOUR PASSWORD"

trips_mngt = trips.DamoovAuth(email=email, password=password)

```

## 2. Methods

The `Trips` module offers a robust set of functionalities tailored for managing and fetching trip-related data. Here's a comprehensive breakdown of its methods and their usage:

#### Syntaxes:

- `sort_by`: Sort parameter (e.g., "StartDateUtc, StartDateUtc_Desc").
- `unit_system`: Measurement unit system (e.g., "Si" or "Imperial")
- `user_id`:  ID of the user/ DeviceToken whose trips are to be fetched.
- `start_date`, `end_date`: Date range for the trip in format `YYYY-MM-DDTHH:MM:SS`
- `start_date_timestamp_sec`, `end_date_timestamp_sec`: Alternative date range using timestamps.
- `include_details`: Include detailed trip data, like start, end address, transportation type, and tags
- `include_statistics`: Include statistics related to the trip.
- `include_scores`: Include scores associated with the trip.
- `include_waypoints`: Include per-second GPS waypoints of the trip.
- `include_events`: Include events or incidents associated with the trip.
- `include_related`: Include related trip data, including URI for future get requests.
- `tags_included`: Tags to be included in the filtering.
- `tags_excluded`: Tags to be excluded in the filtering.
- `limit`: Limit the number of trips returned.

***

### `get_list_trips`

Fetches the list of trips for a specific user, with various optional filters to refine the result set.

- **Parameters**:
  - `user_id`: **Required**
  - `start_date`, `end_date`: **Required.** 
  - `start_date_timestamp_sec`, `end_date_timestamp_sec`
  - `include_details`
  - `include_statistics`
  - `include_scores`
  - `include_related`
  - `tags_included`
  - `tags_excluded`:
  - `unit_system`
  - `sort_by`
  - `limit`

**Example**: 

Request

```python
    user_trip_details=trip.get_list_trips(
    user_id='user_id',
    # start_date='2023-09-09', 
    # end_date='2023-10-10', 
    start_date_timestamp_sec=1696704060, 
    end_date_timestamp_sec=1696713840,
    sort_by='StartDateUtc',
    include_details=False, 
    include_statistics=False, 
    include_scores=False, 
    include_related=True, 
    tags_included=None, 
    tags_excluded=None,  
    locale="EN", 
    unit_system="Imperial",
    # limit=3
    )
```

Response

```json
{
    "Result": {
        "Trips": [
            {
                "Id": "trip_id",
                "DateUpdated": "2022-09-10T12:29:25+00:00",
                "Identifiers": {
                    "CompanyId": "company_id",
                    "ApplicationId": "application_id",
                    "InstanceId": "instance_id",
                    "UserId": "user_id"
                },
                "Data": {
                    "StartDate": "2022-09-10T12:20:25+00:00",
                    "EndDate": "2022-09-10T12:29:25+00:00",
                    "UnitSystem": "Imperial",
                    "Addresses": {
                        "Start": {
                            "Full": "102 Beach St, San Francisco, CA 94133-1101, United States",
                            "Parts": {
                                "CountryCode": "USA",
                                "Country": "United States",
                                "County": "San Francisco",
                                "State": "California",
                                "City": "San Francisco",
                                "District": "Fisherman's Wharf",
                                "Street": "Beach St",
                                "House": "102"
                            }
                        },
                        "End": {
                            "Full": "E Beach, San Francisco, CA 94129, United States",
                            "Parts": {
                                "CountryCode": "USA",
                                "Country": "United States",
                                "County": "San Francisco",
                                "State": "California",
                                "City": "San Francisco",
                                "District": "Presidio",
                                "Street": "E Beach"
                            }
                        }
                    },
                    "TransportType": {
                        "Current": "OriginalDriver",
                        "ConfirmNeeded": false
                    },
                    "Tags": []
                },
                "Statistics": {
                    "Mileage": 4.143953744168464,
                    "DurationMinutes": 17.183333333333334,
                    "AccelerationsCount": 0.0,
                    "BrakingsCount": 0.0,
                    "CorneringsCount": 1.0,
                    "TotalSpeedingMileage": 0.0,
                    "MidSpeedingMileage": 0.0,
                    "HighSpeedingMileage": 0.0,
                    "PhoneUsageDurationMinutes": 11.989366666666665,
                    "PhoneUsageMileage": 3.5955679069262994,
                    "PhoneUsageWithSpeedingDurationMinutes": 0.0,
                    "PhoneUsageWithSpeedingMileage": 0.0,
                    "DayHours": 17.233333587646484,
                    "RushHours": 0.0,
                    "NightHours": 0.0,
                    "AverageSpeed": 11.416121791501084,
                    "MaxSpeed": 19.790273235742262
                },
                "Scores": {
                    "Safety": 97.0,
                    "Acceleration": 100.0,
                    "Braking": 100.0,
                    "Cornering": 56.0,
                    "Speeding": 100.0,
                    "PhoneUsage": 40.0,
                    "Eco": 77.0,
                    "EcoBrakes": 100.0,
                    "EcoDepreciation": 25.0,
                    "EcoFuel": 100.0,
                    "EcoTyres": 100.0
                },
                "Related": [
                    {
                        "Type": "Waypoints",
                        "Uri": "https://api.telematicssdk.com/trips/get/admin/v1/trip_id/waypoints"
                    },
                    {
                        "Type": "Trip",
                        "Uri": "https://api.telematicssdk.com/trips/get/v1/trip_id"
                    }
                ]
            }
        ]
    },
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

***

### `get_trip_details`

Retrieves waypoint details of a specific trip by its unique ID.

- **Parameters**:
  - `trip_id`: (Required)
  - `user_id`: (Required)
  - `include_details`: Include detailed trip data.
  - `include_statistics`: Include statistics related to the trip.
  - `include_scores`: Include scores associated with the trip.
  - `include_waypoints`: Include waypoints of the trip.
  - `include_events`: Include events associated with the trip.
  - `include_related`: Include related trip data.
  - `locale`: Locale settings (e.g., "EN").
  - `unit_system`: Measurement unit system (e.g., "Si" or "Imperial").

**Example**:

Request

```python
    trip_details = trip.get_trip_details(
    trip_id="trip_id",
    user_id="user_id",
    include_details=True, 
    include_statistics=True, 
    include_scores=True, 
    include_waypoints=True,
    include_events=True, 
    include_related=True, 
    locale="EN", 
    unit_system="Imperial"
    )
```

Response

```json
{
    "Result": {
        "Trip": {
            "Id": "trip_id",
            "DateUpdated": "2023-10-11T07:34:31+00:00",
            "Identifiers": {
                "CompanyId": "company_id",
                "ApplicationId": "application_id",
                "InstanceId": "instance_id",
                "UserId": "user_id"
            },
            "Data": {
                "StartDate": "2023-10-09T08:19:23+01:00",
                "StartDateUnixMilliseconds": 1696835963000,
                "EndDate": "2023-10-09T08:36:44+01:00",
                "EndDateUnixMilliseconds": 1696837004000,
                "UnitSystem": "Imperial",
                "Addresses": {
                    "Start": {
                        "Full": "Avenida Marechal Gomes da Costa 17, 1800-253 Lisbon, Portugal",
                        "Parts": {
                            "CountryCode": "PRT",
                            "Country": "Portugal",
                            "County": "Lisbon",
                            "City": "Lisbon",
                            "District": "Lisbon",
                            "Street": "Avenida Marechal Gomes da Costa",
                            "House": "17"
                        }
                    },
                    "End": {
                        "Full": "Rua do Arco do Cego 177, 1000-020 Lisbon, Portugal",
                        "Parts": {
                            "CountryCode": "PRT",
                            "Country": "Portugal",
                            "County": "Lisbon",
                            "City": "Lisbon",
                            "District": "Lisbon",
                            "Street": "Rua do Arco do Cego",
                            "House": "177"
                        }
                    }
                },
                "TransportType": {
                    "Current": "OriginalDriver",
                    "ConfirmNeeded": true
                },
                "Tags": []
            },
            "Statistics": {
                "Mileage": 3.111590678261461,
                "DurationMinutes": 17.35,
                "AccelerationsCount": 1.0,
                "BrakingsCount": 0.0,
                "CorneringsCount": 0.0,
                "TotalSpeedingMileage": 0.021650736620396006,
                "MidSpeedingMileage": 0.06389130188092126,
                "HighSpeedingMileage": 0.0,
                "PhoneUsageDurationMinutes": 0.0,
                "PhoneUsageMileage": 0.0,
                "PhoneUsageWithSpeedingDurationMinutes": 0.0,
                "PhoneUsageWithSpeedingMileage": 0.0,
                "DayHours": 0.0,
                "RushHours": 17.270366668701172,
                "NightHours": 0.0,
                "AverageSpeed": 20.500146429454027,
                "MaxSpeed": 47.186389247420195
            },
            "Scores": {
                "Safety": 79.0,
                "Acceleration": 53.0,
                "Braking": 100.0,
                "Cornering": 100.0,
                "Speeding": 48.0,
                "PhoneUsage": 100.0,
                "Eco": 91.0,
                "EcoBrakes": 100.0,
                "EcoDepreciation": 75.0,
                "EcoFuel": 98.94907,
                "EcoTyres": 100.0
            },
              "Waypoints": [
                {
                    "Index": 0,
                    "SecSinceStart": 0,
                    "PointDateUnixMilliseconds": 0,
                    "Lat": 0,
                    "Long": 0,
                    "Speed": 0,
                    "SpeedLimit": 0,
                    "Speeding":status ,
                    "PhoneUsage": true
                }
              ],
            "Events": [
                {
                    "Id": "",
                    "Type": "Acceleration",
                    "Date": "2023-10-09T08:22:10+01:00",
                    "Lat": 38.74998,
                    "Long": -9.10616,
                    "Value": 3.353325366973877
                }
            ],
            "Related": [
                {
                    "Type": "Waypoints",
                    "Uri": "https://api.telematicssdk.com/trips/get/admin/v1/300665e1-e415-46ab-892f-1cd25afd650d/waypoints"
                }
            ]
        }
    },
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

## 3. Note

- In all methods, if there's a `HTTPError`, the error will be printed, and the response will be handled accordingly.
- For daily statistics, scores, and list of trips, the methods automatically modify the requested period to 14 days if the original request spans a period longer than that.

## 4. Response

The `TripsResponse` processes and provides easy access to specific parts of the data returned by the `Trips` module. Here's a detailed breakdown of its properties:

### `result`

Returns the 'Result' part from the response.

**Return Type**: `dict`

***

### `trips`

Provides the list of 'Trip' items from the response. If the result is not a list, an empty list is returned.

**Return Type**: `list`

***

### `statistics`

Provides the 'Statistics' information for a trip.

**Return Type**: `dict`

***

### `details`

Returns the detailed data for the 'Trip'.

**Return Type**: `dict`

***

### `transporttype`

Provides the 'TransportType' information for a trip.

**Return Type**: `dict`

***

### `scores`

Returns the 'Scores' for the trip.

**Return Type**: `dict`

***

### `events`

Provides the 'Events' for the trip.

**Return Type**: `dict`

***

### `waypoints`

Returns the 'Waypoints' for the trip.

**Return Type**: `dict`

***

### `paging_info`

Provides the paging information if available.

**Return Type**: `dict`

***

### `status`

Returns the 'Status' from the response.

**Return Type**: `dict`

***

### `datetime`

Provides the 'Data' (usually representing datetime) from the response.

**Return Type**: `dict`

***

### `trip_id`

Returns the unique ID for the trip.

**Return Type**: Depends on data (e.g., `str`, `None`)

***

## 5. Usage

After making calls to the `Trips` module to retrieve trip-related data, you can pass the returned data to `TripsResponse` to further process and easily access specific parts of the response.

```python
# Import and initial initialization

from damoov_admin import trips
email="your_admin_creds@auth.me"
password="YOUR PASSWORD"

trips_mngt = trips.DamoovAuth(email=email, password=password)

# Method to get a list of trips for selected period of time
user_trip_details=trip.get_list_trips(
    user_id='7623f515-b867-4325-bc63-3a0248d4f774',
    # start_date='2023-09-09', 
    # end_date='2023-10-10', 
    start_date_timestamp_sec=1696704060, 
    end_date_timestamp_sec=1696713840,
    sort_by='StartDateUtc',
    tags_included=['Business'],
    include_details=True, 
    include_statistics=True, 
    include_scores=True, 
    include_related=True, 
    locale="EN", 
    unit_system="Imperial", 
    limit=1
    )

print('status: ', user_trip_details.status)
print('details: ', user_trip_details.details)
print('trips: ',user_trip_details.trips)
print('trip id: ',user_trip_details.trip_id)
print('date and time: ', user_trip_details.datetime)
print(user_trip_details.paging_info)
print(user_trip_details) # prints full response in JSON format
    

# Methods to fetch trip details, including waypoints, for a specific trip ID.
trip_details = trip_mngt.get_trip_details(
      trip_id="trip_id",
      user_id="user_id",
      include_details=True, 
      include_statistics=True, 
      include_scores=True, 
      include_waypoints=True,
      include_events=True, 
      include_related=True, 
      locale="EN", 
      unit_system="Imperial"
    )

print(trip_details) # prints full response in JSON format
print('Status: ', trip_details.status)
print('Result: ',trip_details.result)
print('Statistics: ',trip_details.statistics)
print('Scores: ',trip_details.scores)
print('Events: ',trip_details.events)
print('Waypoints: ',trip_details.waypoints)
print('Details: ',trip_details.details)
print('Transportation mode: ',trip_details.transporttype)
 
```

## Users
***
The `Users` module provides a comprehensive suite of functionalities to manage user data effectively, ranging from user creation, updates, to deletions. Below is a breakdown of its methods and their usage:

## 1. Get started

If you haven't already, install the Damoov-Admin SDK for Python.

```curl
pip install damoov-admin
```

Begin by importing the User management module and finalizing the authentication process.

```python
from damoov_admin import users
email="your_admin_creds@auth.me"
password="YOUR PASSWORD"

user_mngt = users.DamoovAuth(email=email, password=password)

```

## 2. Methods

#### Syntaxes:

- `instanceid`:  The instance ID for the user.
- `instancekey`:  The instance Key for the user.
- `ClientId`: A unique identifier assigned by the client for the user.
- `FirstName`: First name of the user.
- `LastName`: Last name of the user.
- `Nickname`: Nickname for the user.
- `Phone`: Phone number of the user.
- `Email`: Email address of the user.
- `CreateAccessToken`: If set to True, a user's access token will be created.

***

### `create_user`

Creates a new user based on the given parameters.

**Parameters**

- `instanceid`: **Required.** 
- `instancekey`: **Required.**
- `FirstName`: Optional. 
- `LastName`: Optional. 
- `Nickname`: Optional. 
- `Phone`: Optional. 
- `Email`: Optional.
- `ClientId`: Optional. 
- `CreateAccessToken`: Optional. 

**Example**:

Request:

```python
    new_user=users_mgnt.create_user(
        instanceid='your_instance_id',
        instancekey='your_instance_key',
        FirstName='FirstName',
        LastName='LastName',
        Nickname='Nickname',
        Phone='123456789',
    )
```

Response:

> 📘 DeviceToken is an old name for UserId

```json
{
    "Result": {
        "DeviceToken": "user_devicetoken/userid", // DeviceToekn is the same as UserId
        "AccessToken": null,
        "RefreshToken": null
    },
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

### `update_user`

Updates user details based on the given parameters.

**Parameters**

- `userid`: **Required.** User's unique identifier.
- `ClientId`: Optional. Client ID for the user.
- `FirstName`: Optional. Updated first name of the user.
- `LastName`: Optional. Updated last name of the user.
- `Nickname`: Optional. Updated nickname for the user.
- `Phone`: Optional. Updated phone number of the user.
- `Email`: Optional. Updated email address of the user.

**Example**:

Request:

```python
    user=users_mgnt.update_user(
        userid='User_Id',
        FirstName='Tim',
        LastName='Plumber',
        Nickname='Tim-tim',
        Phone='123456789',
        ClientId='12-34-56789'
    )
```

Response:

```json
{
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

### `delete_user`

**Parameters**:

**Example**:

Request:

```python
delete_user=users_mgnt.delete_user(
        userid='User_devicetoken/userid'
    )
```

Response:

```
{
    "Status": 200,
    "Title": "",
    "Errors": []
}
```

## 3. Note

- In all methods, if there's a HTTPError, the error will be printed, and the response will be handled accordingly.

## 4. Response

The `UsersResponse` class is tailored to process and provide convenient access to specific parts of the data returned from user-related operations. Here's an in-depth breakdown of its properties and methods:

### `devicetoken`

Returns the `DeviceToken` from the response's `Result` section. It provides the device token/ UseId associated with the user.

**Return Type**: Depends on data (e.g., `str`, `None`)

***

### `userid`

Returns the user ID from the response's `Result` section. It provides the device token/ UseId associated with the user.

**Return Type**: Depends on data (e.g., `str`, `None`)

***

### `status`

Extracts the 'Status' of the response. This typically indicates the success or failure of the operation and might contain relevant status codes or messages.

**Return Type**: `dict`

## 5. Usage

After conducting operations related to users, you can pass the returned data to `UsersResponse` to further process and effortlessly access specific parts of the response.

```python
# Import and initial initialization
from damoov_admin import users
email="your_admin_creds@auth.me"
password="YOUR PASSWORD"

user_mngt = users.DamoovAuth(email=email, password=password)

# Use methods to create and manage users
new_user=users.create_user(
        instanceid='your_instance_id',
        instancekey='your_instance_key',,
    )
    print(new_user)
    print(new_user.devicetoken)
    print(new_user.status)
    print(new_user.userid)
 
 user=users_mgnt.update_user(
        userid='User_Id',
        FirstName='Tim',
        LastName='Plumber',
        Nickname='Tim-tim',
        Phone='123456789',
        ClientId='12-34-56789'
    )

    print(user)
    print(user.status)  
```

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "damoov-admin",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "damoov sdk telematics mobiletelematics safety driving safe-driving fleetmanagement fleet-management fleet driving-behavior driving-behaviour driving-behavior-analysis driving-behaviour-analysis driving-behavior-monitoring driving-behaviour-monitoring driving-behavior-score driving-behaviour-score driving-behavior-scoring driving-behaviour-scoring driving-behavior-analysis driving-behaviour-analysis driving-behavior-monitoring driving-behaviour-monitoring driving-behavior-score driving-behaviour-score driving-behavior-scoring driving-behaviour-scoring driving-behavior-analysis driving-behaviour-analysis driving-behavior-monitoring driving-behaviour-monitoring driving-behavior-score driving-behaviour-score driving-behavior-scoring driving-behaviour-scoring driving-behavior-analysis driving-behaviour-analysis driving-behavior-monitoring driving-behaviour-monitoring driving-behavior-score driving-behaviour-score driving-behavior-scoring driving-behaviour-scoring",
    "author": "Damoov",
    "author_email": "admin@damoov.com",
    "download_url": "https://files.pythonhosted.org/packages/0e/3b/44e64128632d485e534b4fd6fa95522fb99f71c3b9f22e10b8b65eb2fbf9/damoov_admin-0.9.1.tar.gz",
    "platform": null,
    "description": "\n# Damoov-Admin Python SDK for Telematics API and Services\n\n![Damoov Logo](https://www.damoov.com/wp-content/uploads/2022/07/Damoov_logo_BIMI.svg)\n\n**Damoov** is a leading telematics platform leveraging smartphone capabilities to capture and analyze driving behaviors. Our Python SDK is designed to enable developers to easily integrate and harness the power of Damoov's robust telematics data.\n\n**Changelog** \nversion 0.9.1 Release date December 28, 2023\n* New method: get_user_details\n* General improvements\n\nversion 0.9.0 Release date December 14, 2023\n* Auth improvements.\n* Iterable objects\n\nversion 0.8.0 Release date November 27, 2023\n* New module available: accounts. the module includes methods to manage applications and instances\n\n\nversion 0.7.7 Release date 13/11/2023:\n* New module available: engagement. the module includes leaderboards: general leaderboard and user leaderboard\n* Authentication improvements: now, the SDK supports multiple credentials simultaneously.\n* Response improvements: default response for empty or no data users.\n\n\nversion 0.7.6 Release date 01/11/2023:\n* bug fix\n\nversion 0.7.5 Release date 25/10/2023:\n* bug fix\n\n\nversion 0.7.4 Release date 20/10/2023:\n\nSecurity Enhancements:\nJWT Token Storage:\n* Improved Security: Moved JWT token storage from a local file to secure place, providing an added layer of security.\n* Robust Token Handling: Enhanced the methods for saving and loading tokens.\n\nOther Updates:\n* Error Handling: Improved HTTP error handling across all API calls, ensuring smoother recovery and clear notifications on issues.\n* Code Optimization: Refactored and optimized various parts of the codebase for clarity and performance.\n\n---\n\n## Installation\n\nInstall the SDK using pip:\n\n```bash\npip install damoov-admin\n```\n\n## Features\n\n- **Authentication:** Seamlessly authenticate and manage sessions.\n- **Telematics Data Retrieval:** Fetch driving statistics, safety patterns, performance metrics, and more.\n- **Error Handling:** Handle errors effectively with descriptive messages.\n- **Utility Functions:** Set of helper functions for date and time management.\n\n## Quick Start\n\n[Full Documentation](https://docs.damoov.com/docs/python-sdk)\n\n1. **Authentication:**\n\n   ```python\n    from damoov_admin import statistics, trips, users\n    email = \"\" \n    password = ''\n\n    #Generate your admin credential in Datahub (https://docs.damoov.com/docs/datahub)\n\n    data = <module>.DamoovAuth(email=email, password=password)\n   ```\n\n## Documentation\n\nDetailed documentation is available at [Developer Portal](https://docs.damoov.com/docs/python-sdk).\n\n## Feedback and Support\n\nIf you have any feedback or need support, please contact us at [hellp@damoov.com](mailto:hello@damoov.com).\n\n## License\n\nThis SDK is distributed under the [MIT License](https://docs.damoov.com/docs/license).\n=======\n# python-admin-sdk\nDamoov's Python SDK enables seamless integration with our leading telematics platform. Harness the power of smartphones to capture and analyze driving behaviors. This repo provides tools to easily tap into driving insights, safety metrics, and performance data. Drive smarter with Damoov.\n\n\n# Modules\n## Statistics\n*** \nThe `Statistics` module provides a comprehensive suite of functionalities to gather various statistics data, ranging from daily user scores to unique tags. Below is a breakdown of its methods and their usage:\n\n## 1. Get started\n\nIf you haven't already, install the Damoov-Admin SDK for Python.\n\n```curl\npip install damoov-admin\n```\n\nBegin by importing the Statistics module and finalizing the authentication process.\n\n```python\nfrom damoov_admin import statistics\nemail=\"your_admin_creds@auth.me\"\npassword=\"YOUR PASSWORD\"\n\nstats = statistics.DamoovAuth(email=email, password=password)\n\n```\n\n## 2. Methods\n\n#### Syntaxes:\n\n- `user_id`: ID of the user, also known as a DeviceToken\n- `start_date`: Start date in format `YYYY-MM-DDTHH:MM:SS`\n- `end_date`: End date in format `YYYY-MM-DDTHH:MM:SS`\n- `tag` : ['Tag1', '...', 'TagX']\n\n***\n\n### `user_daily_statistics`\n\nObtain daily statistics of a user.\n\n**Parameters**:\n\n- `user_id`: ID of the user\n- `start_date`: Start date in format `YYYY-MM-DDTHH:MM:SS`\n- `end_date`: End date in format `YYYY-MM-DDTHH:MM:SS`\n- `tag` (optional): Tag to filter\n\n**Example**:\n\nRequest:\n\n```python\nuser_statistics=stats.user_daily_statistics(\n        user_id='2948a036-36f8-4f76-babd-0635874aa3er',\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n  \t\t\ttag=['Business', 'Personal']\n        )\n```\n\nResponse: \n\n```json\n{\"Result\": [\n{\n            \"UserId\": \"2948a036-36f8-4f76-babd-0635874aa3er\",\n            \"InstanceId\": \"\",\n            \"AppId\": \"\",\n            \"CompanyId\": \"\",\n            \"ReportDate\": \"2023-09-02T00:00:00\",\n            \"MileageKm\": 200.7945138572461,\n            \"MileageMile\": 124.77371091089272,\n            \"TripsCount\": 8,\n            \"DriverTripsCount\": 8,\n            \"OtherTripsCount\": 0,\n            \"MaxSpeedKmh\": 122.29244232177734,\n            \"MaxSpeedMileh\": 75.99252365875243,\n            \"AverageSpeedKmh\": 54.68438828527036,\n            \"AverageSpeedMileh\": 33.980878880466996,\n            \"TotalSpeedingKm\": 12.483415754279346,\n            \"TotalSpeedingMile\": 7.757194549709185,\n            \"AccelerationsCount\": 4,\n            \"BrakingsCount\": 5,\n            \"CorneringsCount\": 4,\n            \"PhoneUsageDurationMin\": 3.5368999999999997,\n            \"PhoneUsageMileageKm\": 2.2573077536862733,\n            \"PhoneUsageMileageMile\": 1.40269103814065,\n            \"PhoneUsageSpeedingDurationMin\": 0.0,\n            \"PhoneUsageSpeedingMileageKm\": 0.0,\n            \"PhoneUsageSpeedingMileageMile\": 0.0,\n            \"DrivingTime\": 186.96666666666667,\n            \"NightDrivingTime\": 0.0,\n            \"DayDrivingTime\": 45.993165254592896,\n            \"RushHoursDrivingTime\": 140.0721311569214,\n            \"PermissionsLevel\": 92,\n            \"TrustLevel\": 92.0\n        },\n  ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `user_daily_ecoscore`\n\nRetrieve a user's daily ecoscore.\n\n**Parameters**:\n\n- `user_id`: ID of the user\n- `start_date`: Start date\n- `end_date`: End date\n\n**Example**:\n\nRequest:\n\n```python\nuser_statistics=stats.user_daily_ecoscore(\n        user_id='2948a036-36f8-4f76-babd-0635874aa3er',\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        )\n```\n\nResponse: \n\n```json\n\"Result\": [\n         {\n            \"UserId\": \"2948a036-36f8-4f76-babd-0635874aa3er\",\n            \"InstanceId\": \"\",\n            \"AppId\": \"\",\n            \"CompanyId\": \"\",\n            \"CalcDate\": \"2023-10-02T00:00:00\",\n            \"EcoScoreFuel\": 97.80603418529739,\n            \"EcoScoreTyres\": 100.0,\n            \"EcoScoreBrakes\": 71.24604879817583,\n            \"EcoScoreDepreciation\": 30.066967347066047,\n            \"EcoScore\": 75.74524464826901,\n            \"PermissionsLevel\": 100,\n            \"TrustLevel\": 100.0\n        }\n    ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `user_daily_safetyscore`\n\nGet a user's daily safety score.\n\n**Parameters**:\n\n- `user_id`: ID of the user\n- `start_date`: Start date\n- `end_date`: End date\n- `tag` (optional): Tag to filter\n\n**Example**:\n\nRequest:\n\n```python\n    user_statistics=stats.user_daily_safetyscore(\n        user_id='2948a036-36f8-4f76-babd-0635874aa3er',\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        )\n```\n\nResponse:\n\n```json\n\"Result\": [     \n  {\n            \"UserId\": \"2948a036-36f8-4f76-babd-0635874aa3er\",\n            \"InstanceId\": \"\",\n            \"AppId\": \"\",\n            \"CompanyId\": \"\",\n            \"AccelerationScore\": 78.0,\n            \"BrakingScore\": 80.0,\n            \"SpeedingScore\": 72.0,\n            \"PhoneUsageScore\": 86.0,\n            \"CorneringScore\": 79.0,\n            \"SafetyScore\": 90.0,\n            \"CalcDate\": \"2023-10-02T00:00:00\",\n            \"PermissionsLevel\": 100,\n            \"TrustLevel\": 100.0\n        }\n    ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `user_accumulated_statistics`\n\nFetch accumulated statistics for a user.\n\n**Parameters**:\n\n- `user_id`: ID of the user\n- `start_date`: Start date\n- `end_date`: End date\n- `tag` (optional): Tag to filter\n\n**Example**:\n\nRequest:\n\n```python\n    user_statistics=stats.user_accumulated_statistics(\n        user_id='2948a036-36f8-4f76-babd-0635874aa3er',\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        )\n```\n\nResponse:\n\n```json\n    \"Result\": [\n        {\n            \"UserId\": \"2948a036-36f8-4f76-babd-0635874aa3er\",\n            \"InstanceId\": \"\",\n            \"AppId\": \"\",\n            \"CompanyId\": \"\",\n            \"MileageKm\": 2111.0221881212033,\n            \"MileageMile\": 1311.789187698516,\n            \"TripsCount\": 153,\n            \"DriverTripsCount\": 153,\n            \"OtherTripsCount\": 0,\n            \"MaxSpeedKmh\": 122.29244232177734,\n            \"MaxSpeedMileh\": 75.99252365875243,\n            \"AverageSpeedKmh\": 43.86747108399977,\n            \"AverageSpeedMileh\": 27.25924653159745,\n            \"TotalSpeedingKm\": 144.23474761841058,\n            \"TotalSpeedingMile\": 89.6274721700803,\n            \"AccelerationsCount\": 94,\n            \"BrakingsCount\": 78,\n            \"CorneringsCount\": 45,\n            \"PhoneUsageDurationMin\": 20.447583333333334,\n            \"PhoneUsageMileageKm\": 17.025709577441788,\n            \"PhoneUsageMileageMile\": 10.579775931422326,\n            \"PhoneUsageSpeedingDurationMin\": 0.2427833333333333,\n            \"PhoneUsageSpeedingMileageKm\": 0.32201192397028167,\n            \"PhoneUsageSpeedingMileageMile\": 0.20009820955513297,\n            \"DrivingTime\": 3301.6166666666663,\n            \"NightDrivingTime\": 0.0,\n            \"DayDrivingTime\": 1807.0491929650307,\n            \"RushHoursDrivingTime\": 1490.29370367527,\n            \"PermissionsLevel\": 93,\n            \"TrustLevel\": 93.0\n        }\n    ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `user_accumulated_ecoscore`\n\nAcquire a user's accumulated ecoscore over a range.\n\n**Parameters**:\n\n- `user_id`: ID of the user\n- `start_date`: Start date\n- `end_date`: End date\n\n**Example**:\n\nRequest:\n\n```python\n    user_statistics.user_accumulated_ecoscore(\n        user_id='2948a036-36f8-4f46-babd-0635870aa7ed',\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00'\n        )\n```\n\nResponse:\n\n```json\n\"Result\": [\n        {\n            \"UserId\": \"2948a036-36f8-4f76-babd-0635874aa3er\",\n            \"InstanceId\": \"\",\n            \"AppId\": \"\",\n            \"CompanyId\": \"\",\n            \"EcoScoreFuel\": 97.21532847773788,\n            \"EcoScoreTyres\": 100.0,\n            \"EcoScoreBrakes\": 83.25091485161596,\n            \"EcoScoreDepreciation\": 26.5303907938692,\n            \"EcoScore\": 75.00759345586548,\n            \"PermissionsLevel\": 93,\n            \"TrustLevel\": 93.0\n        }\n      ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `user_accumulated_safetyscore`\n\nObtain a user's accumulated safety score.\n\n**Parameters**:\n\n- `user_id`: ID of the user\n- `start_date`: Start date\n- `end_date`: End date\n- `tag` (optional): Tag to filter\n\n**Example**:\n\nRequest:\n\n```python\n    user_statistics=stats.user_accumulated_safetyscore(\n        user_id='2948a036-36f8-4f76-babd-0635874aa3er',\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        tag='')\n```\n\nResponse:\n\n```json\n\"Result\": [\n        {\n            \"UserId\": \"2948a036-36f8-4f76-babd-0635874aa3er\",\n            \"InstanceId\": \"\",\n            \"AppId\": \"\",\n            \"CompanyId\": \"\",\n            \"AccelerationScore\": 77.625,\n            \"BrakingScore\": 81.96875,\n            \"SpeedingScore\": 70.125,\n            \"PhoneUsageScore\": 86.46875,\n            \"CorneringScore\": 85.71875,\n            \"SafetyScore\": 89.53125,\n            \"PermissionsLevel\": 93,\n            \"TrustLevel\": 93.0\n        }\n    ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n```\n\n***\n\n### `entity_accumulated_ecoscore`\n\nRetrieve the accumulated ecoscore for an entity.\n\n**Parameters**:\n\n- `start_date`: Start date\n- `end_date`: End date\n- `tag` (optional): Tag to filter\n- One of the following must be provided: \n  - `instance_id`: Instance ID \n  - `app_id`: Application ID \n  - `company_id`: Company ID\n\n**Example**:\n\nRequest:\n\n```python\n    instance_statistics=stats.entity_accumulated_ecoscore(\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        instance_id=\"your_instance_id\",\n\n    )\n```\n\nResponse:\n\n```json\n    \"Result\": {\n        \"UserId\": null,\n        \"InstanceId\": \"your_instance_id\",\n        \"AppId\": null,\n        \"CompanyId\": null,\n        \"EcoScoreFuel\": 97.52329737487166,\n        \"EcoScoreTyres\": 100.0,\n        \"EcoScoreBrakes\": 75.59935000534821,\n        \"EcoScoreDepreciation\": 44.719564784133794,\n        \"EcoScore\": 80.30344045080935,\n        \"PermissionsLevel\": 94,\n        \"TrustLevel\": 94.0\n    },\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n```\n\n***\n\n### `entity_daily_statistics`\n\nFetch daily statistics for an entity.\n\n**Parameters**:\n\n- `start_date`: Start date\n- `end_date`: End date\n- `tag` (optional): Tag to filter\n- One of the following must be provided:\n  - `instance_id`: Instance ID \n  - `app_id`: Application ID \n  - `company_id`: Company ID\n\n**Example**:\n\nRequest:\n\n```python\ncompany_d_statistics=stats.entity_daily_statistics(\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        company_id='your_company_id'\n    )\n```\n\nResponse:\n\n```json\n\"Result\": [\n        {\n            \"InstanceId\": null,\n            \"AppId\": null,\n            \"CompanyId\": \"your_company_id\",\n            \"ReportDate\": \"2023-09-18T00:00:00\",\n            \"RegisteredUsers\": 12,\n            \"ActiveUsers\": 282,\n            \"MileageKm\": 25382.13108184097,\n            \"MileageMile\": 15772.456254255985,\n            \"TripsCount\": 1789,\n            \"DriverTripsCount\": 1786,\n            \"OtherTripsCount\": 3,\n            \"MaxSpeedKmh\": 146.1915283203125,\n            \"MaxSpeedMileh\": 90.84341569824218,\n            \"AverageSpeedKmh\": 36.002057830035696,\n            \"AverageSpeedMileh\": 22.371678735584183,\n            \"TotalSpeedingKm\": 560.9847620514762,\n            \"TotalSpeedingMile\": 348.595931138787,\n            \"AccelerationsCount\": 1139,\n            \"BrakingsCount\": 1326,\n            \"CorneringsCount\": 1474,\n            \"PhoneUsageDurationMin\": 3800.4465833333334,\n            \"PhoneUsageMileageKm\": 2284.020002380001,\n            \"PhoneUsageMileageMile\": 1419.290029478932,\n            \"PhoneUsageSpeedingDurationMin\": 12.098366666666667,\n            \"PhoneUsageSpeedingMileageKm\": 10.980101468687467,\n            \"PhoneUsageSpeedingMileageMile\": 6.823035052642389,\n            \"DrivingTime\": 35077.866666666676,\n            \"NightDrivingTime\": 1351.4007195532322,\n            \"DayDrivingTime\": 21381.867682458833,\n            \"RushHoursDrivingTime\": 12418.06661722064,\n            \"PermissionsLevel\": 95,\n            \"TrustLevel\": 95.0\n        },\n  ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `entity_safety_score`\n\nObtain safety score for an entity.\n\n**Parameters**:\n\n- `start_date`: Start date\n- `end_date`: End date\n- `tag` (optional): Tag to filter\n- One of the following must be provided:\n  - `instance_id`: Instance ID \n  - `app_id`: Application ID \n  - `company_id`: Company ID\n\n**Example**:\n\nRequest:\n\n```python\ninstance_statistics=stats.entity_daily_safetyscore(\n        start_date='2023-09-20T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        app_id=\"your_app_id\",\n    )\n```\n\nResponse:\n\n```json\n\"Result\": [\n\t\t\t{\n            \"InstanceId\": null,\n            \"AppId\": \"your_app_id\",\n            \"CompanyId\": null,\n            \"ReportDate\": \"2023-10-02T00:00:00\",\n            \"AccelerationScore\": 76.99007444168734,\n            \"BrakingScore\": 76.41935483870968,\n            \"SpeedingScore\": 90.21339950372209,\n            \"PhoneUsageScore\": 74.04466501240695,\n            \"CorneringScore\": 74.01488833746899,\n            \"SafetyScore\": 83.22332506203475,\n            \"PermissionsLevel\": 95,\n            \"TrustLevel\": 95.0\n        }\n    ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `entity_accumulated_statistics`\n\nGet accumulated statistics for an entity.\n\n**Parameters**:\n\n- `start_date`: Start date\n- `end_date`: End date\n- `tag` (optional): Tag to filter\n- One of the following must be provided:\n  - `instance_id`: Instance ID \n  - `app_id`: Application ID \n  - `company_id`: Company ID\n\n**Example**:\n\nRequest:\n\n```python\n    company_statistics=stats.entity_accumulated_statistics(\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        company_id='your_company_id'\n    )\n```\n\nResponse\n\n```json\n{\n    \"Result\": {\n        \"InstanceId\": null,\n        \"AppId\": null,\n        \"CompanyId\": \"your_company_id\",\n        \"TotalRegisteredUsers\": 299,\n        \"ActiveUsers\": 491,\n        \"MileageKm\": 765112.3461886081,\n        \"MileageMile\": 475440.8119216011,\n        \"TripsCount\": 47429,\n        \"DriverTripsCount\": 47200,\n        \"OtherTripsCount\": 229,\n        \"MaxSpeedKmh\": 235.80712890625,\n        \"MaxSpeedMileh\": 146.53054990234375,\n        \"AverageSpeedKmh\": 37.49730203560512,\n        \"AverageSpeedMileh\": 23.300823484925015,\n        \"TotalSpeedingKm\": 18645.076059143215,\n        \"TotalSpeedingMile\": 11586.050263151588,\n        \"AccelerationsCount\": 31278,\n        \"BrakingsCount\": 39863,\n        \"CorneringsCount\": 40161,\n        \"PhoneUsageDurationMin\": 117555.1976166667,\n        \"PhoneUsageMileageKm\": 67128.67055363058,\n        \"PhoneUsageMileageMile\": 41713.75588202606,\n        \"PhoneUsageSpeedingDurationMin\": 347.51840000000016,\n        \"PhoneUsageSpeedingMileageKm\": 357.2293322990894,\n        \"PhoneUsageSpeedingMileageMile\": 221.98230709065405,\n        \"DrivingTime\": 1014552.5333333339,\n        \"NightDrivingTime\": 43901.92194293812,\n        \"DayDrivingTime\": 636574.804801112,\n        \"RushHoursDrivingTime\": 341089.71085665515,\n        \"PermissionsLevel\": 95,\n        \"TrustLevel\": 95.0\n    },\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `entity_daily_safetyscore`\n\nFetch daily safety score for an entity.\n\n**Parameters**:\n\n- `start_date`: Start date\n- `end_date`: End date\n- `tag` (optional): Tag to filter\n- One of the following must be provided:\n  - `instance_id`: Instance ID \n  - `app_id`: Application ID \n  - `company_id`: Company ID\n\n**Example**:\n\nRequest:\n\n```python\n    app_statistics=stats.entity_daily_safetyscore(\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        app_id=\"your_app_id\", \n    )\n```\n\nResponse:\n\n```json\n\"Result\": [\n{\n            \"InstanceId\": null,\n            \"AppId\": \"your_app_id\",\n            \"CompanyId\": null,\n            \"ReportDate\": \"2023-10-02T00:00:00\",\n            \"AccelerationScore\": 76.99007444168734,\n            \"BrakingScore\": 76.41935483870968,\n            \"SpeedingScore\": 90.21339950372209,\n            \"PhoneUsageScore\": 74.04466501240695,\n            \"CorneringScore\": 74.01488833746899,\n            \"SafetyScore\": 83.22332506203475,\n            \"PermissionsLevel\": 95,\n            \"TrustLevel\": 95.0\n        },\n    ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `lastupdates`\n\nGet the last updates for a user.\n\n**Parameters**:\n\n- `user_id`: ID of the user\n\n**Example**:\n\nRequest:\n\n```python\n    metadata=stats.lastupdates(\n        user_id='2948a036-36f8-4f46-babd-0635870aa7ed'\n        )\n```\n\nResponse:\n\n```json\n{\n    \"Result\": [\n        {\n            \"UserId\": \"your_user_id\",\n            \"InstanceId\": \"your_instance_id\",\n            \"AppId\": \"your_app_id\",\n            \"CompanyId\": \"your_company_id\",\n            \"LatestTripDate\": \"2023-10-11T14:33:40+01:00\",\n            \"LatestScoringDate\": \"2023-10-11T00:00:00\"\n        }\n    ],\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `uniquetags`\n\nObtain unique tags for a user within a specific range.\n\n**Parameters**:\n\n- `user_id`: ID of the user\n- `start_date`: Start date\n- `end_date`: End date\n\n**Example**:\n\nRequest:\n\n```python\n   metadata=stats.uniquetags(\n        user_id='2948a036-36f8-4f46-babd-0635870aa7ed',\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',                                 \n    )\n```\n\nResponse:\n\n```json\n{\n    \"Result\": {\n        \"UniqueTagsCount\": 2,\n        \"UniqueTagsList\": [\n            \"your_tag_1\",\n            \"your_tag_x\"\n        ]\n    },\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n## 4. Note\n\n- In all methods, if there's a `HTTPError`, the error will be printed, and the response will be handled accordingly.\n- For daily statistics, scores, and list of trips, the methods automatically modify the requested period to 14 days if the original request spans a period longer than that.\n\n## 5. Response\n\nThe `Statistics Response` processes and provides easy access to specific parts of the data returned by the `Statistics` module. Here's a detailed breakdown of its properties and methods:\n\n### `result`\n\nProvides the 'Result' from the response. If the result is a list with a single item, it returns that item. Otherwise, it returns the full list or results.\n\n**Return Type**: `dict` or `list`\n\n***\n\n### `status`\n\nReturns the 'Status' from the response.\n\n**Return Type**: `dict`\n\n***\n\n### `title`\n\nReturns the 'Title' of the response.\n\n**Return Type**: `str`\n\n***\n\n### `errors`\n\nFetches any 'Errors' from the response.\n\n**Return Type**: `list`\n\n***\n\n### `latest_trip_date`\n\nProvides the 'LatestTripDate' from the result.\n\n**Return Type**: Depends on data (e.g., `str`, `None`)\n\n***\n\n### `latest_scoring_date`\n\nRetrieves the 'LatestScoringDate' from the result.\n\n**Return Type**: Depends on data (e.g., `str`, `None`)\n\n***\n\n### `tags_count`\n\nGives the 'UniqueTagsCount' from the result.\n\n**Return Type**: Depends on data (e.g., `int`, `None`)\n\n***\n\n### `tags_list`\n\nFetches the 'UniqueTagsList' from the result.\n\n**Return Type**: Depends on data (e.g., `list`, `None`)\n\n## 5. Usage\n\nAfter you fetch data using methods from the `Statistics` module, you can pass the returned data to `StatisticsResponse` to further process and easily access specific parts of the response.\n\n```python\n# Import and initial initialization\n\nfrom damoov_admin import statistics\nemail=\"your_admin_creds@auth.me\"\npassword=\"YOUR PASSWORD\"\n\nstats = statistics.DamoovAuth(email=email, password=password)\n\n# Methods to fetch user statistics and scores\napp_statistics=stats.entity_daily_safetyscore(\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',\n        app_id=\"your_app_id\", \n    )\n  print(app_statistics)\n  print(app_statistics.status)\n  print(app_statistics.result)\n  \n  \n  metadata=stats.uniquetags(\n        user_id='2948a036-36f8-4f46-babd-0635870aa7ed',\n        start_date='2023-09-01T00:00:00',\n        end_date='2023-10-02T00:00:00',                                 \n    )\n  print(metadata.tags_list)\n  print(metadata.tags_count)\n  \n  \n  metadata=stats.lastupdates(\n        user_id='2948a036-36f8-4f46-babd-0635870aa7ed'\n        )\n  print(metadata.latest_trip_date)\n  print(metadata.latest_scoring_date)\n```\n\n## Trips\n***\nThe `Trips` module offers a robust set of functionalities designed for efficient trip data management. This encompasses a range of operations from fetching trip details, updating trip\n\n## 1. Get started\n\nIf you haven't already, install the Damoov-Admin SDK for Python.\n\n```curl\npip install damoov-admin\n```\n\nBegin by importing the User management module and finalizing the authentication process.\n\n```python\nfrom damoov_admin import trips\nemail=\"your_admin_creds@auth.me\"\npassword=\"YOUR PASSWORD\"\n\ntrips_mngt = trips.DamoovAuth(email=email, password=password)\n\n```\n\n## 2. Methods\n\nThe `Trips` module offers a robust set of functionalities tailored for managing and fetching trip-related data. Here's a comprehensive breakdown of its methods and their usage:\n\n#### Syntaxes:\n\n- `sort_by`: Sort parameter (e.g., \"StartDateUtc, StartDateUtc_Desc\").\n- `unit_system`: Measurement unit system (e.g., \"Si\" or \"Imperial\")\n- `user_id`:  ID of the user/ DeviceToken whose trips are to be fetched.\n- `start_date`, `end_date`: Date range for the trip in format `YYYY-MM-DDTHH:MM:SS`\n- `start_date_timestamp_sec`, `end_date_timestamp_sec`: Alternative date range using timestamps.\n- `include_details`: Include detailed trip data, like start, end address, transportation type, and tags\n- `include_statistics`: Include statistics related to the trip.\n- `include_scores`: Include scores associated with the trip.\n- `include_waypoints`: Include per-second GPS waypoints of the trip.\n- `include_events`: Include events or incidents associated with the trip.\n- `include_related`: Include related trip data, including URI for future get requests.\n- `tags_included`: Tags to be included in the filtering.\n- `tags_excluded`: Tags to be excluded in the filtering.\n- `limit`: Limit the number of trips returned.\n\n***\n\n### `get_list_trips`\n\nFetches the list of trips for a specific user, with various optional filters to refine the result set.\n\n- **Parameters**:\n  - `user_id`: **Required**\n  - `start_date`, `end_date`: **Required.** \n  - `start_date_timestamp_sec`, `end_date_timestamp_sec`\n  - `include_details`\n  - `include_statistics`\n  - `include_scores`\n  - `include_related`\n  - `tags_included`\n  - `tags_excluded`:\n  - `unit_system`\n  - `sort_by`\n  - `limit`\n\n**Example**: \n\nRequest\n\n```python\n    user_trip_details=trip.get_list_trips(\n    user_id='user_id',\n    # start_date='2023-09-09', \n    # end_date='2023-10-10', \n    start_date_timestamp_sec=1696704060, \n    end_date_timestamp_sec=1696713840,\n    sort_by='StartDateUtc',\n    include_details=False, \n    include_statistics=False, \n    include_scores=False, \n    include_related=True, \n    tags_included=None, \n    tags_excluded=None,  \n    locale=\"EN\", \n    unit_system=\"Imperial\",\n    # limit=3\n    )\n```\n\nResponse\n\n```json\n{\n    \"Result\": {\n        \"Trips\": [\n            {\n                \"Id\": \"trip_id\",\n                \"DateUpdated\": \"2022-09-10T12:29:25+00:00\",\n                \"Identifiers\": {\n                    \"CompanyId\": \"company_id\",\n                    \"ApplicationId\": \"application_id\",\n                    \"InstanceId\": \"instance_id\",\n                    \"UserId\": \"user_id\"\n                },\n                \"Data\": {\n                    \"StartDate\": \"2022-09-10T12:20:25+00:00\",\n                    \"EndDate\": \"2022-09-10T12:29:25+00:00\",\n                    \"UnitSystem\": \"Imperial\",\n                    \"Addresses\": {\n                        \"Start\": {\n                            \"Full\": \"102 Beach St, San Francisco, CA 94133-1101, United States\",\n                            \"Parts\": {\n                                \"CountryCode\": \"USA\",\n                                \"Country\": \"United States\",\n                                \"County\": \"San Francisco\",\n                                \"State\": \"California\",\n                                \"City\": \"San Francisco\",\n                                \"District\": \"Fisherman's Wharf\",\n                                \"Street\": \"Beach St\",\n                                \"House\": \"102\"\n                            }\n                        },\n                        \"End\": {\n                            \"Full\": \"E Beach, San Francisco, CA 94129, United States\",\n                            \"Parts\": {\n                                \"CountryCode\": \"USA\",\n                                \"Country\": \"United States\",\n                                \"County\": \"San Francisco\",\n                                \"State\": \"California\",\n                                \"City\": \"San Francisco\",\n                                \"District\": \"Presidio\",\n                                \"Street\": \"E Beach\"\n                            }\n                        }\n                    },\n                    \"TransportType\": {\n                        \"Current\": \"OriginalDriver\",\n                        \"ConfirmNeeded\": false\n                    },\n                    \"Tags\": []\n                },\n                \"Statistics\": {\n                    \"Mileage\": 4.143953744168464,\n                    \"DurationMinutes\": 17.183333333333334,\n                    \"AccelerationsCount\": 0.0,\n                    \"BrakingsCount\": 0.0,\n                    \"CorneringsCount\": 1.0,\n                    \"TotalSpeedingMileage\": 0.0,\n                    \"MidSpeedingMileage\": 0.0,\n                    \"HighSpeedingMileage\": 0.0,\n                    \"PhoneUsageDurationMinutes\": 11.989366666666665,\n                    \"PhoneUsageMileage\": 3.5955679069262994,\n                    \"PhoneUsageWithSpeedingDurationMinutes\": 0.0,\n                    \"PhoneUsageWithSpeedingMileage\": 0.0,\n                    \"DayHours\": 17.233333587646484,\n                    \"RushHours\": 0.0,\n                    \"NightHours\": 0.0,\n                    \"AverageSpeed\": 11.416121791501084,\n                    \"MaxSpeed\": 19.790273235742262\n                },\n                \"Scores\": {\n                    \"Safety\": 97.0,\n                    \"Acceleration\": 100.0,\n                    \"Braking\": 100.0,\n                    \"Cornering\": 56.0,\n                    \"Speeding\": 100.0,\n                    \"PhoneUsage\": 40.0,\n                    \"Eco\": 77.0,\n                    \"EcoBrakes\": 100.0,\n                    \"EcoDepreciation\": 25.0,\n                    \"EcoFuel\": 100.0,\n                    \"EcoTyres\": 100.0\n                },\n                \"Related\": [\n                    {\n                        \"Type\": \"Waypoints\",\n                        \"Uri\": \"https://api.telematicssdk.com/trips/get/admin/v1/trip_id/waypoints\"\n                    },\n                    {\n                        \"Type\": \"Trip\",\n                        \"Uri\": \"https://api.telematicssdk.com/trips/get/v1/trip_id\"\n                    }\n                ]\n            }\n        ]\n    },\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n***\n\n### `get_trip_details`\n\nRetrieves waypoint details of a specific trip by its unique ID.\n\n- **Parameters**:\n  - `trip_id`: (Required)\n  - `user_id`: (Required)\n  - `include_details`: Include detailed trip data.\n  - `include_statistics`: Include statistics related to the trip.\n  - `include_scores`: Include scores associated with the trip.\n  - `include_waypoints`: Include waypoints of the trip.\n  - `include_events`: Include events associated with the trip.\n  - `include_related`: Include related trip data.\n  - `locale`: Locale settings (e.g., \"EN\").\n  - `unit_system`: Measurement unit system (e.g., \"Si\" or \"Imperial\").\n\n**Example**:\n\nRequest\n\n```python\n    trip_details = trip.get_trip_details(\n    trip_id=\"trip_id\",\n    user_id=\"user_id\",\n    include_details=True, \n    include_statistics=True, \n    include_scores=True, \n    include_waypoints=True,\n    include_events=True, \n    include_related=True, \n    locale=\"EN\", \n    unit_system=\"Imperial\"\n    )\n```\n\nResponse\n\n```json\n{\n    \"Result\": {\n        \"Trip\": {\n            \"Id\": \"trip_id\",\n            \"DateUpdated\": \"2023-10-11T07:34:31+00:00\",\n            \"Identifiers\": {\n                \"CompanyId\": \"company_id\",\n                \"ApplicationId\": \"application_id\",\n                \"InstanceId\": \"instance_id\",\n                \"UserId\": \"user_id\"\n            },\n            \"Data\": {\n                \"StartDate\": \"2023-10-09T08:19:23+01:00\",\n                \"StartDateUnixMilliseconds\": 1696835963000,\n                \"EndDate\": \"2023-10-09T08:36:44+01:00\",\n                \"EndDateUnixMilliseconds\": 1696837004000,\n                \"UnitSystem\": \"Imperial\",\n                \"Addresses\": {\n                    \"Start\": {\n                        \"Full\": \"Avenida Marechal Gomes da Costa 17, 1800-253 Lisbon, Portugal\",\n                        \"Parts\": {\n                            \"CountryCode\": \"PRT\",\n                            \"Country\": \"Portugal\",\n                            \"County\": \"Lisbon\",\n                            \"City\": \"Lisbon\",\n                            \"District\": \"Lisbon\",\n                            \"Street\": \"Avenida Marechal Gomes da Costa\",\n                            \"House\": \"17\"\n                        }\n                    },\n                    \"End\": {\n                        \"Full\": \"Rua do Arco do Cego 177, 1000-020 Lisbon, Portugal\",\n                        \"Parts\": {\n                            \"CountryCode\": \"PRT\",\n                            \"Country\": \"Portugal\",\n                            \"County\": \"Lisbon\",\n                            \"City\": \"Lisbon\",\n                            \"District\": \"Lisbon\",\n                            \"Street\": \"Rua do Arco do Cego\",\n                            \"House\": \"177\"\n                        }\n                    }\n                },\n                \"TransportType\": {\n                    \"Current\": \"OriginalDriver\",\n                    \"ConfirmNeeded\": true\n                },\n                \"Tags\": []\n            },\n            \"Statistics\": {\n                \"Mileage\": 3.111590678261461,\n                \"DurationMinutes\": 17.35,\n                \"AccelerationsCount\": 1.0,\n                \"BrakingsCount\": 0.0,\n                \"CorneringsCount\": 0.0,\n                \"TotalSpeedingMileage\": 0.021650736620396006,\n                \"MidSpeedingMileage\": 0.06389130188092126,\n                \"HighSpeedingMileage\": 0.0,\n                \"PhoneUsageDurationMinutes\": 0.0,\n                \"PhoneUsageMileage\": 0.0,\n                \"PhoneUsageWithSpeedingDurationMinutes\": 0.0,\n                \"PhoneUsageWithSpeedingMileage\": 0.0,\n                \"DayHours\": 0.0,\n                \"RushHours\": 17.270366668701172,\n                \"NightHours\": 0.0,\n                \"AverageSpeed\": 20.500146429454027,\n                \"MaxSpeed\": 47.186389247420195\n            },\n            \"Scores\": {\n                \"Safety\": 79.0,\n                \"Acceleration\": 53.0,\n                \"Braking\": 100.0,\n                \"Cornering\": 100.0,\n                \"Speeding\": 48.0,\n                \"PhoneUsage\": 100.0,\n                \"Eco\": 91.0,\n                \"EcoBrakes\": 100.0,\n                \"EcoDepreciation\": 75.0,\n                \"EcoFuel\": 98.94907,\n                \"EcoTyres\": 100.0\n            },\n              \"Waypoints\": [\n                {\n                    \"Index\": 0,\n                    \"SecSinceStart\": 0,\n                    \"PointDateUnixMilliseconds\": 0,\n                    \"Lat\": 0,\n                    \"Long\": 0,\n                    \"Speed\": 0,\n                    \"SpeedLimit\": 0,\n                    \"Speeding\":status ,\n                    \"PhoneUsage\": true\n                }\n              ],\n            \"Events\": [\n                {\n                    \"Id\": \"\",\n                    \"Type\": \"Acceleration\",\n                    \"Date\": \"2023-10-09T08:22:10+01:00\",\n                    \"Lat\": 38.74998,\n                    \"Long\": -9.10616,\n                    \"Value\": 3.353325366973877\n                }\n            ],\n            \"Related\": [\n                {\n                    \"Type\": \"Waypoints\",\n                    \"Uri\": \"https://api.telematicssdk.com/trips/get/admin/v1/300665e1-e415-46ab-892f-1cd25afd650d/waypoints\"\n                }\n            ]\n        }\n    },\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n## 3. Note\n\n- In all methods, if there's a `HTTPError`, the error will be printed, and the response will be handled accordingly.\n- For daily statistics, scores, and list of trips, the methods automatically modify the requested period to 14 days if the original request spans a period longer than that.\n\n## 4. Response\n\nThe `TripsResponse` processes and provides easy access to specific parts of the data returned by the `Trips` module. Here's a detailed breakdown of its properties:\n\n### `result`\n\nReturns the 'Result' part from the response.\n\n**Return Type**: `dict`\n\n***\n\n### `trips`\n\nProvides the list of 'Trip' items from the response. If the result is not a list, an empty list is returned.\n\n**Return Type**: `list`\n\n***\n\n### `statistics`\n\nProvides the 'Statistics' information for a trip.\n\n**Return Type**: `dict`\n\n***\n\n### `details`\n\nReturns the detailed data for the 'Trip'.\n\n**Return Type**: `dict`\n\n***\n\n### `transporttype`\n\nProvides the 'TransportType' information for a trip.\n\n**Return Type**: `dict`\n\n***\n\n### `scores`\n\nReturns the 'Scores' for the trip.\n\n**Return Type**: `dict`\n\n***\n\n### `events`\n\nProvides the 'Events' for the trip.\n\n**Return Type**: `dict`\n\n***\n\n### `waypoints`\n\nReturns the 'Waypoints' for the trip.\n\n**Return Type**: `dict`\n\n***\n\n### `paging_info`\n\nProvides the paging information if available.\n\n**Return Type**: `dict`\n\n***\n\n### `status`\n\nReturns the 'Status' from the response.\n\n**Return Type**: `dict`\n\n***\n\n### `datetime`\n\nProvides the 'Data' (usually representing datetime) from the response.\n\n**Return Type**: `dict`\n\n***\n\n### `trip_id`\n\nReturns the unique ID for the trip.\n\n**Return Type**: Depends on data (e.g., `str`, `None`)\n\n***\n\n## 5. Usage\n\nAfter making calls to the `Trips` module to retrieve trip-related data, you can pass the returned data to `TripsResponse` to further process and easily access specific parts of the response.\n\n```python\n# Import and initial initialization\n\nfrom damoov_admin import trips\nemail=\"your_admin_creds@auth.me\"\npassword=\"YOUR PASSWORD\"\n\ntrips_mngt = trips.DamoovAuth(email=email, password=password)\n\n# Method to get a list of trips for selected period of time\nuser_trip_details=trip.get_list_trips(\n    user_id='7623f515-b867-4325-bc63-3a0248d4f774',\n    # start_date='2023-09-09', \n    # end_date='2023-10-10', \n    start_date_timestamp_sec=1696704060, \n    end_date_timestamp_sec=1696713840,\n    sort_by='StartDateUtc',\n    tags_included=['Business'],\n    include_details=True, \n    include_statistics=True, \n    include_scores=True, \n    include_related=True, \n    locale=\"EN\", \n    unit_system=\"Imperial\", \n    limit=1\n    )\n\nprint('status: ', user_trip_details.status)\nprint('details: ', user_trip_details.details)\nprint('trips: ',user_trip_details.trips)\nprint('trip id: ',user_trip_details.trip_id)\nprint('date and time: ', user_trip_details.datetime)\nprint(user_trip_details.paging_info)\nprint(user_trip_details) # prints full response in JSON format\n    \n\n# Methods to fetch trip details, including waypoints, for a specific trip ID.\ntrip_details = trip_mngt.get_trip_details(\n      trip_id=\"trip_id\",\n      user_id=\"user_id\",\n      include_details=True, \n      include_statistics=True, \n      include_scores=True, \n      include_waypoints=True,\n      include_events=True, \n      include_related=True, \n      locale=\"EN\", \n      unit_system=\"Imperial\"\n    )\n\nprint(trip_details) # prints full response in JSON format\nprint('Status: ', trip_details.status)\nprint('Result: ',trip_details.result)\nprint('Statistics: ',trip_details.statistics)\nprint('Scores: ',trip_details.scores)\nprint('Events: ',trip_details.events)\nprint('Waypoints: ',trip_details.waypoints)\nprint('Details: ',trip_details.details)\nprint('Transportation mode: ',trip_details.transporttype)\n \n```\n\n## Users\n***\nThe `Users` module provides a comprehensive suite of functionalities to manage user data effectively, ranging from user creation, updates, to deletions. Below is a breakdown of its methods and their usage:\n\n## 1. Get started\n\nIf you haven't already, install the Damoov-Admin SDK for Python.\n\n```curl\npip install damoov-admin\n```\n\nBegin by importing the User management module and finalizing the authentication process.\n\n```python\nfrom damoov_admin import users\nemail=\"your_admin_creds@auth.me\"\npassword=\"YOUR PASSWORD\"\n\nuser_mngt = users.DamoovAuth(email=email, password=password)\n\n```\n\n## 2. Methods\n\n#### Syntaxes:\n\n- `instanceid`:  The instance ID for the user.\n- `instancekey`:  The instance Key for the user.\n- `ClientId`: A unique identifier assigned by the client for the user.\n- `FirstName`: First name of the user.\n- `LastName`: Last name of the user.\n- `Nickname`: Nickname for the user.\n- `Phone`: Phone number of the user.\n- `Email`: Email address of the user.\n- `CreateAccessToken`: If set to True, a user's access token will be created.\n\n***\n\n### `create_user`\n\nCreates a new user based on the given parameters.\n\n**Parameters**\n\n- `instanceid`: **Required.** \n- `instancekey`: **Required.**\n- `FirstName`: Optional. \n- `LastName`: Optional. \n- `Nickname`: Optional. \n- `Phone`: Optional. \n- `Email`: Optional.\n- `ClientId`: Optional. \n- `CreateAccessToken`: Optional. \n\n**Example**:\n\nRequest:\n\n```python\n    new_user=users_mgnt.create_user(\n        instanceid='your_instance_id',\n        instancekey='your_instance_key',\n        FirstName='FirstName',\n        LastName='LastName',\n        Nickname='Nickname',\n        Phone='123456789',\n    )\n```\n\nResponse:\n\n> \ud83d\udcd8 DeviceToken is an old name for UserId\n\n```json\n{\n    \"Result\": {\n        \"DeviceToken\": \"user_devicetoken/userid\", // DeviceToekn is the same as UserId\n        \"AccessToken\": null,\n        \"RefreshToken\": null\n    },\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n### `update_user`\n\nUpdates user details based on the given parameters.\n\n**Parameters**\n\n- `userid`: **Required.** User's unique identifier.\n- `ClientId`: Optional. Client ID for the user.\n- `FirstName`: Optional. Updated first name of the user.\n- `LastName`: Optional. Updated last name of the user.\n- `Nickname`: Optional. Updated nickname for the user.\n- `Phone`: Optional. Updated phone number of the user.\n- `Email`: Optional. Updated email address of the user.\n\n**Example**:\n\nRequest:\n\n```python\n    user=users_mgnt.update_user(\n        userid='User_Id',\n        FirstName='Tim',\n        LastName='Plumber',\n        Nickname='Tim-tim',\n        Phone='123456789',\n        ClientId='12-34-56789'\n    )\n```\n\nResponse:\n\n```json\n{\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n### `delete_user`\n\n**Parameters**:\n\n**Example**:\n\nRequest:\n\n```python\ndelete_user=users_mgnt.delete_user(\n        userid='User_devicetoken/userid'\n    )\n```\n\nResponse:\n\n```\n{\n    \"Status\": 200,\n    \"Title\": \"\",\n    \"Errors\": []\n}\n```\n\n## 3. Note\n\n- In all methods, if there's a HTTPError, the error will be printed, and the response will be handled accordingly.\n\n## 4. Response\n\nThe `UsersResponse` class is tailored to process and provide convenient access to specific parts of the data returned from user-related operations. Here's an in-depth breakdown of its properties and methods:\n\n### `devicetoken`\n\nReturns the `DeviceToken` from the response's `Result` section. It provides the device token/ UseId associated with the user.\n\n**Return Type**: Depends on data (e.g., `str`, `None`)\n\n***\n\n### `userid`\n\nReturns the user ID from the response's `Result` section. It provides the device token/ UseId associated with the user.\n\n**Return Type**: Depends on data (e.g., `str`, `None`)\n\n***\n\n### `status`\n\nExtracts the 'Status' of the response. This typically indicates the success or failure of the operation and might contain relevant status codes or messages.\n\n**Return Type**: `dict`\n\n## 5. Usage\n\nAfter conducting operations related to users, you can pass the returned data to `UsersResponse` to further process and effortlessly access specific parts of the response.\n\n```python\n# Import and initial initialization\nfrom damoov_admin import users\nemail=\"your_admin_creds@auth.me\"\npassword=\"YOUR PASSWORD\"\n\nuser_mngt = users.DamoovAuth(email=email, password=password)\n\n# Use methods to create and manage users\nnew_user=users.create_user(\n        instanceid='your_instance_id',\n        instancekey='your_instance_key',,\n    )\n    print(new_user)\n    print(new_user.devicetoken)\n    print(new_user.status)\n    print(new_user.userid)\n \n user=users_mgnt.update_user(\n        userid='User_Id',\n        FirstName='Tim',\n        LastName='Plumber',\n        Nickname='Tim-tim',\n        Phone='123456789',\n        ClientId='12-34-56789'\n    )\n\n    print(user)\n    print(user.status)  \n```\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "SDK for Damoov's APIs",
    "version": "0.9.1",
    "project_urls": null,
    "split_keywords": [
        "damoov",
        "sdk",
        "telematics",
        "mobiletelematics",
        "safety",
        "driving",
        "safe-driving",
        "fleetmanagement",
        "fleet-management",
        "fleet",
        "driving-behavior",
        "driving-behaviour",
        "driving-behavior-analysis",
        "driving-behaviour-analysis",
        "driving-behavior-monitoring",
        "driving-behaviour-monitoring",
        "driving-behavior-score",
        "driving-behaviour-score",
        "driving-behavior-scoring",
        "driving-behaviour-scoring",
        "driving-behavior-analysis",
        "driving-behaviour-analysis",
        "driving-behavior-monitoring",
        "driving-behaviour-monitoring",
        "driving-behavior-score",
        "driving-behaviour-score",
        "driving-behavior-scoring",
        "driving-behaviour-scoring",
        "driving-behavior-analysis",
        "driving-behaviour-analysis",
        "driving-behavior-monitoring",
        "driving-behaviour-monitoring",
        "driving-behavior-score",
        "driving-behaviour-score",
        "driving-behavior-scoring",
        "driving-behaviour-scoring",
        "driving-behavior-analysis",
        "driving-behaviour-analysis",
        "driving-behavior-monitoring",
        "driving-behaviour-monitoring",
        "driving-behavior-score",
        "driving-behaviour-score",
        "driving-behavior-scoring",
        "driving-behaviour-scoring"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a036eb4a79f341e13f16913baf5207cbf3b73d08d7ad7094dc2f0dab1c8207a4",
                "md5": "aed54f163ccb4b0093f9d82cb0ff5896",
                "sha256": "cc32c81fd23fbafa1632a95de281a19793ba8a759346f22b113b08c6b21e4912"
            },
            "downloads": -1,
            "filename": "damoov_admin-0.9.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "aed54f163ccb4b0093f9d82cb0ff5896",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 24478,
            "upload_time": "2024-01-04T12:01:29",
            "upload_time_iso_8601": "2024-01-04T12:01:29.026299Z",
            "url": "https://files.pythonhosted.org/packages/a0/36/eb4a79f341e13f16913baf5207cbf3b73d08d7ad7094dc2f0dab1c8207a4/damoov_admin-0.9.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0e3b44e64128632d485e534b4fd6fa95522fb99f71c3b9f22e10b8b65eb2fbf9",
                "md5": "377b94cd1efcd6fc64c8fec87bae1430",
                "sha256": "8827f31b0a5052f616e392ee897ec353c572dc9d20372add2698a43f477414e6"
            },
            "downloads": -1,
            "filename": "damoov_admin-0.9.1.tar.gz",
            "has_sig": false,
            "md5_digest": "377b94cd1efcd6fc64c8fec87bae1430",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 37164,
            "upload_time": "2024-01-04T12:01:31",
            "upload_time_iso_8601": "2024-01-04T12:01:31.347684Z",
            "url": "https://files.pythonhosted.org/packages/0e/3b/44e64128632d485e534b4fd6fa95522fb99f71c3b9f22e10b8b65eb2fbf9/damoov_admin-0.9.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-04 12:01:31",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "damoov-admin"
}
        
Elapsed time: 0.16206s