kgrid-sdk


Namekgrid-sdk JSON
Version 0.0.4 PyPI version JSON
download
home_pageNone
SummarySDK for KGrid 2.0 Knowledge objects
upload_time2024-11-21 20:55:31
maintainerNone
docs_urlNone
authorYour Name
requires_python<4.0,>=3.10
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # kgrid_sdk

## Implementation
### Dependency management
To manage dependencies and make it possible to only install dependencies required for what you want to use from SDK we decided to use Python's Optional Dependencies rather than creating separate packages for each class.

Packaging each class separately has its advantages, especially if each class represents a distinct, independent feature with unique dependencies which is not the case in our usecase. However, using optional dependencies within a single package can offer significant benefits in terms of usability and maintainability. Here’s a comparison to help decide which approach might work best for you

1. Installation Simplicity
With optional dependencies, users install a single package (kgrid_sdk) and add only the extra features they need using extras (e.g., kgrid_sdk[cli]). This is generally simpler and more user-friendly, as all features are accessible through a single, central package

2. Namespace and Code Organization
Keeping everything in a single package means all classes share the same namespace and project structure, making the API simpler and more cohesive for users. They import from kgrid_sdk package regardless of the feature set they need, which simplifies code and documentation.

3. Code Reusability and Dependency Management
A single package with optional dependencies is easier to manage if some classes share common dependencies. You only define common dependencies once, and updates propagate across all features. It also avoids versioning conflicts between interdependent features.

4. User Flexibility and Lightweight Installation
Users can install only what they need, making the package lightweight without requiring multiple packages. It provides flexibility without adding complexity since extras are not installed by default.

5. Version Management and Compatibility
You manage versioning in one central package. Compatibility between the core and extras is generally simpler to control, as everything is versioned and released together.

The current version of the SDK only has optional dependencies for Ko_API class. If this class is used, these optional dependencies could be installed with the package using `-E api` if you are using `poetry install` or `poetry add` and using `[api]` if you are using `pip install`.

## Usage
You can use this package to implement python Knowledge Objects.

### use  kgrid_sdk package as a dependency in your Knowledge Object
The `kgrid_sdk` package is available on PyPI and can be easily added as a dependency to your project. Here’s how to include it in your project based on your setup:

#### using Poetry
- For the base package:
```bash
poetry add kgrid_sdk
```

- If you need to use the KO-API class, include the api extra:
```
poetry add kgrid_sdk -E api
```

#### Using pip
If you are not using Poetry, you can install the package with pip:
- For the base package:
```
pip install kgrid_sdk
```
- To include the KO-API extra:
```
pip install kgrid_sdk[api] 
```
### `kgrid_sdk.Ko`
To inherit the core functionalities of the SDK, extend the `kgrid_sdk.Ko` class in your knowledge object. For example:
```python
from kgrid_sdk import Ko

class Prevent_obesity_morbidity_mortality(Ko):
    def __init__(self):
        super().__init__(__package__)
```
This class adds core functionalities to the knowledge object (KO), such as `get_version` and `get_metadata`.

### `kgrid_sdk.Ko_Execution`
The `Ko_Execution` class extends `Ko` to include a universal `execute` method for knowledge objects. The constructor of this class accepts an array of knowledge representations (functions), and the `execute` method can optionally take the name of the function to execute. If no function name is provided, the `execute` method defaults to executing the first function. This is particularly useful for KOs with only one knowledge representation. The knowledge representations could be added as static methods of the knowledge object class or could be defined as individual functions.
```python
from kgrid_sdk import Ko_Execution

class Pregnancy_healthy_weight_gain(Ko_Execution):
    def __init__(self):
        super().__init__(__package__, [self.get_pregnancy_healthy_weight_gain_recommendation])

    @staticmethod
    def get_pregnancy_healthy_weight_gain_recommendation(pregnant):
    ...        
```
The `execute` method takes a JSON input, mapping it to the knowledge representation's input parameters using a wrapper. The JSON input may include unrelated parameters, which are ignored by the wrapper.

The `execute` method is used by the SDK's collection class, API, and CLI services.

### `kgrid_sdk.Ko_API` and `kgrid_sdk.CLI`
To implement an API or CLI service for your knowledge object, extend the `kgrid_sdk.Ko_API` and `kgrid_sdk.CLI` classes:
```python
from kgrid_sdk import Ko_API
from kgrid_sdk import Ko_CLI

class Abdominal_aortic_aneurysm_screening(Ko_API,Ko_CLI):
    def __init__(self):
        super().__init__(__package__, [self.get_abdominal_aortic_aneurysm_screening])
```

