ATL-Tools


NameATL-Tools JSON
Version 1.2.2 PyPI version JSON
download
home_pageNone
SummaryAI-Tianlong的Tools打包,开箱即用, 包含ATL_path和ATL_gdal,可用于文件夹创建、文件搜索、遥感图像处理
upload_time2024-07-25 02:51:04
maintainerNone
docs_urlNone
authorNone
requires_pythonNone
licenseMIT License
keywords atl_tools gdal ai-tianlong chinese
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ATL_Tools 使用指南
最新版本 v1.2.2
## 0. 简介
ATL_Tools 是一个由 [AI-Tianlong【GitHub】](https://github.com/AI-Tianlong)开发的工具集合,包含一些便利的小工具。
如果您有新的模块添加,或者对现有模块有改进意见,欢迎提交 PR 至  [ATL_Tools_pypi 【GitHub Repo】](https://github.com/AI-Tianlong/ATL_Tools_pypi).
## 1. 文件夹/数据绝对路径搜索工具
加载方式:

```python
from ATL_Tools import mkdir_or_exist, find_data_list
```

## 2. 遥感图像处理工具:
加载方式:
```python
from ATL_Tools.ATL_gdal import (
    read_img_to_array_with_info, # ✔读取影像为数组并返回信息
    read_img_to_array,  # ✔读取影像为数组
    save_ds_to_tif,     # ✔将GDAL dataset数据格式写入tif保存
    save_array_to_tif,  # 将数组格式写入tif保存
    read_img_get_geo,   # ✔计算影像角点的地理坐标或投影坐标
    ds_get_img_geo,     # 读取dataset格式,计算影像角点的地理坐标或投影坐标
    pix_to_geo,         # 计算影像某一像素点的地理坐标或投影坐标
    geo_to_pix,         # 根据GDAL的仿射变换参数模型将给定的投影或地理坐标转为影像图上坐标(行列号)
    Mosaic_all_imgs,    # ✔将指定路径文件夹下的tif影像全部镶嵌到一张影像上
    Mosaic_2img_to_one, # 将两幅影像镶嵌至同一幅影像
    raster_overlap,     # 两个栅格数据集取重叠区或求交集(仅测试方形影像)
    crop_tif_with_json_zero, # ✔将带有坐标的图像按照json矢量进行裁切,无数据区域为0
    crop_tif_with_json_nan,  # ✔将带有坐标的图像按照json矢量进行裁切,无数据区域为nan
    Merge_multi_json,   # ✔将多个小的json合并为一个大的json,
    resample_image,     # ✔使用GDAL对图像进行重采样
    shp_to_geojson,     # ✔将shp文件转为geojson文件
    clip_big_image,     # 将大图裁切为小图,支持重叠
                        )
```
## 3. 使用方法

### 3.1 ATL_path 文件夹工具

使用程序示例:  
1. 创建文件夹
    ```python
    from ATL_Tools import mkdir_or_exist, find_data_list
    #创建文件夹
    mkdir_or_exist('新文件夹名称')
    #获取文件夹内所有后缀为.jpg的文件绝对路径
    ```
2. 获取文件夹内所有后缀为 `.jpg` 的文件绝对路径
    ```python
    img_lists = find_data_list(img_root_path='数据集文件夹路径', suffix ='.jpg')
    ```
### 3.2 ATL_gdal 遥感图像处理工具
使用程序示例:
1. 根据矢量批量裁切影像
    ```python
    from ATL_Tools import mkdir_or_exist, find_data_list
    from ATL_Tools.ATL_gdal import crop_tif_with_json_nan
    from tqdm import tqdm
    import os 

    img_path_all = '../推理出的结果_24类_RGB/'
    output_path_all = '../推理出的结果_24类_RGB_crop'
    json_path_all = '../要推理的json/'
    mkdir_or_exist(output_path_all)
    img_list = find_data_list(img_path_all, suffix='.tif')


    for img_path in tqdm(img_list, colour='Green'):

        img_output_path = os.path.join(output_path_all, os.path.basename(img_path))
        json_path = os.path.join(json_path_all, os.path.basename(img_path).split('_')[-1].replace('.tif', '.json'))
        print(f'正在裁切: {img_output_path},json: {json_path}')
        crop_tif_with_json_nan(img_path, img_output_path, json_path)
    ```

## 4. 版本更新日志
- 2023-12-06  v1.0.2  修复 README 中显示问题。
- 2023-12-06  v1.0.3  修改项目名称为 ATL_Tools。
- 2024-04-03  v1.0.6  增加 `ATL_gdal` 模块,用于处理遥感影像。
- 2024-04-09  v1.0.7  修复 `ATL_gdal` 模块中对于 `ATL_path` 的引用,`__init__.py` 注释掉`from ATL_gdal import *`, 可不安装 gdal 使用 ATL_Tools
- 2024-04-16  v1.0.8  修复 `ValueError: cannot convert float NaN to integer` in ATL_gdal Line 371
- 2024-04-16  v1.0.9  修复 `Mosaic_all_images()`对于 mosaic RGB uint8 标签的支持,优化`find_data_list()`函数显示,优化`_init_.py`, 优化`Readme.md`显示
- 2024-04-16  v1.1.0  pypi 页面增加`ATL_Tools` Github 贡献地址。
- 2024-04-16  v1.1.1  `crop_tif_with_json_nan()`增加可选参数`add_alpha_chan: bool`控制是否为 RGB 标签增加 alpha 通道
- 2024-04-16  v1.1.2  修复 ATL_gdal Line 397 变量使用错误
- 2024-04-18  v1.1.3  修复 ATL_gdal Mosaic 中对 float32 图像背景设置为 nan 的支持
- 2024-04-24  v1.1.4  修复 ATL_gdal Mosaic 中指定 img_list 功能的支持,可以指定 Mosaic 的图像,增加`shp`转换为`Geojson`的功能函数`shp_to_geojson()`
- 2024-05-06  v1.1.5  修复 ATL_gdal 中 `Mosaic_all_imgs()`函数在某些情况下,可能导致计算出的合并后的大图尺寸要比嵌入的小图位置要小几个像素,在 line 340 代码中,给图像的高宽各 +50 像素,暂时避免了这个问题。
- 2024-05-20  v1.1.6  ATL_gdal 中 增加 `cut_image_with_overlap()`支持将大图裁切成指定尺寸的小图,并带有坐标。
- 2024-05-28  v1.1.7  ATL_gdal 中 修改 v1.1.6 中新增函数 为`clip_big_image()`。ATL_gdal 中`crop_tif_with_json_zero()`和`crop_tif_with_json_nan()`支持传入参数 `img_path(str)` 或 `img_path(gdal.Dataset)`。
- 2024-06-17  v1.1.9  ATL_gdal 中修复 `crop_tif_with_json_zero()`和`crop_tif_with_json_nan()` 对于传入`img_path(gdal.Dataset)`而导致错误的路径打印。
- 2024-06-26  v1.2.0  ATL_gdal 中 `resample_image()`增加`new_rows`和`new_cols`可选参数,可以scater_factor缩放因子或指定高宽进行重采样。增加`resampleAlg`可选参数,支持通过`gdal`的重采样算法进行重采样。
- 2024-06-26  v1.2.1  ATL_gdal 中修复`resample_image()`功能中,`new_rows`,`new_cols`,`scale_facotr`为`None`
- 2024-07-24  v1.2.2  ATL_gdal 中`crop_tif_with_json_zero()`增加`nodata_value`参数,支持指定输出中无效数据的值,可在标签包含0时,指定无数据值为255。

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ATL-Tools",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "ATL_Tools, GDAL, AI-Tianlong, Chinese",
    "author": null,
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/94/c9/113f591a72f4493afa54b0c7446c1230fcf588363fe10f70ab465f823694/atl_tools-1.2.2.tar.gz",
    "platform": null,
    "description": "# ATL_Tools \u4f7f\u7528\u6307\u5357\n\u6700\u65b0\u7248\u672c v1.2.2\n## 0. \u7b80\u4ecb\nATL_Tools \u662f\u4e00\u4e2a\u7531 [AI-Tianlong\u3010GitHub\u3011](https://github.com/AI-Tianlong)\u5f00\u53d1\u7684\u5de5\u5177\u96c6\u5408\uff0c\u5305\u542b\u4e00\u4e9b\u4fbf\u5229\u7684\u5c0f\u5de5\u5177\u3002\n\u5982\u679c\u60a8\u6709\u65b0\u7684\u6a21\u5757\u6dfb\u52a0\uff0c\u6216\u8005\u5bf9\u73b0\u6709\u6a21\u5757\u6709\u6539\u8fdb\u610f\u89c1\uff0c\u6b22\u8fce\u63d0\u4ea4 PR \u81f3  [ATL_Tools_pypi \u3010GitHub Repo\u3011](https://github.com/AI-Tianlong/ATL_Tools_pypi).\n## 1. \u6587\u4ef6\u5939/\u6570\u636e\u7edd\u5bf9\u8def\u5f84\u641c\u7d22\u5de5\u5177\n\u52a0\u8f7d\u65b9\u5f0f:\n\n```python\nfrom ATL_Tools import mkdir_or_exist, find_data_list\n```\n\n## 2. \u9065\u611f\u56fe\u50cf\u5904\u7406\u5de5\u5177:\n\u52a0\u8f7d\u65b9\u5f0f:\n```python\nfrom ATL_Tools.ATL_gdal import (\n    read_img_to_array_with_info, # \u2714\u8bfb\u53d6\u5f71\u50cf\u4e3a\u6570\u7ec4\u5e76\u8fd4\u56de\u4fe1\u606f\n    read_img_to_array,  # \u2714\u8bfb\u53d6\u5f71\u50cf\u4e3a\u6570\u7ec4\n    save_ds_to_tif,     # \u2714\u5c06GDAL dataset\u6570\u636e\u683c\u5f0f\u5199\u5165tif\u4fdd\u5b58\n    save_array_to_tif,  # \u5c06\u6570\u7ec4\u683c\u5f0f\u5199\u5165tif\u4fdd\u5b58\n    read_img_get_geo,   # \u2714\u8ba1\u7b97\u5f71\u50cf\u89d2\u70b9\u7684\u5730\u7406\u5750\u6807\u6216\u6295\u5f71\u5750\u6807\n    ds_get_img_geo,     # \u8bfb\u53d6dataset\u683c\u5f0f\uff0c\u8ba1\u7b97\u5f71\u50cf\u89d2\u70b9\u7684\u5730\u7406\u5750\u6807\u6216\u6295\u5f71\u5750\u6807\n    pix_to_geo,         # \u8ba1\u7b97\u5f71\u50cf\u67d0\u4e00\u50cf\u7d20\u70b9\u7684\u5730\u7406\u5750\u6807\u6216\u6295\u5f71\u5750\u6807\n    geo_to_pix,         # \u6839\u636eGDAL\u7684\u4eff\u5c04\u53d8\u6362\u53c2\u6570\u6a21\u578b\u5c06\u7ed9\u5b9a\u7684\u6295\u5f71\u6216\u5730\u7406\u5750\u6807\u8f6c\u4e3a\u5f71\u50cf\u56fe\u4e0a\u5750\u6807\uff08\u884c\u5217\u53f7\uff09\n    Mosaic_all_imgs,    # \u2714\u5c06\u6307\u5b9a\u8def\u5f84\u6587\u4ef6\u5939\u4e0b\u7684tif\u5f71\u50cf\u5168\u90e8\u9576\u5d4c\u5230\u4e00\u5f20\u5f71\u50cf\u4e0a\n    Mosaic_2img_to_one, # \u5c06\u4e24\u5e45\u5f71\u50cf\u9576\u5d4c\u81f3\u540c\u4e00\u5e45\u5f71\u50cf\n    raster_overlap,     # \u4e24\u4e2a\u6805\u683c\u6570\u636e\u96c6\u53d6\u91cd\u53e0\u533a\u6216\u6c42\u4ea4\u96c6\uff08\u4ec5\u6d4b\u8bd5\u65b9\u5f62\u5f71\u50cf\uff09\n    crop_tif_with_json_zero, # \u2714\u5c06\u5e26\u6709\u5750\u6807\u7684\u56fe\u50cf\u6309\u7167json\u77e2\u91cf\u8fdb\u884c\u88c1\u5207,\u65e0\u6570\u636e\u533a\u57df\u4e3a0\n    crop_tif_with_json_nan,  # \u2714\u5c06\u5e26\u6709\u5750\u6807\u7684\u56fe\u50cf\u6309\u7167json\u77e2\u91cf\u8fdb\u884c\u88c1\u5207,\u65e0\u6570\u636e\u533a\u57df\u4e3anan\n    Merge_multi_json,   # \u2714\u5c06\u591a\u4e2a\u5c0f\u7684json\u5408\u5e76\u4e3a\u4e00\u4e2a\u5927\u7684json,\n    resample_image,     # \u2714\u4f7f\u7528GDAL\u5bf9\u56fe\u50cf\u8fdb\u884c\u91cd\u91c7\u6837\n    shp_to_geojson,     # \u2714\u5c06shp\u6587\u4ef6\u8f6c\u4e3ageojson\u6587\u4ef6\n    clip_big_image,     # \u5c06\u5927\u56fe\u88c1\u5207\u4e3a\u5c0f\u56fe\uff0c\u652f\u6301\u91cd\u53e0\n                        )\n```\n## 3. \u4f7f\u7528\u65b9\u6cd5\n\n### 3.1 ATL_path \u6587\u4ef6\u5939\u5de5\u5177\n\n\u4f7f\u7528\u7a0b\u5e8f\u793a\u4f8b:  \n1. \u521b\u5efa\u6587\u4ef6\u5939\n    ```python\n    from ATL_Tools import mkdir_or_exist, find_data_list\n    #\u521b\u5efa\u6587\u4ef6\u5939\n    mkdir_or_exist('\u65b0\u6587\u4ef6\u5939\u540d\u79f0')\n    #\u83b7\u53d6\u6587\u4ef6\u5939\u5185\u6240\u6709\u540e\u7f00\u4e3a.jpg\u7684\u6587\u4ef6\u7edd\u5bf9\u8def\u5f84\n    ```\n2. \u83b7\u53d6\u6587\u4ef6\u5939\u5185\u6240\u6709\u540e\u7f00\u4e3a `.jpg` \u7684\u6587\u4ef6\u7edd\u5bf9\u8def\u5f84\n    ```python\n    img_lists = find_data_list(img_root_path='\u6570\u636e\u96c6\u6587\u4ef6\u5939\u8def\u5f84', suffix ='.jpg')\n    ```\n### 3.2 ATL_gdal \u9065\u611f\u56fe\u50cf\u5904\u7406\u5de5\u5177\n\u4f7f\u7528\u7a0b\u5e8f\u793a\u4f8b\uff1a\n1. \u6839\u636e\u77e2\u91cf\u6279\u91cf\u88c1\u5207\u5f71\u50cf\n    ```python\n    from ATL_Tools import mkdir_or_exist, find_data_list\n    from ATL_Tools.ATL_gdal import crop_tif_with_json_nan\n    from tqdm import tqdm\n    import os \n\n    img_path_all = '../\u63a8\u7406\u51fa\u7684\u7ed3\u679c_24\u7c7b_RGB/'\n    output_path_all = '../\u63a8\u7406\u51fa\u7684\u7ed3\u679c_24\u7c7b_RGB_crop'\n    json_path_all = '../\u8981\u63a8\u7406\u7684json/'\n    mkdir_or_exist(output_path_all)\n    img_list = find_data_list(img_path_all, suffix='.tif')\n\n\n    for img_path in tqdm(img_list, colour='Green'):\n\n        img_output_path = os.path.join(output_path_all, os.path.basename(img_path))\n        json_path = os.path.join(json_path_all, os.path.basename(img_path).split('_')[-1].replace('.tif', '.json'))\n        print(f'\u6b63\u5728\u88c1\u5207: {img_output_path},json: {json_path}')\n        crop_tif_with_json_nan(img_path, img_output_path, json_path)\n    ```\n\n## 4. \u7248\u672c\u66f4\u65b0\u65e5\u5fd7\n- 2023-12-06  v1.0.2  \u4fee\u590d README \u4e2d\u663e\u793a\u95ee\u9898\u3002\n- 2023-12-06  v1.0.3  \u4fee\u6539\u9879\u76ee\u540d\u79f0\u4e3a ATL_Tools\u3002\n- 2024-04-03  v1.0.6  \u589e\u52a0 `ATL_gdal` \u6a21\u5757\uff0c\u7528\u4e8e\u5904\u7406\u9065\u611f\u5f71\u50cf\u3002\n- 2024-04-09  v1.0.7  \u4fee\u590d `ATL_gdal` \u6a21\u5757\u4e2d\u5bf9\u4e8e `ATL_path` \u7684\u5f15\u7528\uff0c`__init__.py` \u6ce8\u91ca\u6389`from ATL_gdal import *`, \u53ef\u4e0d\u5b89\u88c5 gdal \u4f7f\u7528 ATL_Tools\n- 2024-04-16  v1.0.8  \u4fee\u590d `ValueError: cannot convert float NaN to integer` in ATL_gdal Line 371\n- 2024-04-16  v1.0.9  \u4fee\u590d `Mosaic_all_images()`\u5bf9\u4e8e mosaic RGB uint8 \u6807\u7b7e\u7684\u652f\u6301\uff0c\u4f18\u5316`find_data_list()`\u51fd\u6570\u663e\u793a\uff0c\u4f18\u5316`_init_.py`, \u4f18\u5316`Readme.md`\u663e\u793a\n- 2024-04-16  v1.1.0  pypi \u9875\u9762\u589e\u52a0`ATL_Tools` Github \u8d21\u732e\u5730\u5740\u3002\n- 2024-04-16  v1.1.1  `crop_tif_with_json_nan()`\u589e\u52a0\u53ef\u9009\u53c2\u6570`add_alpha_chan: bool`\u63a7\u5236\u662f\u5426\u4e3a RGB \u6807\u7b7e\u589e\u52a0 alpha \u901a\u9053\n- 2024-04-16  v1.1.2  \u4fee\u590d ATL_gdal Line 397 \u53d8\u91cf\u4f7f\u7528\u9519\u8bef\n- 2024-04-18  v1.1.3  \u4fee\u590d ATL_gdal Mosaic \u4e2d\u5bf9 float32 \u56fe\u50cf\u80cc\u666f\u8bbe\u7f6e\u4e3a nan \u7684\u652f\u6301\n- 2024-04-24  v1.1.4  \u4fee\u590d ATL_gdal Mosaic \u4e2d\u6307\u5b9a img_list \u529f\u80fd\u7684\u652f\u6301\uff0c\u53ef\u4ee5\u6307\u5b9a Mosaic \u7684\u56fe\u50cf\uff0c\u589e\u52a0`shp`\u8f6c\u6362\u4e3a`Geojson`\u7684\u529f\u80fd\u51fd\u6570`shp_to_geojson()`\n- 2024-05-06  v1.1.5  \u4fee\u590d ATL_gdal \u4e2d `Mosaic_all_imgs()`\u51fd\u6570\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u5bfc\u81f4\u8ba1\u7b97\u51fa\u7684\u5408\u5e76\u540e\u7684\u5927\u56fe\u5c3a\u5bf8\u8981\u6bd4\u5d4c\u5165\u7684\u5c0f\u56fe\u4f4d\u7f6e\u8981\u5c0f\u51e0\u4e2a\u50cf\u7d20\uff0c\u5728 line 340 \u4ee3\u7801\u4e2d\uff0c\u7ed9\u56fe\u50cf\u7684\u9ad8\u5bbd\u5404 +50 \u50cf\u7d20\uff0c\u6682\u65f6\u907f\u514d\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002\n- 2024-05-20  v1.1.6  ATL_gdal \u4e2d \u589e\u52a0 `cut_image_with_overlap()`\u652f\u6301\u5c06\u5927\u56fe\u88c1\u5207\u6210\u6307\u5b9a\u5c3a\u5bf8\u7684\u5c0f\u56fe\uff0c\u5e76\u5e26\u6709\u5750\u6807\u3002\n- 2024-05-28  v1.1.7  ATL_gdal \u4e2d \u4fee\u6539 v1.1.6 \u4e2d\u65b0\u589e\u51fd\u6570 \u4e3a`clip_big_image()`\u3002ATL_gdal \u4e2d`crop_tif_with_json_zero()`\u548c`crop_tif_with_json_nan()`\u652f\u6301\u4f20\u5165\u53c2\u6570 `img_path(str)` \u6216 `img_path(gdal.Dataset)`\u3002\n- 2024-06-17  v1.1.9  ATL_gdal \u4e2d\u4fee\u590d `crop_tif_with_json_zero()`\u548c`crop_tif_with_json_nan()` \u5bf9\u4e8e\u4f20\u5165`img_path(gdal.Dataset)`\u800c\u5bfc\u81f4\u9519\u8bef\u7684\u8def\u5f84\u6253\u5370\u3002\n- 2024-06-26  v1.2.0  ATL_gdal \u4e2d `resample_image()`\u589e\u52a0`new_rows`\u548c`new_cols`\u53ef\u9009\u53c2\u6570\uff0c\u53ef\u4ee5scater_factor\u7f29\u653e\u56e0\u5b50\u6216\u6307\u5b9a\u9ad8\u5bbd\u8fdb\u884c\u91cd\u91c7\u6837\u3002\u589e\u52a0`resampleAlg`\u53ef\u9009\u53c2\u6570\uff0c\u652f\u6301\u901a\u8fc7`gdal`\u7684\u91cd\u91c7\u6837\u7b97\u6cd5\u8fdb\u884c\u91cd\u91c7\u6837\u3002\n- 2024-06-26  v1.2.1  ATL_gdal \u4e2d\u4fee\u590d`resample_image()`\u529f\u80fd\u4e2d\uff0c`new_rows`,`new_cols`,`scale_facotr`\u4e3a`None`\n- 2024-07-24  v1.2.2  ATL_gdal \u4e2d`crop_tif_with_json_zero()`\u589e\u52a0`nodata_value`\u53c2\u6570\uff0c\u652f\u6301\u6307\u5b9a\u8f93\u51fa\u4e2d\u65e0\u6548\u6570\u636e\u7684\u503c\uff0c\u53ef\u5728\u6807\u7b7e\u5305\u542b0\u65f6\uff0c\u6307\u5b9a\u65e0\u6570\u636e\u503c\u4e3a255\u3002\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "AI-Tianlong\u7684Tools\u6253\u5305\uff0c\u5f00\u7bb1\u5373\u7528, \u5305\u542bATL_path\u548cATL_gdal,\u53ef\u7528\u4e8e\u6587\u4ef6\u5939\u521b\u5efa\u3001\u6587\u4ef6\u641c\u7d22\u3001\u9065\u611f\u56fe\u50cf\u5904\u7406",
    "version": "1.2.2",
    "project_urls": null,
    "split_keywords": [
        "atl_tools",
        " gdal",
        " ai-tianlong",
        " chinese"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "240d1c390400b2f0f0b04e28c22b338cdf1af6e2861c3e5718d5e4ba8d73e5da",
                "md5": "0e08c4b56fe7c7c92805a811d9ffd28f",
                "sha256": "ab08e9d87bebfdecd943d44e471bca3167fdfd1f1dc933cdc1dc681dabf618e2"
            },
            "downloads": -1,
            "filename": "ATL_Tools-1.2.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0e08c4b56fe7c7c92805a811d9ffd28f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 17459,
            "upload_time": "2024-07-25T02:51:02",
            "upload_time_iso_8601": "2024-07-25T02:51:02.425186Z",
            "url": "https://files.pythonhosted.org/packages/24/0d/1c390400b2f0f0b04e28c22b338cdf1af6e2861c3e5718d5e4ba8d73e5da/ATL_Tools-1.2.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "94c9113f591a72f4493afa54b0c7446c1230fcf588363fe10f70ab465f823694",
                "md5": "760177c193831bd0428348db06e8cd18",
                "sha256": "85c0a72457bd652ef210c3914e2aa7cbcced34381c0aa63a3aa5a07aee19b0d3"
            },
            "downloads": -1,
            "filename": "atl_tools-1.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "760177c193831bd0428348db06e8cd18",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 15426,
            "upload_time": "2024-07-25T02:51:04",
            "upload_time_iso_8601": "2024-07-25T02:51:04.255566Z",
            "url": "https://files.pythonhosted.org/packages/94/c9/113f591a72f4493afa54b0c7446c1230fcf588363fe10f70ab465f823694/atl_tools-1.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-25 02:51:04",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "atl-tools"
}
        
Elapsed time: 0.30536s