PyQvd


NamePyQvd JSON
Version 1.1.3 PyPI version JSON
download
home_pageNone
SummaryUtility library for reading/writing Qlik View Data (QVD) files in Python.
upload_time2024-05-16 15:07:00
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT License Copyright (c) 2024 Constantin Müller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords qlik qvd qlik sense qlik view pandas
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PyQvd

> Utility library for reading/writing Qlik View Data (QVD) files in Python.

The _PyQvd_ library provides a simple API for reading/writing Qlik View Data (QVD) files in Python.
Using this library, it is possible to parse the binary QVD file format and convert it to a Python object
structure or vice versa.

---

- [Install](#install)
- [Usage](#usage)
- [QVD File Format](#qvd-file-format)
  - [XML Header](#xml-header)
  - [Symbol Table](#symbol-table)
  - [Index Table](#index-table)
- [API Documentation](#api-documentation)
  - [QvdDataFrame](#qvddataframe)
    - [`@staticmethod from_qvd(path: str) -> QvdDataFrame`](#staticmethod-from_qvdpath-str---qvddataframe)
    - [`@staticmethod from_stream(source: BinaryIO) -> QvdDataFrame`](#staticmethod-from_streamsource-binaryio---qvddataframe)
    - [`@staticmethod from_dict(data: Dict[str, List[any]]) -> QvdDataFrame`](#staticmethod-from_dictdata-dictstr-listany---qvddataframe)
    - [`@staticmethod from_pandas(data: pandas.DataFrame) -> QvdDataFrame`](#staticmethod-from_pandasdata-pandasdataframe---qvddataframe)
    - [`head(n: int) -> QvdDataFrame`](#headn-int---qvddataframe)
    - [`tail(n: int) -> QvdDataFrame`](#tailn-int---qvddataframe)
    - [`select(*args: str) -> QvdDataFrame`](#selectargs-str---qvddataframe)
    - [`rows(*args: int) -> QvdDataFrame`](#rowsargs-int---qvddataframe)
    - [`at(row: int, column: str) -> any`](#atrow-int-column-str---any)
    - [`to_dict() -> Dict[str, List[any]]`](#to_dict---dictstr-listany)
    - [`to_qvd(path: str) -> None`](#to_qvdpath-str---none)
    - [`to_stream(target: BinaryIO) -> None`](#to_streamtarget-binaryio---none)
    - [`to_pandas() -> pandas.DataFrame`](#to_pandas---pandasdataframe)
- [License](#license)
  - [Forbidden](#forbidden)

---

## Install

_PyQvd_ is a Python library available through [pypi](https://pypi.org/). The recommended way to install and maintain _PyQvd_ as a dependency is through the package installer (PIP). Before installing this library, download and install Python.

You can get _PyQvd_ using the following command:

```bash
pip install PyQvd
```

## Usage

Below is a quick example how to use _PyQvd_.

```python
from pyqvd import QvdDataFrame

df = QvdDataFrame.from_qvd('sample.qvd')
print(df.head(5))
```

The above example loads the _PyQvd_ library and parses an example QVD file. A QVD file is typically loaded using the static
`QvdDataFrame.from_qvd` function of the `QvdDataFrame` class itself. After loading the file's content, numerous methods and properties are available to work with the parsed data.

## QVD File Format

The QVD file format is a binary file format that is used by QlikView to store data. The format is proprietary. However,
the format is well documented and can be parsed without the need of a QlikView installation. In fact, a QVD file consists
of three parts: a XML header, and two binary parts, the symbol and the index table. The XML header contains meta information
about the QVD file, such as the number of data records and the names of the fields. The symbol table contains the actual
distinct values of the fields. The index table contains the actual data records. The index table is a list of indices
which point to values in the symbol table.

### XML Header

The XML header contains meta information about the QVD file. The header is always located at the beginning of the file and
is in human readable text format. The header contains information about the number of data records, the names of the fields,
and the data types of the fields.

### Symbol Table

The symbol table contains the distinct/unique values of the fields and is located directly after the XML header. The order
of columns in the symbol table corresponds to the order of the fields in the XML header. The length and offset of the
symbol sections of each column are also stored in the XML header. Each symbol section consist of the unique symbols of the
respective column. The type of a single symbol is determined by a type byte prefixed to the respective symbol value. The
following type of symbols are supported:

| Code | Type         | Description                                                                                   |
| ---- | ------------ | --------------------------------------------------------------------------------------------- |
| 1    | Integer      | signed 4-byte integer (little endian)                                                         |
| 2    | Float        | signed 8-byte IEEE floating point number (little endian)                                      |
| 4    | String       | null terminated string                                                                        |
| 5    | Dual Integer | signed 4-byte integer (little endian) followed by a null terminated string                    |
| 6    | Dual Float   | signed 8-byte IEEE floating point number (little endian) followed by a null terminated string |

### Index Table

After the symbol table, the index table follows. The index table contains the actual data records. The index table contains
binary indices that refrences to the values of each row in the symbol table. The order of the columns in the index table
corresponds to the order of the fields in the XML header. Hence, the index table does not contain the actual values of a
data record, but only the indices that point to the values in the symbol table.

## API Documentation

### QvdDataFrame

The `QvdDataFrame` class represents the data frame stored inside of a finally parsed QVD file. It provides a high-level abstraction access to the QVD file content. This includes meta information as well as access to the actual data records.

| Property  | Type              | Description                                                                                 |
| --------- | ----------------- | ------------------------------------------------------------------------------------------- |
| `shape`   | `tuple[int, int]` | The shape of the data frame. First value is number of rows, second value number of columns. |
| `data`    | `list[list[any]]` | The actual data. The first dimension represents the single rows.                            |
| `columns` | `list[str]`       | The names of the fields that are contained in the QVD file.                                 |

#### `@staticmethod from_qvd(path: str) -> QvdDataFrame`

The static method `QvdDataFrame.from_qvd` loads a QVD file from the given path and parses it. The method returns a `QvdDataFrame` instance.

#### `@staticmethod from_stream(source: BinaryIO) -> QvdDataFrame`

The static method `QvdDataFrame.from_stream` loads a QVD file from the given binary stream. The method returns a `QvdDataFrame` instance.

#### `@staticmethod from_dict(data: Dict[str, List[any]]) -> QvdDataFrame`

The static method `QvdDataFrame.from_dict` constructs a data frame from a dictionary. The dictionary must contain the columns and the actual data as properties. The columns property is an array of strings that contains the names of the fields in the QVD file. The data property is an array of arrays that contains the actual data records. The order of the values in the inner arrays corresponds to the order of the fields in the QVD file.

#### `@staticmethod from_pandas(data: pandas.DataFrame) -> QvdDataFrame`

The static method `QvdDataFrame.from_pandas` constructs a data frame from a pandas data frame.

#### `head(n: int) -> QvdDataFrame`

The method `head` returns the first `n` rows of the data frame.

#### `tail(n: int) -> QvdDataFrame`

The method `tail` returns the last `n` rows of the data frame.

#### `select(*args: str) -> QvdDataFrame`

The method `select` returns a new data frame that contains only the specified columns.

#### `rows(*args: int) -> QvdDataFrame`

The method `rows` returns a new data frame that contains only the specified rows.

#### `at(row: int, column: str) -> any`

The method `at` returns the value at the specified row and column.

#### `to_dict() -> Dict[str, List[any]]`

The method `to_dict` returns the data frame as a dictionary. The dictionary contains the columns and the actual data as properties. The columns property is an array of strings that contains the names of the fields in the QVD file. The data property is an array of arrays that contains the actual data records. The order of the values in the inner arrays corresponds to the order of the fields in the QVD file.

#### `to_qvd(path: str) -> None`

The method `to_qvd` writes the data frame to a QVD file at the specified path.

#### `to_stream(target: BinaryIO) -> None`

The method `to_stream` writes the data frame as a QVD file to a binary stream.

#### `to_pandas() -> pandas.DataFrame`

The method `to_pandas` returns the data frame as a pandas data frame.

## License

Copyright (c) 2024 Constantin Müller

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

[MIT License](https://opensource.org/licenses/MIT) or [LICENSE](LICENSE) for
more details.

### Forbidden

**Hold Liable**: Software is provided without warranty and the software
author/license owner cannot be held liable for damages.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "PyQvd",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "qlik, qvd, qlik sense, qlik view, pandas",
    "author": null,
    "author_email": "Constantin M\u00fcller <info@mueller-constantin.de>",
    "download_url": "https://files.pythonhosted.org/packages/f6/29/3bc7b8852bb65dbcd19818a2288b610fb9ee59306b439e3f906dc3beca8a/pyqvd-1.1.3.tar.gz",
    "platform": null,
    "description": "# PyQvd\r\n\r\n> Utility library for reading/writing Qlik View Data (QVD) files in Python.\r\n\r\nThe _PyQvd_ library provides a simple API for reading/writing Qlik View Data (QVD) files in Python.\r\nUsing this library, it is possible to parse the binary QVD file format and convert it to a Python object\r\nstructure or vice versa.\r\n\r\n---\r\n\r\n- [Install](#install)\r\n- [Usage](#usage)\r\n- [QVD File Format](#qvd-file-format)\r\n  - [XML Header](#xml-header)\r\n  - [Symbol Table](#symbol-table)\r\n  - [Index Table](#index-table)\r\n- [API Documentation](#api-documentation)\r\n  - [QvdDataFrame](#qvddataframe)\r\n    - [`@staticmethod from_qvd(path: str) -> QvdDataFrame`](#staticmethod-from_qvdpath-str---qvddataframe)\r\n    - [`@staticmethod from_stream(source: BinaryIO) -> QvdDataFrame`](#staticmethod-from_streamsource-binaryio---qvddataframe)\r\n    - [`@staticmethod from_dict(data: Dict[str, List[any]]) -> QvdDataFrame`](#staticmethod-from_dictdata-dictstr-listany---qvddataframe)\r\n    - [`@staticmethod from_pandas(data: pandas.DataFrame) -> QvdDataFrame`](#staticmethod-from_pandasdata-pandasdataframe---qvddataframe)\r\n    - [`head(n: int) -> QvdDataFrame`](#headn-int---qvddataframe)\r\n    - [`tail(n: int) -> QvdDataFrame`](#tailn-int---qvddataframe)\r\n    - [`select(*args: str) -> QvdDataFrame`](#selectargs-str---qvddataframe)\r\n    - [`rows(*args: int) -> QvdDataFrame`](#rowsargs-int---qvddataframe)\r\n    - [`at(row: int, column: str) -> any`](#atrow-int-column-str---any)\r\n    - [`to_dict() -> Dict[str, List[any]]`](#to_dict---dictstr-listany)\r\n    - [`to_qvd(path: str) -> None`](#to_qvdpath-str---none)\r\n    - [`to_stream(target: BinaryIO) -> None`](#to_streamtarget-binaryio---none)\r\n    - [`to_pandas() -> pandas.DataFrame`](#to_pandas---pandasdataframe)\r\n- [License](#license)\r\n  - [Forbidden](#forbidden)\r\n\r\n---\r\n\r\n## Install\r\n\r\n_PyQvd_ is a Python library available through [pypi](https://pypi.org/). The recommended way to install and maintain _PyQvd_ as a dependency is through the package installer (PIP). Before installing this library, download and install Python.\r\n\r\nYou can get _PyQvd_ using the following command:\r\n\r\n```bash\r\npip install PyQvd\r\n```\r\n\r\n## Usage\r\n\r\nBelow is a quick example how to use _PyQvd_.\r\n\r\n```python\r\nfrom pyqvd import QvdDataFrame\r\n\r\ndf = QvdDataFrame.from_qvd('sample.qvd')\r\nprint(df.head(5))\r\n```\r\n\r\nThe above example loads the _PyQvd_ library and parses an example QVD file. A QVD file is typically loaded using the static\r\n`QvdDataFrame.from_qvd` function of the `QvdDataFrame` class itself. After loading the file's content, numerous methods and properties are available to work with the parsed data.\r\n\r\n## QVD File Format\r\n\r\nThe QVD file format is a binary file format that is used by QlikView to store data. The format is proprietary. However,\r\nthe format is well documented and can be parsed without the need of a QlikView installation. In fact, a QVD file consists\r\nof three parts: a XML header, and two binary parts, the symbol and the index table. The XML header contains meta information\r\nabout the QVD file, such as the number of data records and the names of the fields. The symbol table contains the actual\r\ndistinct values of the fields. The index table contains the actual data records. The index table is a list of indices\r\nwhich point to values in the symbol table.\r\n\r\n### XML Header\r\n\r\nThe XML header contains meta information about the QVD file. The header is always located at the beginning of the file and\r\nis in human readable text format. The header contains information about the number of data records, the names of the fields,\r\nand the data types of the fields.\r\n\r\n### Symbol Table\r\n\r\nThe symbol table contains the distinct/unique values of the fields and is located directly after the XML header. The order\r\nof columns in the symbol table corresponds to the order of the fields in the XML header. The length and offset of the\r\nsymbol sections of each column are also stored in the XML header. Each symbol section consist of the unique symbols of the\r\nrespective column. The type of a single symbol is determined by a type byte prefixed to the respective symbol value. The\r\nfollowing type of symbols are supported:\r\n\r\n| Code | Type         | Description                                                                                   |\r\n| ---- | ------------ | --------------------------------------------------------------------------------------------- |\r\n| 1    | Integer      | signed 4-byte integer (little endian)                                                         |\r\n| 2    | Float        | signed 8-byte IEEE floating point number (little endian)                                      |\r\n| 4    | String       | null terminated string                                                                        |\r\n| 5    | Dual Integer | signed 4-byte integer (little endian) followed by a null terminated string                    |\r\n| 6    | Dual Float   | signed 8-byte IEEE floating point number (little endian) followed by a null terminated string |\r\n\r\n### Index Table\r\n\r\nAfter the symbol table, the index table follows. The index table contains the actual data records. The index table contains\r\nbinary indices that refrences to the values of each row in the symbol table. The order of the columns in the index table\r\ncorresponds to the order of the fields in the XML header. Hence, the index table does not contain the actual values of a\r\ndata record, but only the indices that point to the values in the symbol table.\r\n\r\n## API Documentation\r\n\r\n### QvdDataFrame\r\n\r\nThe `QvdDataFrame` class represents the data frame stored inside of a finally parsed QVD file. It provides a high-level abstraction access to the QVD file content. This includes meta information as well as access to the actual data records.\r\n\r\n| Property  | Type              | Description                                                                                 |\r\n| --------- | ----------------- | ------------------------------------------------------------------------------------------- |\r\n| `shape`   | `tuple[int, int]` | The shape of the data frame. First value is number of rows, second value number of columns. |\r\n| `data`    | `list[list[any]]` | The actual data. The first dimension represents the single rows.                            |\r\n| `columns` | `list[str]`       | The names of the fields that are contained in the QVD file.                                 |\r\n\r\n#### `@staticmethod from_qvd(path: str) -> QvdDataFrame`\r\n\r\nThe static method `QvdDataFrame.from_qvd` loads a QVD file from the given path and parses it. The method returns a `QvdDataFrame` instance.\r\n\r\n#### `@staticmethod from_stream(source: BinaryIO) -> QvdDataFrame`\r\n\r\nThe static method `QvdDataFrame.from_stream` loads a QVD file from the given binary stream. The method returns a `QvdDataFrame` instance.\r\n\r\n#### `@staticmethod from_dict(data: Dict[str, List[any]]) -> QvdDataFrame`\r\n\r\nThe static method `QvdDataFrame.from_dict` constructs a data frame from a dictionary. The dictionary must contain the columns and the actual data as properties. The columns property is an array of strings that contains the names of the fields in the QVD file. The data property is an array of arrays that contains the actual data records. The order of the values in the inner arrays corresponds to the order of the fields in the QVD file.\r\n\r\n#### `@staticmethod from_pandas(data: pandas.DataFrame) -> QvdDataFrame`\r\n\r\nThe static method `QvdDataFrame.from_pandas` constructs a data frame from a pandas data frame.\r\n\r\n#### `head(n: int) -> QvdDataFrame`\r\n\r\nThe method `head` returns the first `n` rows of the data frame.\r\n\r\n#### `tail(n: int) -> QvdDataFrame`\r\n\r\nThe method `tail` returns the last `n` rows of the data frame.\r\n\r\n#### `select(*args: str) -> QvdDataFrame`\r\n\r\nThe method `select` returns a new data frame that contains only the specified columns.\r\n\r\n#### `rows(*args: int) -> QvdDataFrame`\r\n\r\nThe method `rows` returns a new data frame that contains only the specified rows.\r\n\r\n#### `at(row: int, column: str) -> any`\r\n\r\nThe method `at` returns the value at the specified row and column.\r\n\r\n#### `to_dict() -> Dict[str, List[any]]`\r\n\r\nThe method `to_dict` returns the data frame as a dictionary. The dictionary contains the columns and the actual data as properties. The columns property is an array of strings that contains the names of the fields in the QVD file. The data property is an array of arrays that contains the actual data records. The order of the values in the inner arrays corresponds to the order of the fields in the QVD file.\r\n\r\n#### `to_qvd(path: str) -> None`\r\n\r\nThe method `to_qvd` writes the data frame to a QVD file at the specified path.\r\n\r\n#### `to_stream(target: BinaryIO) -> None`\r\n\r\nThe method `to_stream` writes the data frame as a QVD file to a binary stream.\r\n\r\n#### `to_pandas() -> pandas.DataFrame`\r\n\r\nThe method `to_pandas` returns the data frame as a pandas data frame.\r\n\r\n## License\r\n\r\nCopyright (c) 2024 Constantin M\u00fcller\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n\r\n[MIT License](https://opensource.org/licenses/MIT) or [LICENSE](LICENSE) for\r\nmore details.\r\n\r\n### Forbidden\r\n\r\n**Hold Liable**: Software is provided without warranty and the software\r\nauthor/license owner cannot be held liable for damages.\r\n",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) 2024 Constantin M\u00fcller  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ",
    "summary": "Utility library for reading/writing Qlik View Data (QVD) files in Python.",
    "version": "1.1.3",
    "project_urls": {
        "Homepage": "https://github.com/MuellerConstantin/PyQvd",
        "Issues": "https://github.com/MuellerConstantin/PyQvd/issues",
        "Repository": "https://github.com/MuellerConstantin/PyQvd.git"
    },
    "split_keywords": [
        "qlik",
        " qvd",
        " qlik sense",
        " qlik view",
        " pandas"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7b9c3e58629b2781c595dbecc74154ffec3bef46b28b0bfa1bb59c4af6c9a55f",
                "md5": "ce5c2ce4a0c86f94a363ca6dd665e265",
                "sha256": "b1c3c4f3a00f73184de20455cfbb7f8e76a7900ee12ac13f8dcbf089c3b2aa90"
            },
            "downloads": -1,
            "filename": "PyQvd-1.1.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ce5c2ce4a0c86f94a363ca6dd665e265",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 12934,
            "upload_time": "2024-05-16T15:06:58",
            "upload_time_iso_8601": "2024-05-16T15:06:58.624419Z",
            "url": "https://files.pythonhosted.org/packages/7b/9c/3e58629b2781c595dbecc74154ffec3bef46b28b0bfa1bb59c4af6c9a55f/PyQvd-1.1.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6293bc7b8852bb65dbcd19818a2288b610fb9ee59306b439e3f906dc3beca8a",
                "md5": "0534faa6a41a06e364adbef5e67ccedf",
                "sha256": "2d1c3d704fcc791581b83a673de6e0738525fef8ec86f8973440f4e0938aadc2"
            },
            "downloads": -1,
            "filename": "pyqvd-1.1.3.tar.gz",
            "has_sig": false,
            "md5_digest": "0534faa6a41a06e364adbef5e67ccedf",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 12499,
            "upload_time": "2024-05-16T15:07:00",
            "upload_time_iso_8601": "2024-05-16T15:07:00.985572Z",
            "url": "https://files.pythonhosted.org/packages/f6/29/3bc7b8852bb65dbcd19818a2288b610fb9ee59306b439e3f906dc3beca8a/pyqvd-1.1.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-16 15:07:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "MuellerConstantin",
    "github_project": "PyQvd",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "pyqvd"
}
        
Elapsed time: 0.34180s