These classes extend `Ko_Execution` and therefore they include the `execute` method to your knowledge object.

For a complete example of implementing API, CLI, and activator services using the SDK, see the knowledge objects created in our USPSTF collection repository or refer to the example code below:
```python
from kgrid_sdk import Ko_API
from kgrid_sdk import Ko_CLI


class Abdominal_aortic_aneurysm_screening(Ko_API,Ko_CLI):
    def __init__(self):
        super().__init__(__package__, [self.get_abdominal_aortic_aneurysm_screening])
        self.add_endpoint("/check-inclusion", tags=["abdominal_aortic_aneurysm_screening"])
    
    @staticmethod
    def get_abdominal_aortic_aneurysm_screening(age, gender, has_never_smoked):
        """
        Parameters:
        - age (int): Age of the person.
        - gender (int): Gender of the individual (0 for women, 1 for men).    
        - has_never_smoked (bool): Whether this person has never smoked or not.
        """
        
        if gender == 1:
            if age >= 65 and age <= 75 and not has_never_smoked:        
                return {
                    "inclusion": True,
                    "title": "Abdominal Aortic Aneurysm: Screening",
                    "recommendation": "The USPSTF recommends 1-time screening for abdominal aortic aneurysm (AAA) with ultrasonography in men aged 65 to 75 years who have ever smoked.",
                    "grade": "B",
                    "URL": "https://www.uspreventiveservicestaskforce.org/uspstf/index.php/recommendation/abdominal-aortic-aneurysm-screening"
                    }
            elif age >= 65 and age <= 75 and has_never_smoked:  
                return {
                    "inclusion": True,
                    "title": "Abdominal Aortic Aneurysm: Screening",
                    "recommendation": "The USPSTF recommends that clinicians selectively offer screening for AAA with ultrasonography in men aged 65 to 75 years who have never smoked rather than routinely screening all men in this group. Evidence indicates that the net benefit of screening all men in this group is small. In determining whether this service is appropriate in individual cases, patients and clinicians should consider the balance of benefits and harms on the basis of evidence relevant to the patient's medical history, family history, other risk factors, and personal values.",
                    "grade": "C",
                    "URL": "https://www.uspreventiveservicestaskforce.org/uspstf/index.php/recommendation/abdominal-aortic-aneurysm-screening"
                    }
        elif gender == 0:
            if has_never_smoked:        
                return {
                    "inclusion": True,
                    "title": "Abdominal Aortic Aneurysm: Screening",
                    "recommendation": "The USPSTF recommends against routine screening for AAA with ultrasonography in women who have never smoked and have no family history of AAA.",
                    "grade": "D",
                    "URL": "https://www.uspreventiveservicestaskforce.org/uspstf/index.php/recommendation/abdominal-aortic-aneurysm-screening"
                    }
            elif age >= 65 and age <= 75 and not has_never_smoked:  
                return {
                    "inclusion": True,
                    "title": "Abdominal Aortic Aneurysm: Screening",
                    "recommendation": "The USPSTF concludes that the current evidence is insufficient to assess the balance of benefits and harms of screening for AAA with ultrasonography in women aged 65 to 75 years who have ever smoked or have a family history of AAA.",
                    "grade": "I",
                    "URL": "https://www.uspreventiveservicestaskforce.org/uspstf/index.php/recommendation/abdominal-aortic-aneurysm-screening"
                    }

            
        return {
            "inclusion": False,
            "title": "Abdominal Aortic Aneurysm: Screening"    
            }
            

abdominal_aortic_aneurysm_screening = Abdominal_aortic_aneurysm_screening()
app = abdominal_aortic_aneurysm_screening.app

abdominal_aortic_aneurysm_screening.define_cli()
abdominal_aortic_aneurysm_screening.add_argument(
    "-a", "--age", type=float, required=True, help="Age of the person"
)
abdominal_aortic_aneurysm_screening.add_argument(
    "-g", "--gender", type=float, required=True, help="Gender of the individual (0 for women, 1 for men)."
)
abdominal_aortic_aneurysm_screening.add_argument(
    "--has_never_smoked", action='store_true', help="Indicate if the person has never smoked."
)
abdominal_aortic_aneurysm_screening.add_argument(
    "--has_ever_smoked", action='store_false', dest='has_never_smoked', help="Indicate if the person has ever smoked."
)


def cli():
    abdominal_aortic_aneurysm_screening.execute_cli()


def apply(input):
    return abdominal_aortic_aneurysm_screening.execute(input)
```

