nmbrs


Namenmbrs JSON
Version 1.0.13 PyPI version JSON
download
home_pageNone
SummaryPython SDK for the Visma Nmbrs SOAP API.
upload_time2024-10-07 19:49:33
maintainerLars Kluijtmans
docs_urlNone
authorLars Kluijtmans
requires_python>=3.10
licenseLars Kluijtmans
keywords nmbrs soap
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Nmbrs SDK

---

Python SDK for the Visma Nmbrs SOAP API. Simplifying integration and enhancing
developer productivity.

Created by [lk-software](https://lk-software.com)

## Installation

---

To install this package, run:

```shell
pip install nmbrs
```

## Getting started

---

This Software Development Kit (SDK) facilitates interaction with the Nmbrs.

Please note that this SDK specifically targets the Nmbrs SOAP API.

Although there is also a Rest API available, it is not covered in this SDK.

For more information on the SOAP API, refer to the
[NMBRS SOAP API documentation](https://support.nmbrs.nl/hc/nl/articles/205903718-Nmbrs-API-for-developers#topic_basics).

To explore the Rest API, you can refer to the
[NMBRS REST API documentation](https://developer.nmbrs.com/docs).

If you encounter any difficulties or have questions related to development with
Nmbrs, feel free to reach out through:

- Email: info@lk-software.com
- Linkedin: [Lars Kluijtmans](https://www.linkedin.com/in/lars-kluijtmans-aa4a10243/)

## Authentication

---

There are two authentication options built into the SDK:

1. Using the username and token
2. Using the username, token, and domain

When using only the username and token, the call
[**DebtorService:Environment_Get**](https://api.nmbrs.nl/soap/v3/DebtorService.asmx?op=Environment_Get)
will be made to retrieve the domain from Nmbrs.

In the second option, you specify the domain yourself, but the validity of your
credentials (username, token, and domain) is not verified.

## Getting the Nmbrs Token

---

You can retrieve a Nmbrs API token through the Nmbrs website.
For detailed instructions, refer to [How to get an API token](https://support.nmbrs.com/hc/en-us/articles/360013305712-How-to-get-an-API-token).

API access management can be handled using User Templates. Learn more about this
feature [here](https://support.nmbrs.com/hc/en-us/articles/360013527371-API-User-Template).

## Initialize SDK Using Username and Token

---

Default authentication flow, using the username and token to retrieve the domain
name, this automatically validates the credentails.

```python
from nmbrs import Nmbrs

api = Nmbrs(username="__username__", token="__token__")

print(api.debtor.auth_manager.get_username())
```

The provided credentials are saved in the SDK for later use.
If not all required parameters are specified, a MissingParams exception will be
thrown.

## Initialize SDK Using Username, Token, and Domain

---

In the following authentication methode all needed authentication credentials
are passed in, but these will not be validated.

```python
from nmbrs import Nmbrs

api = Nmbrs(username="__username__", token="__token__", domain="__domain__", auth_type="domain")

print(api.debtor.auth_manager.get_username())
```

The provided credentials are saved in the SDK for later use.

Please note that these credentials are not authenticated and may not be valid.

## Testing Environment: Sandbox

---

For testing purposes, Nmbrs provides a Sandbox feature. To learn more about the
sandbox, its usage, and limitations, refer to the [Sandbox documentation](https://support.nmbrs.nl/hc/nl/articles/204054506-Sandbox).

By default, the SDK uses the sandbox instead of the live environment to prevent
accidental modification of data in the live environment.

To access the live environment, use the following code:

```python
from nmbrs import Nmbrs

api = Nmbrs(username="__username__", token="__token__", sandbox=False)
```

Please note that the usage of the sandbox is set when the SDK is initialized
and cannot be modified afterward.

## Retrieving Data

---

Now that you have set up the necessary authentication, it's possible to retrieve
data from Nmbrs.

The Nmbrs SOAP API, and by extension this SDK, are split into 5 services:

- [Debtor service](https://api.nmbrs.nl/soap/v3/DebtorService.asmx)
- [Company service](https://api.nmbrs.nl/soap/v3/CompanyService.asmx)
- [Employee service](https://api.nmbrs.nl/soap/v3/EmployeeService.asmx)
- [Single Sign-on service](https://api.nmbrs.nl/soap/v3/SingleSignOn.asmx)
- [Report service](https://api.nmbrs.nl/soap/v3/ReportService.asmx)

You can access data from Nmbrs using the various services available. For example:

```python
from nmbrs import Nmbrs

api = Nmbrs(username="__username__", token="__token__")

# Retrieve all debtors
debtors = api.debtor.get_all()

# Print the number of debtors
print(len(debtors))

# Print the details of the first debtor as a dictionary
print(debtors[0].to_dict())
```

Each object returned has a to_dict() function that returns the object in the
form of a dictionary.

Additionally, you can use the serialize function to convert objects, lists of
objects, etc., into dictionaries:

```python
from nmbrs import Nmbrs, serialize

api = Nmbrs(username="__username__", token="__token__")

debtors = api.debtor.get_all()

print(serialize(debtors))
```

This allows for easy manipulation and transformation of data returned from the
Nmbrs API.

### Error Handling

---

The Nmbrs SDK provides robust error handling mechanisms to assist developers
in diagnosing and resolving issues encountered during API interaction.
This section outlines the various types of exceptions that may be raised and
how to handle them effectively.

### Nmbrs Base Exception

The base Nmbrs exception, NmbrsBaseException, serves as the foundation for
specific error types within the SDK.

It contains the following attributes:

- error_code: The error code associated with the exception.
- resource: The name of the endpoint associated that caused the error.
- title: A title summarizing the error.
- cause: Describes the cause of the error.
- solution: Provides a suggested solution or action to resolve the error.

### Handling Exceptions

To handle exceptions gracefully, use Python's try-except block.

Nmbrs exceptions consist of:

- error_code: The error code of the specified error returned.
- resource: The endpoint that caused the exception to occur.
- title: Short description of the error.
- cause: Possible cause as indicated by Nmbrs.
- solution: Recommended solution from nmbrs.

#### Nmbrs base exception

If you want to handle all the Nmbrs exceptions the same way use the NmbrsBaseException:

```python
from nmbrs import Nmbrs
from nmbrs.exceptions import NmbrsBaseException

try:
    api = Nmbrs(username="__username__", token="__token__")
except NmbrsBaseException as e:
    print(f"Nmbrs error: {e.resource}")
```

#### Specific Nmbrs exceptions

You can catch specific exceptions and handle them accordingly based on the error
scenario.

Here's an example:

```python
from nmbrs import Nmbrs
from nmbrs.exceptions import AuthenticationException, AuthorizationException

try:
    api = Nmbrs(username="__username__", token="__token__")
except AuthenticationException as e:
    print(f"Authentication error: {e.resource}")
except AuthorizationException as e:
    print(f"Authorization error: {e.resource}")
```

By catching and handling exceptions, you can provide meaningful feedback to
users and take appropriate actions to address errors encountered during API
interactions.

## Report service

The Report service allows you to interact with report-related functionality
provided by Nmbrs SOAP API.
Please note that not all specific calls in the report service are implemented
in this SDK.

To utilize the available functionality, you need to consult the
[Nmbrs documentation](https://api.nmbrs.nl/soap/v3/ReportService.asmx)
and provide the necessary parameters.

### Getting Started

To begin using the Report service, you first need to initialize an instance of
the Nmbrs SDK with your authentication details:

```python
from nmbrs import Nmbrs

api = Nmbrs(username="__username__", token="__token__")
```

### Example Usage

#### Retrieving Report Task ID

You can retrieve the task ID (GUID) for a specific report task by providing the
task name and parameters:

```python
task_name = "Reports_Accountant_CompanyContactPerson_Background"
task_parameters = {}

report_guid = api.report.get_task_id(task_name, task_parameters)
```

Once you have the GUID, Nmbrs will start generating the report in the background.

#### Requesting Report

You can request the generated report using the background_task_result call.
Specify the maximum amount of time you are willing to wait for the report to
be generated (in seconds):

```python
report_guid = "__your_guid__"

report = api.report.background_task_result(report_guid, 360)
```

#### Error Handling Background tasks

When requesting the report, Nmbrs may return errors. In such cases, the
following exceptions can be raised:

- **UnknownBackgroundTaskException**: Raised when the background task is unknown.
- **BackgroundTaskException**: Raised for general background task errors.

You can handle these exceptions as follows:

```python
from nmbrs.exceptions import (
    UnknownBackgroundTaskException,
    BackgroundTaskException,
)

report_guid = "__your_guid__"

try:
   report = api.report.background_task_result(report_guid, 360)
except UnknownBackgroundTaskException as e:
    print(e)
except BackgroundTaskException as e:
    print(e)
```

Ensure to handle these exceptions to provide appropriate error handling in your
application.

## Single Sign-on (SSO)

When it comes to the Nmbrs Single Sign-On service, authentication can be
achieved through various methods:

- Using Username and Token
- Using Username and Password
- Using Username, Password, and Domain

When it comes to Nmbrs Single Sign-On service:

- Username and Token
- Username and Password
- Username, Password and Domain

### SSO Flow

The Single Sign-On (SSO) flow involves the following steps:

1. Obtain an SSO token, which is valid for 30 seconds.
2. Use this token to generate a URL that automatically signs the user into
   Nmbrs.

For detailed implementation instructions on the entire SSO flow, refer to the
[Single Sign-On Service Flow (SSO) documentation](https://support.nmbrs.com/hc/en-us/articles/360013311952-Single-Sign-On-Service-Flow-SSO).

### SSO Token

#### Username and Token

```python
from nmbrs import SingleSingOnService

sso_service = SingleSingOnService()

sso_token = sso_service.get_token_with_api_token("__username__", "__token__")

print(sso_token)
```

#### Username and Password

```python
sso_token = sso_service.get_token_with_password("__username__", "__password__")

print(sso_token)
```

**Note**: This function will raise an exception if you have accounts in
multiple Nmbrs environments. In such cases, use the following call where you
specify the domain you want to log in to.

#### Username, password, and domain

```python
sso_token = sso_service.get_token_with_domain("__username__", "__password__", "__domain__")

print(sso_token)
```

#### SSO url

Using the token obtained from the aforementioned functions, you can create a
URL that automatically redirects the user to Nmbrs.

```python
sso_token = sso_service.get_token_with_password("__username__", "__password__")
sso_url = sso_service.get_sso_url(sso_token, "__domain__")

print(sso_url)
```

This URL simplifies the user authentication process and provides a seamless
login experience for Nmbrs users.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "nmbrs",
    "maintainer": "Lars Kluijtmans",
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "info@lk-software.com",
    "keywords": "nmbrs, soap",
    "author": "Lars Kluijtmans",
    "author_email": "info@lk-software.com",
    "download_url": "https://files.pythonhosted.org/packages/24/5d/1d57a442b7c80d9e4a3bceebe46583939d23481707aef25dacc8778c74c4/nmbrs-1.0.13.tar.gz",
    "platform": null,
    "description": "# Nmbrs SDK\n\n---\n\nPython SDK for the Visma Nmbrs SOAP API. Simplifying integration and enhancing\ndeveloper productivity.\n\nCreated by [lk-software](https://lk-software.com)\n\n## Installation\n\n---\n\nTo install this package, run:\n\n```shell\npip install nmbrs\n```\n\n## Getting started\n\n---\n\nThis Software Development Kit (SDK) facilitates interaction with the Nmbrs.\n\nPlease note that this SDK specifically targets the Nmbrs SOAP API.\n\nAlthough there is also a Rest API available, it is not covered in this SDK.\n\nFor more information on the SOAP API, refer to the\n[NMBRS SOAP API documentation](https://support.nmbrs.nl/hc/nl/articles/205903718-Nmbrs-API-for-developers#topic_basics).\n\nTo explore the Rest API, you can refer to the\n[NMBRS REST API documentation](https://developer.nmbrs.com/docs).\n\nIf you encounter any difficulties or have questions related to development with\nNmbrs, feel free to reach out through:\n\n- Email: info@lk-software.com\n- Linkedin: [Lars Kluijtmans](https://www.linkedin.com/in/lars-kluijtmans-aa4a10243/)\n\n## Authentication\n\n---\n\nThere are two authentication options built into the SDK:\n\n1. Using the username and token\n2. Using the username, token, and domain\n\nWhen using only the username and token, the call\n[**DebtorService:Environment_Get**](https://api.nmbrs.nl/soap/v3/DebtorService.asmx?op=Environment_Get)\nwill be made to retrieve the domain from Nmbrs.\n\nIn the second option, you specify the domain yourself, but the validity of your\ncredentials (username, token, and domain) is not verified.\n\n## Getting the Nmbrs Token\n\n---\n\nYou can retrieve a Nmbrs API token through the Nmbrs website.\nFor detailed instructions, refer to [How to get an API token](https://support.nmbrs.com/hc/en-us/articles/360013305712-How-to-get-an-API-token).\n\nAPI access management can be handled using User Templates. Learn more about this\nfeature [here](https://support.nmbrs.com/hc/en-us/articles/360013527371-API-User-Template).\n\n## Initialize SDK Using Username and Token\n\n---\n\nDefault authentication flow, using the username and token to retrieve the domain\nname, this automatically validates the credentails.\n\n```python\nfrom nmbrs import Nmbrs\n\napi = Nmbrs(username=\"__username__\", token=\"__token__\")\n\nprint(api.debtor.auth_manager.get_username())\n```\n\nThe provided credentials are saved in the SDK for later use.\nIf not all required parameters are specified, a MissingParams exception will be\nthrown.\n\n## Initialize SDK Using Username, Token, and Domain\n\n---\n\nIn the following authentication methode all needed authentication credentials\nare passed in, but these will not be validated.\n\n```python\nfrom nmbrs import Nmbrs\n\napi = Nmbrs(username=\"__username__\", token=\"__token__\", domain=\"__domain__\", auth_type=\"domain\")\n\nprint(api.debtor.auth_manager.get_username())\n```\n\nThe provided credentials are saved in the SDK for later use.\n\nPlease note that these credentials are not authenticated and may not be valid.\n\n## Testing Environment: Sandbox\n\n---\n\nFor testing purposes, Nmbrs provides a Sandbox feature. To learn more about the\nsandbox, its usage, and limitations, refer to the [Sandbox documentation](https://support.nmbrs.nl/hc/nl/articles/204054506-Sandbox).\n\nBy default, the SDK uses the sandbox instead of the live environment to prevent\naccidental modification of data in the live environment.\n\nTo access the live environment, use the following code:\n\n```python\nfrom nmbrs import Nmbrs\n\napi = Nmbrs(username=\"__username__\", token=\"__token__\", sandbox=False)\n```\n\nPlease note that the usage of the sandbox is set when the SDK is initialized\nand cannot be modified afterward.\n\n## Retrieving Data\n\n---\n\nNow that you have set up the necessary authentication, it's possible to retrieve\ndata from Nmbrs.\n\nThe Nmbrs SOAP API, and by extension this SDK, are split into 5 services:\n\n- [Debtor service](https://api.nmbrs.nl/soap/v3/DebtorService.asmx)\n- [Company service](https://api.nmbrs.nl/soap/v3/CompanyService.asmx)\n- [Employee service](https://api.nmbrs.nl/soap/v3/EmployeeService.asmx)\n- [Single Sign-on service](https://api.nmbrs.nl/soap/v3/SingleSignOn.asmx)\n- [Report service](https://api.nmbrs.nl/soap/v3/ReportService.asmx)\n\nYou can access data from Nmbrs using the various services available. For example:\n\n```python\nfrom nmbrs import Nmbrs\n\napi = Nmbrs(username=\"__username__\", token=\"__token__\")\n\n# Retrieve all debtors\ndebtors = api.debtor.get_all()\n\n# Print the number of debtors\nprint(len(debtors))\n\n# Print the details of the first debtor as a dictionary\nprint(debtors[0].to_dict())\n```\n\nEach object returned has a to_dict() function that returns the object in the\nform of a dictionary.\n\nAdditionally, you can use the serialize function to convert objects, lists of\nobjects, etc., into dictionaries:\n\n```python\nfrom nmbrs import Nmbrs, serialize\n\napi = Nmbrs(username=\"__username__\", token=\"__token__\")\n\ndebtors = api.debtor.get_all()\n\nprint(serialize(debtors))\n```\n\nThis allows for easy manipulation and transformation of data returned from the\nNmbrs API.\n\n### Error Handling\n\n---\n\nThe Nmbrs SDK provides robust error handling mechanisms to assist developers\nin diagnosing and resolving issues encountered during API interaction.\nThis section outlines the various types of exceptions that may be raised and\nhow to handle them effectively.\n\n### Nmbrs Base Exception\n\nThe base Nmbrs exception, NmbrsBaseException, serves as the foundation for\nspecific error types within the SDK.\n\nIt contains the following attributes:\n\n- error_code: The error code associated with the exception.\n- resource: The name of the endpoint associated that caused the error.\n- title: A title summarizing the error.\n- cause: Describes the cause of the error.\n- solution: Provides a suggested solution or action to resolve the error.\n\n### Handling Exceptions\n\nTo handle exceptions gracefully, use Python's try-except block.\n\nNmbrs exceptions consist of:\n\n- error_code: The error code of the specified error returned.\n- resource: The endpoint that caused the exception to occur.\n- title: Short description of the error.\n- cause: Possible cause as indicated by Nmbrs.\n- solution: Recommended solution from nmbrs.\n\n#### Nmbrs base exception\n\nIf you want to handle all the Nmbrs exceptions the same way use the NmbrsBaseException:\n\n```python\nfrom nmbrs import Nmbrs\nfrom nmbrs.exceptions import NmbrsBaseException\n\ntry:\n    api = Nmbrs(username=\"__username__\", token=\"__token__\")\nexcept NmbrsBaseException as e:\n    print(f\"Nmbrs error: {e.resource}\")\n```\n\n#### Specific Nmbrs exceptions\n\nYou can catch specific exceptions and handle them accordingly based on the error\nscenario.\n\nHere's an example:\n\n```python\nfrom nmbrs import Nmbrs\nfrom nmbrs.exceptions import AuthenticationException, AuthorizationException\n\ntry:\n    api = Nmbrs(username=\"__username__\", token=\"__token__\")\nexcept AuthenticationException as e:\n    print(f\"Authentication error: {e.resource}\")\nexcept AuthorizationException as e:\n    print(f\"Authorization error: {e.resource}\")\n```\n\nBy catching and handling exceptions, you can provide meaningful feedback to\nusers and take appropriate actions to address errors encountered during API\ninteractions.\n\n## Report service\n\nThe Report service allows you to interact with report-related functionality\nprovided by Nmbrs SOAP API.\nPlease note that not all specific calls in the report service are implemented\nin this SDK.\n\nTo utilize the available functionality, you need to consult the\n[Nmbrs documentation](https://api.nmbrs.nl/soap/v3/ReportService.asmx)\nand provide the necessary parameters.\n\n### Getting Started\n\nTo begin using the Report service, you first need to initialize an instance of\nthe Nmbrs SDK with your authentication details:\n\n```python\nfrom nmbrs import Nmbrs\n\napi = Nmbrs(username=\"__username__\", token=\"__token__\")\n```\n\n### Example Usage\n\n#### Retrieving Report Task ID\n\nYou can retrieve the task ID (GUID) for a specific report task by providing the\ntask name and parameters:\n\n```python\ntask_name = \"Reports_Accountant_CompanyContactPerson_Background\"\ntask_parameters = {}\n\nreport_guid = api.report.get_task_id(task_name, task_parameters)\n```\n\nOnce you have the GUID, Nmbrs will start generating the report in the background.\n\n#### Requesting Report\n\nYou can request the generated report using the background_task_result call.\nSpecify the maximum amount of time you are willing to wait for the report to\nbe generated (in seconds):\n\n```python\nreport_guid = \"__your_guid__\"\n\nreport = api.report.background_task_result(report_guid, 360)\n```\n\n#### Error Handling Background tasks\n\nWhen requesting the report, Nmbrs may return errors. In such cases, the\nfollowing exceptions can be raised:\n\n- **UnknownBackgroundTaskException**: Raised when the background task is unknown.\n- **BackgroundTaskException**: Raised for general background task errors.\n\nYou can handle these exceptions as follows:\n\n```python\nfrom nmbrs.exceptions import (\n    UnknownBackgroundTaskException,\n    BackgroundTaskException,\n)\n\nreport_guid = \"__your_guid__\"\n\ntry:\n   report = api.report.background_task_result(report_guid, 360)\nexcept UnknownBackgroundTaskException as e:\n    print(e)\nexcept BackgroundTaskException as e:\n    print(e)\n```\n\nEnsure to handle these exceptions to provide appropriate error handling in your\napplication.\n\n## Single Sign-on (SSO)\n\nWhen it comes to the Nmbrs Single Sign-On service, authentication can be\nachieved through various methods:\n\n- Using Username and Token\n- Using Username and Password\n- Using Username, Password, and Domain\n\nWhen it comes to Nmbrs Single Sign-On service:\n\n- Username and Token\n- Username and Password\n- Username, Password and Domain\n\n### SSO Flow\n\nThe Single Sign-On (SSO) flow involves the following steps:\n\n1. Obtain an SSO token, which is valid for 30 seconds.\n2. Use this token to generate a URL that automatically signs the user into\n   Nmbrs.\n\nFor detailed implementation instructions on the entire SSO flow, refer to the\n[Single Sign-On Service Flow (SSO) documentation](https://support.nmbrs.com/hc/en-us/articles/360013311952-Single-Sign-On-Service-Flow-SSO).\n\n### SSO Token\n\n#### Username and Token\n\n```python\nfrom nmbrs import SingleSingOnService\n\nsso_service = SingleSingOnService()\n\nsso_token = sso_service.get_token_with_api_token(\"__username__\", \"__token__\")\n\nprint(sso_token)\n```\n\n#### Username and Password\n\n```python\nsso_token = sso_service.get_token_with_password(\"__username__\", \"__password__\")\n\nprint(sso_token)\n```\n\n**Note**: This function will raise an exception if you have accounts in\nmultiple Nmbrs environments. In such cases, use the following call where you\nspecify the domain you want to log in to.\n\n#### Username, password, and domain\n\n```python\nsso_token = sso_service.get_token_with_domain(\"__username__\", \"__password__\", \"__domain__\")\n\nprint(sso_token)\n```\n\n#### SSO url\n\nUsing the token obtained from the aforementioned functions, you can create a\nURL that automatically redirects the user to Nmbrs.\n\n```python\nsso_token = sso_service.get_token_with_password(\"__username__\", \"__password__\")\nsso_url = sso_service.get_sso_url(sso_token, \"__domain__\")\n\nprint(sso_url)\n```\n\nThis URL simplifies the user authentication process and provides a seamless\nlogin experience for Nmbrs users.\n",
    "bugtrack_url": null,
    "license": "Lars Kluijtmans",
    "summary": "Python SDK for the Visma Nmbrs SOAP API.",
    "version": "1.0.13",
    "project_urls": {
        "Homepage": "https://github.com/LarsKluijtmans/nmbrs_api",
        "Issues": "https://github.com/LarsKluijtmans/nmbrs_api/issues",
        "Source": "https://github.com/LarsKluijtmans/nmbrs_api"
    },
    "split_keywords": [
        "nmbrs",
        " soap"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9fc2660dd9d3c1a910004c7bcc42fd6411fdd5fd2c130deaf20511ecb548cd4c",
                "md5": "e4861bc530697fe423bcc0d001f2978f",
                "sha256": "434f7e4645d806e33df4f65f28597e0424ceb71bb5bf390708d7d36e30b1fb10"
            },
            "downloads": -1,
            "filename": "nmbrs-1.0.13-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e4861bc530697fe423bcc0d001f2978f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 105371,
            "upload_time": "2024-10-07T19:49:31",
            "upload_time_iso_8601": "2024-10-07T19:49:31.706298Z",
            "url": "https://files.pythonhosted.org/packages/9f/c2/660dd9d3c1a910004c7bcc42fd6411fdd5fd2c130deaf20511ecb548cd4c/nmbrs-1.0.13-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "245d1d57a442b7c80d9e4a3bceebe46583939d23481707aef25dacc8778c74c4",
                "md5": "7327da989e99388f5843c4243d97fb65",
                "sha256": "52b5acdf6f18384e584d6e2273c69f4b66e6f185c60ab6b89ef6e7c059c47b00"
            },
            "downloads": -1,
            "filename": "nmbrs-1.0.13.tar.gz",
            "has_sig": false,
            "md5_digest": "7327da989e99388f5843c4243d97fb65",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 62563,
            "upload_time": "2024-10-07T19:49:33",
            "upload_time_iso_8601": "2024-10-07T19:49:33.403746Z",
            "url": "https://files.pythonhosted.org/packages/24/5d/1d57a442b7c80d9e4a3bceebe46583939d23481707aef25dacc8778c74c4/nmbrs-1.0.13.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-07 19:49:33",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "LarsKluijtmans",
    "github_project": "nmbrs_api",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "nmbrs"
}
        
Elapsed time: 0.47308s