summaryrefslogtreecommitdiff
path: root/python-aiocogeo.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-aiocogeo.spec')
-rw-r--r--python-aiocogeo.spec598
1 files changed, 598 insertions, 0 deletions
diff --git a/python-aiocogeo.spec b/python-aiocogeo.spec
new file mode 100644
index 0000000..18b63fa
--- /dev/null
+++ b/python-aiocogeo.spec
@@ -0,0 +1,598 @@
+%global _empty_manifest_terminate_build 0
+Name: python-aiocogeo
+Version: 0.3.0
+Release: 1
+Summary: Asynchronous cogeotiff reader
+License: mit
+URL: https://github.com/geospatial-jeff/aiocogeo
+Source0: https://mirrors.aliyun.com/pypi/web/packages/d7/a9/57bb107272c09dd275332e83076523e9d6bcf8d5d182f30affd37714af6e/aiocogeo-0.3.0.tar.gz
+BuildArch: noarch
+
+Requires: python3-aiofiles
+Requires: python3-aiohttp
+Requires: python3-aiocache
+Requires: python3-affine
+Requires: python3-imagecodecs
+Requires: python3-typer
+Requires: python3-Pillow
+Requires: python3-stac-pydantic
+Requires: python3-geojson-pydantic
+Requires: python3-xmltodict
+Requires: python3-mercantile
+Requires: python3-morecantile
+Requires: python3-rasterio
+Requires: python3-rio-tiler
+Requires: python3-pytest
+Requires: python3-pytest-asyncio
+Requires: python3-pytest-cov
+Requires: python3-shapely
+Requires: python3-botocore
+Requires: python3-boto3
+Requires: python3-aioboto3
+Requires: python3-aioboto3
+
+%description
+# aiocogeo [![CircleCI](https://circleci.com/gh/geospatial-jeff/aiocogeo/tree/master.svg?style=svg)](https://circleci.com/gh/geospatial-jeff/aiocogeo/tree/master)[![codecov](https://codecov.io/gh/geospatial-jeff/aiocogeo/branch/master/graph/badge.svg)](https://codecov.io/gh/geospatial-jeff/aiocogeo)
+
+## Installation
+```
+pip install aiocogeo
+
+# With S3 filesystem
+pip install aiocogeo[s3]
+```
+
+## Usage
+COGs are opened using the `COGReader` asynchronous context manager:
+
+```python
+from aiocogeo import COGReader
+
+async with COGReader("http://cog.tif") as cog:
+ ...
+```
+
+Several filesystems are supported:
+- **HTTP/HTTPS** (`http://`, `https://`)
+- **S3** (`s3://`)
+- **File** (`/`)
+
+### Metadata
+Generating a [rasterio-style profile](https://rasterio.readthedocs.io/en/latest/topics/profiles.html) for the COG:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ print(cog.profile)
+
+>>> {'driver': 'GTiff', 'width': 10280, 'height': 12190, 'count': 3, 'dtype': 'uint8', 'transform': Affine(0.6, 0.0, 367188.0,
+ 0.0, -0.6, 3777102.0), 'blockxsize': 512, 'blockysize': 512, 'compress': 'lzw', 'interleave': 'pixel', 'crs': 'EPSG:26911', 'tiled': True, 'photometric': 'rgb'}
+```
+
+#### Lower Level Metadata
+A COG is composed of several IFDs, each with many TIFF tags:
+
+```python
+from aiocogeo.ifd import IFD
+from aiocogeo.tag import Tag
+
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ for ifd in cog:
+ assert isinstance(ifd, IFD)
+ for tag in ifd:
+ assert isinstance(tag, Tag)
+```
+
+Each IFD contains more granular metadata about the image than what is included in the profile. For example, finding the
+tilesize for each IFD:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ for ifd in cog:
+ print(ifd.TileWidth.value, ifd.TileHeight.value)
+
+>>> 512 512
+ 128 128
+ 128 128
+ 128 128
+ 128 128
+ 128 128
+```
+
+More advanced use cases may need access to tag-level metadata:
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ first_ifd = cog.ifds[0]
+ assert first_ifd.tag_count == 24
+
+ for tag in first_ifd:
+ print(tag)
+
+>>> Tag(code=258, name='BitsPerSample', tag_type=TagType(format='H', size=2), count=3, length=6, value=(8, 8, 8))
+ Tag(code=259, name='Compression', tag_type=TagType(format='H', size=2), count=1, length=2, value=5)
+ Tag(code=257, name='ImageHeight', tag_type=TagType(format='H', size=2), count=1, length=2, value=12190)
+ Tag(code=256, name='ImageWidth', tag_type=TagType(format='H', size=2), count=1, length=2, value=10280)
+ ...
+```
+
+### Image Data
+The reader also has methods for reading internal image tiles and performing partial reads. Currently only jpeg, lzw, deflate, packbits, and webp compressions are supported.
+
+#### Image Tiles
+Reading the top left tile of an image at native resolution:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/webp_cog.tif") as cog:
+ x = y = z = 0
+ tile = await cog.get_tile(x, y, z)
+
+ ifd = cog.ifds[z]
+ assert tile.shape == (ifd.bands, ifd.TileHeight.value, ifd.TileWidth.value)
+```
+
+<p align="center">
+ <img width="300" height="300" src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/naip_top_left_tile.jpg">
+</p>
+
+
+#### Partial Read
+You can read a portion of the image by specifying a bounding box in the native crs of the image and an output shape:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/webp_cog.tif") as cog:
+ assert cog.epsg == 26911
+ partial_data = await cog.read(bounds=(368461,3770591,368796,3770921), shape=(512,512))
+```
+
+<p align="center">
+ <img width="300" height="300" src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/partial_read.jpeg">
+</p>
+
+#### Internal Masks
+If the COG has an internal mask, the returned array will be a masked array:
+
+```python
+import numpy as np
+
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/naip_image_masked.tif") as cog:
+ assert cog.is_masked
+
+ tile = await cog.get_tile(0,0,0)
+ assert np.ma.is_masked(tile)
+```
+
+<p align="center">
+ <img src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/masked_tile.jpg" width="300" />
+ <img src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/mask.jpg" width="300" />
+</p>
+
+### Configuration
+Configuration options are exposed through environment variables:
+- **INGESTED_BYTES_AT_OPEN** - defines the number of bytes in the first GET request at file opening (defaults to 16KB)
+- **HEADER_CHUNK_SIZE** - chunk size used to read header (defaults to 16KB)
+- **ENABLE_BLOCK_CACHE** - determines if image blocks are cached in memory (defaults to TRUE)
+- **ENABLE_HEADER_CACHE** - determines if COG headers are cached in memory (defaults to TRUE)
+- **HTTP_MERGE_CONSECUTIVE_RANGES** - determines if consecutive ranges are merged into a single request (defaults to FALSE)
+- **BOUNDLESS_READ** - determines if internal tiles outside the bounds of the IFD are read (defaults to TRUE)
+- **BOUNDLESS_READ_FILL_VALUE** - determines the value used to fill boundless reads (defaults to 0)
+- **LOG_LEVEL** - determines the log level used by the package (defaults to ERROR)
+- **VERBOSE_LOGS** - enables verbose logging, designed for use when `LOG_LEVEL=DEBUG` (defaults to FALSE)
+- **AWS_REQUEST_PAYER** - set to `requester` to enable reading from S3 RequesterPays buckets.
+
+Refer to [`aiocogeo/config.py`](https://github.com/geospatial-jeff/aiocogeo/blob/master/aiocogeo/config.py) for more details about configuration options.
+
+## CLI
+```
+$ aiocogeo --help
+Usage: aiocogeo [OPTIONS] COMMAND [ARGS]...
+
+Options:
+ --install-completion [bash|zsh|fish|powershell|pwsh]
+ Install completion for the specified shell.
+ --show-completion [bash|zsh|fish|powershell|pwsh]
+ Show completion for the specified shell, to
+ copy it or customize the installation.
+
+ --help Show this message and exit.
+
+Commands:
+ create-tms Create OGC TileMatrixSet.
+ info Read COG metadata.
+
+```
+
+
+
+%package -n python3-aiocogeo
+Summary: Asynchronous cogeotiff reader
+Provides: python-aiocogeo
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-aiocogeo
+# aiocogeo [![CircleCI](https://circleci.com/gh/geospatial-jeff/aiocogeo/tree/master.svg?style=svg)](https://circleci.com/gh/geospatial-jeff/aiocogeo/tree/master)[![codecov](https://codecov.io/gh/geospatial-jeff/aiocogeo/branch/master/graph/badge.svg)](https://codecov.io/gh/geospatial-jeff/aiocogeo)
+
+## Installation
+```
+pip install aiocogeo
+
+# With S3 filesystem
+pip install aiocogeo[s3]
+```
+
+## Usage
+COGs are opened using the `COGReader` asynchronous context manager:
+
+```python
+from aiocogeo import COGReader
+
+async with COGReader("http://cog.tif") as cog:
+ ...
+```
+
+Several filesystems are supported:
+- **HTTP/HTTPS** (`http://`, `https://`)
+- **S3** (`s3://`)
+- **File** (`/`)
+
+### Metadata
+Generating a [rasterio-style profile](https://rasterio.readthedocs.io/en/latest/topics/profiles.html) for the COG:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ print(cog.profile)
+
+>>> {'driver': 'GTiff', 'width': 10280, 'height': 12190, 'count': 3, 'dtype': 'uint8', 'transform': Affine(0.6, 0.0, 367188.0,
+ 0.0, -0.6, 3777102.0), 'blockxsize': 512, 'blockysize': 512, 'compress': 'lzw', 'interleave': 'pixel', 'crs': 'EPSG:26911', 'tiled': True, 'photometric': 'rgb'}
+```
+
+#### Lower Level Metadata
+A COG is composed of several IFDs, each with many TIFF tags:
+
+```python
+from aiocogeo.ifd import IFD
+from aiocogeo.tag import Tag
+
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ for ifd in cog:
+ assert isinstance(ifd, IFD)
+ for tag in ifd:
+ assert isinstance(tag, Tag)
+```
+
+Each IFD contains more granular metadata about the image than what is included in the profile. For example, finding the
+tilesize for each IFD:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ for ifd in cog:
+ print(ifd.TileWidth.value, ifd.TileHeight.value)
+
+>>> 512 512
+ 128 128
+ 128 128
+ 128 128
+ 128 128
+ 128 128
+```
+
+More advanced use cases may need access to tag-level metadata:
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ first_ifd = cog.ifds[0]
+ assert first_ifd.tag_count == 24
+
+ for tag in first_ifd:
+ print(tag)
+
+>>> Tag(code=258, name='BitsPerSample', tag_type=TagType(format='H', size=2), count=3, length=6, value=(8, 8, 8))
+ Tag(code=259, name='Compression', tag_type=TagType(format='H', size=2), count=1, length=2, value=5)
+ Tag(code=257, name='ImageHeight', tag_type=TagType(format='H', size=2), count=1, length=2, value=12190)
+ Tag(code=256, name='ImageWidth', tag_type=TagType(format='H', size=2), count=1, length=2, value=10280)
+ ...
+```
+
+### Image Data
+The reader also has methods for reading internal image tiles and performing partial reads. Currently only jpeg, lzw, deflate, packbits, and webp compressions are supported.
+
+#### Image Tiles
+Reading the top left tile of an image at native resolution:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/webp_cog.tif") as cog:
+ x = y = z = 0
+ tile = await cog.get_tile(x, y, z)
+
+ ifd = cog.ifds[z]
+ assert tile.shape == (ifd.bands, ifd.TileHeight.value, ifd.TileWidth.value)
+```
+
+<p align="center">
+ <img width="300" height="300" src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/naip_top_left_tile.jpg">
+</p>
+
+
+#### Partial Read
+You can read a portion of the image by specifying a bounding box in the native crs of the image and an output shape:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/webp_cog.tif") as cog:
+ assert cog.epsg == 26911
+ partial_data = await cog.read(bounds=(368461,3770591,368796,3770921), shape=(512,512))
+```
+
+<p align="center">
+ <img width="300" height="300" src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/partial_read.jpeg">
+</p>
+
+#### Internal Masks
+If the COG has an internal mask, the returned array will be a masked array:
+
+```python
+import numpy as np
+
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/naip_image_masked.tif") as cog:
+ assert cog.is_masked
+
+ tile = await cog.get_tile(0,0,0)
+ assert np.ma.is_masked(tile)
+```
+
+<p align="center">
+ <img src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/masked_tile.jpg" width="300" />
+ <img src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/mask.jpg" width="300" />
+</p>
+
+### Configuration
+Configuration options are exposed through environment variables:
+- **INGESTED_BYTES_AT_OPEN** - defines the number of bytes in the first GET request at file opening (defaults to 16KB)
+- **HEADER_CHUNK_SIZE** - chunk size used to read header (defaults to 16KB)
+- **ENABLE_BLOCK_CACHE** - determines if image blocks are cached in memory (defaults to TRUE)
+- **ENABLE_HEADER_CACHE** - determines if COG headers are cached in memory (defaults to TRUE)
+- **HTTP_MERGE_CONSECUTIVE_RANGES** - determines if consecutive ranges are merged into a single request (defaults to FALSE)
+- **BOUNDLESS_READ** - determines if internal tiles outside the bounds of the IFD are read (defaults to TRUE)
+- **BOUNDLESS_READ_FILL_VALUE** - determines the value used to fill boundless reads (defaults to 0)
+- **LOG_LEVEL** - determines the log level used by the package (defaults to ERROR)
+- **VERBOSE_LOGS** - enables verbose logging, designed for use when `LOG_LEVEL=DEBUG` (defaults to FALSE)
+- **AWS_REQUEST_PAYER** - set to `requester` to enable reading from S3 RequesterPays buckets.
+
+Refer to [`aiocogeo/config.py`](https://github.com/geospatial-jeff/aiocogeo/blob/master/aiocogeo/config.py) for more details about configuration options.
+
+## CLI
+```
+$ aiocogeo --help
+Usage: aiocogeo [OPTIONS] COMMAND [ARGS]...
+
+Options:
+ --install-completion [bash|zsh|fish|powershell|pwsh]
+ Install completion for the specified shell.
+ --show-completion [bash|zsh|fish|powershell|pwsh]
+ Show completion for the specified shell, to
+ copy it or customize the installation.
+
+ --help Show this message and exit.
+
+Commands:
+ create-tms Create OGC TileMatrixSet.
+ info Read COG metadata.
+
+```
+
+
+
+%package help
+Summary: Development documents and examples for aiocogeo
+Provides: python3-aiocogeo-doc
+%description help
+# aiocogeo [![CircleCI](https://circleci.com/gh/geospatial-jeff/aiocogeo/tree/master.svg?style=svg)](https://circleci.com/gh/geospatial-jeff/aiocogeo/tree/master)[![codecov](https://codecov.io/gh/geospatial-jeff/aiocogeo/branch/master/graph/badge.svg)](https://codecov.io/gh/geospatial-jeff/aiocogeo)
+
+## Installation
+```
+pip install aiocogeo
+
+# With S3 filesystem
+pip install aiocogeo[s3]
+```
+
+## Usage
+COGs are opened using the `COGReader` asynchronous context manager:
+
+```python
+from aiocogeo import COGReader
+
+async with COGReader("http://cog.tif") as cog:
+ ...
+```
+
+Several filesystems are supported:
+- **HTTP/HTTPS** (`http://`, `https://`)
+- **S3** (`s3://`)
+- **File** (`/`)
+
+### Metadata
+Generating a [rasterio-style profile](https://rasterio.readthedocs.io/en/latest/topics/profiles.html) for the COG:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ print(cog.profile)
+
+>>> {'driver': 'GTiff', 'width': 10280, 'height': 12190, 'count': 3, 'dtype': 'uint8', 'transform': Affine(0.6, 0.0, 367188.0,
+ 0.0, -0.6, 3777102.0), 'blockxsize': 512, 'blockysize': 512, 'compress': 'lzw', 'interleave': 'pixel', 'crs': 'EPSG:26911', 'tiled': True, 'photometric': 'rgb'}
+```
+
+#### Lower Level Metadata
+A COG is composed of several IFDs, each with many TIFF tags:
+
+```python
+from aiocogeo.ifd import IFD
+from aiocogeo.tag import Tag
+
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ for ifd in cog:
+ assert isinstance(ifd, IFD)
+ for tag in ifd:
+ assert isinstance(tag, Tag)
+```
+
+Each IFD contains more granular metadata about the image than what is included in the profile. For example, finding the
+tilesize for each IFD:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ for ifd in cog:
+ print(ifd.TileWidth.value, ifd.TileHeight.value)
+
+>>> 512 512
+ 128 128
+ 128 128
+ 128 128
+ 128 128
+ 128 128
+```
+
+More advanced use cases may need access to tag-level metadata:
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif") as cog:
+ first_ifd = cog.ifds[0]
+ assert first_ifd.tag_count == 24
+
+ for tag in first_ifd:
+ print(tag)
+
+>>> Tag(code=258, name='BitsPerSample', tag_type=TagType(format='H', size=2), count=3, length=6, value=(8, 8, 8))
+ Tag(code=259, name='Compression', tag_type=TagType(format='H', size=2), count=1, length=2, value=5)
+ Tag(code=257, name='ImageHeight', tag_type=TagType(format='H', size=2), count=1, length=2, value=12190)
+ Tag(code=256, name='ImageWidth', tag_type=TagType(format='H', size=2), count=1, length=2, value=10280)
+ ...
+```
+
+### Image Data
+The reader also has methods for reading internal image tiles and performing partial reads. Currently only jpeg, lzw, deflate, packbits, and webp compressions are supported.
+
+#### Image Tiles
+Reading the top left tile of an image at native resolution:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/webp_cog.tif") as cog:
+ x = y = z = 0
+ tile = await cog.get_tile(x, y, z)
+
+ ifd = cog.ifds[z]
+ assert tile.shape == (ifd.bands, ifd.TileHeight.value, ifd.TileWidth.value)
+```
+
+<p align="center">
+ <img width="300" height="300" src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/naip_top_left_tile.jpg">
+</p>
+
+
+#### Partial Read
+You can read a portion of the image by specifying a bounding box in the native crs of the image and an output shape:
+
+```python
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/webp_cog.tif") as cog:
+ assert cog.epsg == 26911
+ partial_data = await cog.read(bounds=(368461,3770591,368796,3770921), shape=(512,512))
+```
+
+<p align="center">
+ <img width="300" height="300" src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/partial_read.jpeg">
+</p>
+
+#### Internal Masks
+If the COG has an internal mask, the returned array will be a masked array:
+
+```python
+import numpy as np
+
+async with COGReader("https://async-cog-reader-test-data.s3.amazonaws.com/naip_image_masked.tif") as cog:
+ assert cog.is_masked
+
+ tile = await cog.get_tile(0,0,0)
+ assert np.ma.is_masked(tile)
+```
+
+<p align="center">
+ <img src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/masked_tile.jpg" width="300" />
+ <img src="https://async-cog-reader-test-data.s3.amazonaws.com/readme/mask.jpg" width="300" />
+</p>
+
+### Configuration
+Configuration options are exposed through environment variables:
+- **INGESTED_BYTES_AT_OPEN** - defines the number of bytes in the first GET request at file opening (defaults to 16KB)
+- **HEADER_CHUNK_SIZE** - chunk size used to read header (defaults to 16KB)
+- **ENABLE_BLOCK_CACHE** - determines if image blocks are cached in memory (defaults to TRUE)
+- **ENABLE_HEADER_CACHE** - determines if COG headers are cached in memory (defaults to TRUE)
+- **HTTP_MERGE_CONSECUTIVE_RANGES** - determines if consecutive ranges are merged into a single request (defaults to FALSE)
+- **BOUNDLESS_READ** - determines if internal tiles outside the bounds of the IFD are read (defaults to TRUE)
+- **BOUNDLESS_READ_FILL_VALUE** - determines the value used to fill boundless reads (defaults to 0)
+- **LOG_LEVEL** - determines the log level used by the package (defaults to ERROR)
+- **VERBOSE_LOGS** - enables verbose logging, designed for use when `LOG_LEVEL=DEBUG` (defaults to FALSE)
+- **AWS_REQUEST_PAYER** - set to `requester` to enable reading from S3 RequesterPays buckets.
+
+Refer to [`aiocogeo/config.py`](https://github.com/geospatial-jeff/aiocogeo/blob/master/aiocogeo/config.py) for more details about configuration options.
+
+## CLI
+```
+$ aiocogeo --help
+Usage: aiocogeo [OPTIONS] COMMAND [ARGS]...
+
+Options:
+ --install-completion [bash|zsh|fish|powershell|pwsh]
+ Install completion for the specified shell.
+ --show-completion [bash|zsh|fish|powershell|pwsh]
+ Show completion for the specified shell, to
+ copy it or customize the installation.
+
+ --help Show this message and exit.
+
+Commands:
+ create-tms Create OGC TileMatrixSet.
+ info Read COG metadata.
+
+```
+
+
+
+%prep
+%autosetup -n aiocogeo-0.3.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-aiocogeo -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.3.0-1
+- Package Spec generated