Note: The activator example requires a service specification file and a deployment file pointing to the `apply` method. For more details, refer to the [Python Activator](https://github.com/kgrid/python-activator) documentation.

### `kgrid_sdk.Collection`
The `kgrid_sdk.Collection` class can be used to create a collection of knowledge objects. Start by importing and creating an instance of the `Collection` class. Use the `add_knowledge_object` method to add knowledge objects that extend `kgrid_sdk.Ko_Execution` or higher-level SDK classes like `kgrid_sdk.Ko_API` or `kgrid_sdk.CLI`. This requirement ensures that the collection works with KOs containing the SDK `execute` method.
```python
from abdominal_aortic_aneurysm_screening import abdominal_aortic_aneurysm_screening
from cardiovascular_prevention_diet_activity import cardiovascular_prevention_diet_activity
from cardiovascular_prevention_statin_use import cardiovascular_prevention_statin_use
from hypertension_screening import hypertension_screening
from diabetes_screening import diabetes_screening
from high_body_mass_index import high_body_mass_index

from kgrid_sdk.collection import Collection


USPSTF_Collection = Collection("USPSTF_Collection")
USPSTF_Collection.add_knowledge_object( abdominal_aortic_aneurysm_screening )
USPSTF_Collection.add_knowledge_object( cardiovascular_prevention_diet_activity )
USPSTF_Collection.add_knowledge_object( cardiovascular_prevention_statin_use )
USPSTF_Collection.add_knowledge_object( hypertension_screening )
USPSTF_Collection.add_knowledge_object( diabetes_screening )
USPSTF_Collection.add_knowledge_object( high_body_mass_index )
```
Once ready, the collection can be packaged and installed as an external package in any Python application. Here is an example:
```bash
pip install https://github.com/kgrid/python-sdk/releases/download/1.0/uspstf_collection-0.1.0-py3-none-any.whl
```

To execute the collection on a patient's data, install and import the `USPSTF_Collection` (if used as a package). Use the `calculate_for_all` method, passing a JSON input that includes all the required parameters for each knowledge object in the collection.
```python
from uspstf_collection import USPSTF_Collection
import json

patient_data={
    "age":42,
    "bmi":33,
    "bmi_percentile":95.5,
    "has_never_smoked": True,
    "has_cardiovascular_risk_factors":True,
    "ten_year_CVD_risk":8,
    "hypertension":False        
}

result = USPSTF_Collection.calculate_for_all(patient_data)
print(json.dumps(result, indent=4))
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "kgrid-sdk",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.10",
    "maintainer_email": null,
    "keywords": null,
    "author": "Your Name",
    "author_email": "you@example.com",
    "download_url": "https://files.pythonhosted.org/packages/de/7d/5d3c75bebaf4ec50ed3c192a796c80975b66ba8b279b2dac4f4f7a19f7d1/kgrid_sdk-0.0.4.tar.gz",
    "platform": null,
    "description": "# kgrid_sdk\n\n## Implementation\n### Dependency management\nTo manage dependencies and make it possible to only install dependencies required for what you want to use from SDK we decided to use Python's Optional Dependencies rather than creating separate packages for each class.\n\nPackaging each class separately has its advantages, especially if each class represents a distinct, independent feature with unique dependencies which is not the case in our usecase. However, using optional dependencies within a single package can offer significant benefits in terms of usability and maintainability. Here\u2019s a comparison to help decide which approach might work best for you\n\n1. Installation Simplicity\nWith optional dependencies, users install a single package (kgrid_sdk) and add only the extra features they need using extras (e.g., kgrid_sdk[cli]). This is generally simpler and more user-friendly, as all features are accessible through a single, central package\n\n2. Namespace and Code Organization\nKeeping everything in a single package means all classes share the same namespace and project structure, making the API simpler and more cohesive for users. They import from kgrid_sdk package regardless of the feature set they need, which simplifies code and documentation.\n\n3. Code Reusability and Dependency Management\nA single package with optional dependencies is easier to manage if some classes share common dependencies. You only define common dependencies once, and updates propagate across all features. It also avoids versioning conflicts between interdependent features.\n\n4. User Flexibility and Lightweight Installation\nUsers can install only what they need, making the package lightweight without requiring multiple packages. It provides flexibility without adding complexity since extras are not installed by default.\n\n5. Version Management and Compatibility\nYou manage versioning in one central package. Compatibility between the core and extras is generally simpler to control, as everything is versioned and released together.\n\nThe current version of the SDK only has optional dependencies for Ko_API class. If this class is used, these optional dependencies could be installed with the package using `-E api` if you are using `poetry install` or `poetry add` and using `[api]` if you are using `pip install`.\n\n## Usage\nYou can use this package to implement python Knowledge Objects.\n\n### use  kgrid_sdk package as a dependency in your Knowledge Object\nThe `kgrid_sdk` package is available on PyPI and can be easily added as a dependency to your project. Here\u2019s how to include it in your project based on your setup:\n\n#### using Poetry\n- For the base package:\n```bash\npoetry add kgrid_sdk\n```\n\n- If you need to use the KO-API class, include the api extra:\n```\npoetry add kgrid_sdk -E api\n```\n\n#### Using pip\nIf you are not using Poetry, you can install the package with pip:\n- For the base package:\n```\npip install kgrid_sdk\n```\n- To include the KO-API extra:\n```\npip install kgrid_sdk[api] \n```\n### `kgrid_sdk.Ko`\nTo inherit the core functionalities of the SDK, extend the `kgrid_sdk.Ko` class in your knowledge object. For example:\n```python\nfrom kgrid_sdk import Ko\n\nclass Prevent_obesity_morbidity_mortality(Ko):\n    def __init__(self):\n        super().__init__(__package__)\n```\nThis class adds core functionalities to the knowledge object (KO), such as `get_version` and `get_metadata`.\n\n### `kgrid_sdk.Ko_Execution`\nThe `Ko_Execution` class extends `Ko` to include a universal `execute` method for knowledge objects. The constructor of this class accepts an array of knowledge representations (functions), and the `execute` method can optionally take the name of the function to execute. If no function name is provided, the `execute` method defaults to executing the first function. This is particularly useful for KOs with only one knowledge representation. The knowledge representations could be added as static methods of the knowledge object class or could be defined as individual functions.\n```python\nfrom kgrid_sdk import Ko_Execution\n\nclass Pregnancy_healthy_weight_gain(Ko_Execution):\n    def __init__(self):\n        super().__init__(__package__, [self.get_pregnancy_healthy_weight_gain_recommendation])\n\n    @staticmethod\n    def get_pregnancy_healthy_weight_gain_recommendation(pregnant):\n    ...        \n```\nThe `execute` method takes a JSON input, mapping it to the knowledge representation's input parameters using a wrapper. The JSON input may include unrelated parameters, which are ignored by the wrapper.\n\nThe `execute` method is used by the SDK's collection class, API, and CLI services.\n\n### `kgrid_sdk.Ko_API` and `kgrid_sdk.CLI`\nTo implement an API or CLI service for your knowledge object, extend the `kgrid_sdk.Ko_API` and `kgrid_sdk.CLI` classes:\n```python\nfrom kgrid_sdk import Ko_API\nfrom kgrid_sdk import Ko_CLI\n\nclass Abdominal_aortic_aneurysm_screening(Ko_API,Ko_CLI):\n    def __init__(self):\n        super().__init__(__package__, [self.get_abdominal_aortic_aneurysm_screening])\n```\n\nThese classes extend `Ko_Execution` and therefore they include the `execute` method to your knowledge object.\n\nFor a complete example of implementing API, CLI, and activator services using the SDK, see the knowledge objects created in our USPSTF collection repository or refer to the example code below:\n```python\nfrom kgrid_sdk import Ko_API\nfrom kgrid_sdk import Ko_CLI\n\n\nclass Abdominal_aortic_aneurysm_screening(Ko_API,Ko_CLI):\n    def __init__(self):\n        super().__init__(__package__, [self.get_abdominal_aortic_aneurysm_screening])\n        self.add_endpoint(\"/check-inclusion\", tags=[\"abdominal_aortic_aneurysm_screening\"])\n    \n    @staticmethod\n    def get_abdominal_aortic_aneurysm_screening(age, gender, has_never_smoked):\n        \"\"\"\n        Parameters:\n        - age (int): Age of the person.\n        - gender (int): Gender of the individual (0 for women, 1 for men).    \n        - has_never_smoked (bool): Whether this person has never smoked or not.\n        \"\"\"\n        \n        if gender == 1:\n            if age >= 65 and age <= 75 and not has_never_smoked:        \n                return {\n                    \"inclusion\": True,\n                    \"title\": \"Abdominal Aortic Aneurysm: Screening\",\n                    \"recommendation\": \"The USPSTF recommends 1-time screening for abdominal aortic aneurysm (AAA) with ultrasonography in men aged 65 to 75 years who have ever smoked.\",\n                    \"grade\": \"B\",\n                    \"URL\": \"https://www.uspreventiveservicestaskforce.org/uspstf/index.php/recommendation/abdominal-aortic-aneurysm-screening\"\n                    }\n            elif age >= 65 and age <= 75 and has_never_smoked:  \n                return {\n                    \"inclusion\": True,\n                    \"title\": \"Abdominal Aortic Aneurysm: Screening\",\n                    \"recommendation\": \"The USPSTF recommends that clinicians selectively offer screening for AAA with ultrasonography in men aged 65 to 75 years who have never smoked rather than routinely screening all men in this group. Evidence indicates that the net benefit of screening all men in this group is small. In determining whether this service is appropriate in individual cases, patients and clinicians should consider the balance of benefits and harms on the basis of evidence relevant to the patient's medical history, family history, other risk factors, and personal values.\",\n                    \"grade\": \"C\",\n                    \"URL\": \"https://www.uspreventiveservicestaskforce.org/uspstf/index.php/recommendation/abdominal-aortic-aneurysm-screening\"\n                    }\n        elif gender == 0:\n            if has_never_smoked:        \n                return {\n                    \"inclusion\": True,\n                    \"title\": \"Abdominal Aortic Aneurysm: Screening\",\n                    \"recommendation\": \"The USPSTF recommends against routine screening for AAA with ultrasonography in women who have never smoked and have no family history of AAA.\",\n                    \"grade\": \"D\",\n                    \"URL\": \"https://www.uspreventiveservicestaskforce.org/uspstf/index.php/recommendation/abdominal-aortic-aneurysm-screening\"\n                    }\n            elif age >= 65 and age <= 75 and not has_never_smoked:  \n                return {\n                    \"inclusion\": True,\n                    \"title\": \"Abdominal Aortic Aneurysm: Screening\",\n                    \"recommendation\": \"The USPSTF concludes that the current evidence is insufficient to assess the balance of benefits and harms of screening for AAA with ultrasonography in women aged 65 to 75 years who have ever smoked or have a family history of AAA.\",\n                    \"grade\": \"I\",\n                    \"URL\": \"https://www.uspreventiveservicestaskforce.org/uspstf/index.php/recommendation/abdominal-aortic-aneurysm-screening\"\n                    }\n\n            \n        return {\n            \"inclusion\": False,\n            \"title\": \"Abdominal Aortic Aneurysm: Screening\"    \n            }\n            \n\nabdominal_aortic_aneurysm_screening = Abdominal_aortic_aneurysm_screening()\napp = abdominal_aortic_aneurysm_screening.app\n\nabdominal_aortic_aneurysm_screening.define_cli()\nabdominal_aortic_aneurysm_screening.add_argument(\n    \"-a\", \"--age\", type=float, required=True, help=\"Age of the person\"\n)\nabdominal_aortic_aneurysm_screening.add_argument(\n    \"-g\", \"--gender\", type=float, required=True, help=\"Gender of the individual (0 for women, 1 for men).\"\n)\nabdominal_aortic_aneurysm_screening.add_argument(\n    \"--has_never_smoked\", action='store_true', help=\"Indicate if the person has never smoked.\"\n)\nabdominal_aortic_aneurysm_screening.add_argument(\n    \"--has_ever_smoked\", action='store_false', dest='has_never_smoked', help=\"Indicate if the person has ever smoked.\"\n)\n\n\ndef cli():\n    abdominal_aortic_aneurysm_screening.execute_cli()\n\n\ndef apply(input):\n    return abdominal_aortic_aneurysm_screening.execute(input)\n```\n\nNote: The activator example requires a service specification file and a deployment file pointing to the `apply` method. For more details, refer to the [Python Activator](https://github.com/kgrid/python-activator) documentation.\n\n### `kgrid_sdk.Collection`\nThe `kgrid_sdk.Collection` class can be used to create a collection of knowledge objects. Start by importing and creating an instance of the `Collection` class. Use the `add_knowledge_object` method to add knowledge objects that extend `kgrid_sdk.Ko_Execution` or higher-level SDK classes like `kgrid_sdk.Ko_API` or `kgrid_sdk.CLI`. This requirement ensures that the collection works with KOs containing the SDK `execute` method.\n```python\nfrom abdominal_aortic_aneurysm_screening import abdominal_aortic_aneurysm_screening\nfrom cardiovascular_prevention_diet_activity import cardiovascular_prevention_diet_activity\nfrom cardiovascular_prevention_statin_use import cardiovascular_prevention_statin_use\nfrom hypertension_screening import hypertension_screening\nfrom diabetes_screening import diabetes_screening\nfrom high_body_mass_index import high_body_mass_index\n\nfrom kgrid_sdk.collection import Collection\n\n\nUSPSTF_Collection = Collection(\"USPSTF_Collection\")\nUSPSTF_Collection.add_knowledge_object( abdominal_aortic_aneurysm_screening )\nUSPSTF_Collection.add_knowledge_object( cardiovascular_prevention_diet_activity )\nUSPSTF_Collection.add_knowledge_object( cardiovascular_prevention_statin_use )\nUSPSTF_Collection.add_knowledge_object( hypertension_screening )\nUSPSTF_Collection.add_knowledge_object( diabetes_screening )\nUSPSTF_Collection.add_knowledge_object( high_body_mass_index )\n```\nOnce ready, the collection can be packaged and installed as an external package in any Python application. Here is an example:\n```bash\npip install https://github.com/kgrid/python-sdk/releases/download/1.0/uspstf_collection-0.1.0-py3-none-any.whl\n```\n\nTo execute the collection on a patient's data, install and import the `USPSTF_Collection` (if used as a package). Use the `calculate_for_all` method, passing a JSON input that includes all the required parameters for each knowledge object in the collection.\n```python\nfrom uspstf_collection import USPSTF_Collection\nimport json\n\npatient_data={\n    \"age\":42,\n    \"bmi\":33,\n    \"bmi_percentile\":95.5,\n    \"has_never_smoked\": True,\n    \"has_cardiovascular_risk_factors\":True,\n    \"ten_year_CVD_risk\":8,\n    \"hypertension\":False        \n}\n\nresult = USPSTF_Collection.calculate_for_all(patient_data)\nprint(json.dumps(result, indent=4))\n```\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "SDK for KGrid 2.0 Knowledge objects",
    "version": "0.0.4",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6c11199275ac22ccc7686bde16ed903c9540e849dc55ade9d113f04eaa02b5b8",
                "md5": "2460e350896feff708f86951ec2066c6",
                "sha256": "c598683869fcc12f81d874f6cdf2e53a86f5f119ed3f33bb60426e89ae87703d"
            },
            "downloads": -1,
            "filename": "kgrid_sdk-0.0.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2460e350896feff708f86951ec2066c6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.10",
            "size": 8307,
            "upload_time": "2024-11-21T20:55:30",
            "upload_time_iso_8601": "2024-11-21T20:55:30.828571Z",
            "url": "https://files.pythonhosted.org/packages/6c/11/199275ac22ccc7686bde16ed903c9540e849dc55ade9d113f04eaa02b5b8/kgrid_sdk-0.0.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "de7d5d3c75bebaf4ec50ed3c192a796c80975b66ba8b279b2dac4f4f7a19f7d1",
                "md5": "fc250e9f404521df9b3b77e838cfae7c",
                "sha256": "7488aecbca395511f248b1f21a29186114c43a656102d408eafdbcd97cf2f978"
            },
            "downloads": -1,
            "filename": "kgrid_sdk-0.0.4.tar.gz",
            "has_sig": false,
            "md5_digest": "fc250e9f404521df9b3b77e838cfae7c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.10",
            "size": 9530,
            "upload_time": "2024-11-21T20:55:31",
            "upload_time_iso_8601": "2024-11-21T20:55:31.949805Z",
            "url": "https://files.pythonhosted.org/packages/de/7d/5d3c75bebaf4ec50ed3c192a796c80975b66ba8b279b2dac4f4f7a19f7d1/kgrid_sdk-0.0.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-21 20:55:31",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "kgrid-sdk"
}
        
Elapsed time: 0.49154s