diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-amberflo-metering-python.spec | 927 | ||||
| -rw-r--r-- | sources | 1 | 
3 files changed, 929 insertions, 0 deletions
@@ -0,0 +1 @@ +/amberflo-metering-python-3.1.0.tar.gz diff --git a/python-amberflo-metering-python.spec b/python-amberflo-metering-python.spec new file mode 100644 index 0000000..27926ff --- /dev/null +++ b/python-amberflo-metering-python.spec @@ -0,0 +1,927 @@ +%global _empty_manifest_terminate_build 0 +Name:		python-amberflo-metering-python +Version:	3.1.0 +Release:	1 +Summary:	Integrate Amberflo into any Python 3 application. +License:	MIT License +URL:		https://github.com/amberflo/metering-python +Source0:	https://mirrors.nju.edu.cn/pypi/web/packages/d7/86/dc769203f3611b0988683725c5dac12fd104b8de17a1189c8b4589bc7366/amberflo-metering-python-3.1.0.tar.gz +BuildArch:	noarch + +Requires:	python3-requests +Requires:	python3-backoff +Requires:	python3-boto3 + +%description +# amberflo-metering-python + +<p> +    <a href="https://github.com/amberflo/metering-python/actions"> +        <img alt="CI Status" src="https://github.com/amberflo/metering-python/actions/workflows/tests.yml/badge.svg?branch=main"> +    </a> +    <a href="https://pypi.org/project/amberflo-metering-python/"> +        <img alt="PyPI" src="https://img.shields.io/pypi/v/amberflo-metering-python"> +    </a> +</p> + +[Amberflo](https://amberflo.io) is the simplest way to integrate metering into your application. + +This is the official Python 3 client that wraps the [Amberflo REST API](https://docs.amberflo.io/docs). + +## :heavy_check_mark: Features + +- Add and update customers +- Assign and update product plans to customers +- List invoices of a customer +- Get a new customer portal session for a customer +- Add and list prepaid orders to customers +- Send meter events +    - In asynchronous batches for high throughput (with optional flush on demand) +    - Or synchronously +    - Using the Amberflo API or the Amberflo supplied AWS S3 bucket +- Query usage +- Fine grained logging control + +## :rocket: Quick Start + +1. [Sign up for free](https://ui.amberflo.io/) and get an API key. + +2. Install the SDK + +``` +pip install amberflo-metering-python +``` + +3. Create a customer + +```python +import os +from metering.customer import CustomerApiClient, create_customer_payload + +client = CustomerApiClient(os.environ.get("API_KEY")) + +message = create_customer_payload( +    customer_id="sample-customer-123", +    customer_email="customer-123@sample.com", +    customer_name="Sample Customer", +    traits={ +        "region": "us-east-1", +    }, +) +customer = client.add_or_update(message) +``` + +4. Ingest meter events + +```python +import os +from time import time +from metering.ingest import create_ingest_client + +client = create_ingest_client(api_key=os.environ["API_KEY"]) + +dimensions = {"region": "us-east-1"} +customer_id = "sample-customer-123" + +client.meter( +    meter_api_name="sample-meter", +    meter_value=5, +    meter_time_in_millis=int(time() * 1000), +    customer_id=customer_id, +    dimensions=dimensions, +) +``` + +5. Query usage + +```python +import os +from time import time +from metering.usage import (AggregationType, Take, TimeGroupingInterval, +                            TimeRange, UsageApiClient, create_usage_query) + +client = UsageApiClient(os.environ.get("API_KEY")) + +since_two_days_ago = TimeRange(int(time()) - 60 * 60 * 24 * 2) + +query = create_usage_query( +    meter_api_name="my_meter", +    aggregation=AggregationType.SUM, +    time_grouping_interval=TimeGroupingInterval.DAY, +    time_range=since_two_days_ago, +    group_by=["customerId"], +    usage_filter={"customerId": ["some-customer-321", "sample-customer-123"]}, +    take=Take(limit=10, is_ascending=False), +) +report = client.get(query) +``` + +## :zap: High throughput ingestion + +Amberflo.io libraries are built to support high throughput environments. That +means you can safely send hundreds of meter records per second. For example, +you can chose to deploy it on a web server that is serving hundreds of requests +per second. + +However, every call does not result in a HTTP request, but is queued in memory +instead. Messages are batched and flushed in the background, allowing for much +faster operation. The size of batch and rate of flush can be customized. + +**Flush on demand:** For example, at the end of your program, you'll want to +flush to make sure there's nothing left in the queue. Calling this method will +block the calling thread until there are no messages left in the queue. So, +you'll want to use it as part of your cleanup scripts and avoid using it as +part of the request lifecycle. + +**Error handling:** The SDK allows you to set up a `on_error` callback function +for handling errors when trying to send a batch. + +Here is a complete example, showing the default values of all options: + +```python +def on_error_callback(error, batch): +    ... + +client = create_ingest_client( +    api_key=API_KEY, +    max_queue_size=100000,  # max number of items in the queue before rejecting new items +    threads=2,  # number of worker threads doing the sending +    retries=2,  # max number of retries after failures +    batch_size=100,  # max number of meter records in a batch +    send_interval_in_secs=0.5,  # wait time before sending an incomplete batch +    sleep_interval_in_secs=0.1,  # wait time after failure to send or queue empty +    on_error=on_error_callback,  # handle failures to send a batch +) + +... + +client.meter(...) + +client.flush()  # block and make sure all messages are sent +``` + +### What happens if there are just too many messages? + +If the module detects that it can't flush faster than it's receiving messages, +it'll simply stop accepting new messages. This allows your program to +continually run without ever crashing due to a backed up metering queue. + +### Ingesting through the S3 bucket + +The SDK provides a `metering.ingest.IngestS3Client` so you can send your meter +records to us via the S3 bucket. + +Use of this feature is enabled if you install the library with the `s3` option: +``` +pip install amberflo-metering-python[s3] +``` + +Just pass the S3 bucket credentials to the factory function: +```python +client = create_ingest_client( +    bucket_name=os.environ.get("BUCKET_NAME"), +    access_key=os.environ.get("ACCESS_KEY"), +    secret_key=os.environ.get("SECRET_KEY"), +) +``` + +## :book: Documentation + +General documentation on how to use Amberflo is available at [Product Walkthrough](https://docs.amberflo.io/docs/product-walkthrough). + +The full REST API documentation is available at [API Reference](https://docs.amberflo.io/reference). + +## :scroll: Samples + +Code samples covering different scenarios are available in the [./samples](https://github.com/amberflo/metering-python/blob/main/samples/README.md) folder. + +## :construction_worker: Contributing + +Feel free to open issues and send a pull request. + +Also, check out [CONTRIBUTING.md](https://github.com/amberflo/metering-python/blob/main/CONTRIBUTING.md). + +## :bookmark_tabs: Reference + +### API Clients + +#### [Ingest](https://docs.amberflo.io/reference/post_ingest) + +```python +from metering.ingest import ( +    create_ingest_payload, +    create_ingest_client, +) +``` + +#### [Customer](https://docs.amberflo.io/reference/post_customers) + +```python +from metering.customer import ( +    CustomerApiClient, +    create_customer_payload, +) +``` + +#### [Usage](https://docs.amberflo.io/reference/post_usage) + +```python +from metering.usage import ( +    AggregationType, +    Take, +    TimeGroupingInterval, +    TimeRange, +    UsageApiClient, +    create_usage_query, +    create_all_usage_query, +) +``` + +#### [Customer Portal Session](https://docs.amberflo.io/reference/post_session) + +```python +from metering.customer_portal_session import ( +    CustomerPortalSessionApiClient, +    create_customer_portal_session_payload, +) +``` + +#### [Customer Prepaid Order](https://docs.amberflo.io/reference/post_payments-pricing-amberflo-customer-prepaid) + +```python +from metering.customer_prepaid_order import ( +    BillingPeriod, +    BillingPeriodUnit, +    CustomerPrepaidOrderApiClient, +    create_customer_prepaid_order_payload, +) +``` + +#### [Customer Product Invoice](https://docs.amberflo.io/reference/get_payments-billing-customer-product-invoice) + +```python +from metering.customer_product_invoice import ( +    CustomerProductInvoiceApiClient, +    create_all_invoices_query, +    create_latest_invoice_query, +    create_invoice_query, +) +``` + +#### [Customer Product Plan](https://docs.amberflo.io/reference/post_payments-pricing-amberflo-customer-pricing) + +```python +from metering.customer_product_plan import ( +    CustomerProductPlanApiClient, +    create_customer_product_plan_payload, +) +``` + +### Exceptions + +```python +from metering.exceptions import ApiError +``` + +### Logging + +`amberflo-metering-python` uses the standard Python logging framework. By +default, logging is and set at the `WARNING` level. + +The following loggers are used: + +- `metering.ingest.producer` +- `metering.ingest.s3_client` +- `metering.ingest.consumer` +- `metering.session.ingest_session` +- `metering.session.api_session` + + + + +%package -n python3-amberflo-metering-python +Summary:	Integrate Amberflo into any Python 3 application. +Provides:	python-amberflo-metering-python +BuildRequires:	python3-devel +BuildRequires:	python3-setuptools +BuildRequires:	python3-pip +%description -n python3-amberflo-metering-python +# amberflo-metering-python + +<p> +    <a href="https://github.com/amberflo/metering-python/actions"> +        <img alt="CI Status" src="https://github.com/amberflo/metering-python/actions/workflows/tests.yml/badge.svg?branch=main"> +    </a> +    <a href="https://pypi.org/project/amberflo-metering-python/"> +        <img alt="PyPI" src="https://img.shields.io/pypi/v/amberflo-metering-python"> +    </a> +</p> + +[Amberflo](https://amberflo.io) is the simplest way to integrate metering into your application. + +This is the official Python 3 client that wraps the [Amberflo REST API](https://docs.amberflo.io/docs). + +## :heavy_check_mark: Features + +- Add and update customers +- Assign and update product plans to customers +- List invoices of a customer +- Get a new customer portal session for a customer +- Add and list prepaid orders to customers +- Send meter events +    - In asynchronous batches for high throughput (with optional flush on demand) +    - Or synchronously +    - Using the Amberflo API or the Amberflo supplied AWS S3 bucket +- Query usage +- Fine grained logging control + +## :rocket: Quick Start + +1. [Sign up for free](https://ui.amberflo.io/) and get an API key. + +2. Install the SDK + +``` +pip install amberflo-metering-python +``` + +3. Create a customer + +```python +import os +from metering.customer import CustomerApiClient, create_customer_payload + +client = CustomerApiClient(os.environ.get("API_KEY")) + +message = create_customer_payload( +    customer_id="sample-customer-123", +    customer_email="customer-123@sample.com", +    customer_name="Sample Customer", +    traits={ +        "region": "us-east-1", +    }, +) +customer = client.add_or_update(message) +``` + +4. Ingest meter events + +```python +import os +from time import time +from metering.ingest import create_ingest_client + +client = create_ingest_client(api_key=os.environ["API_KEY"]) + +dimensions = {"region": "us-east-1"} +customer_id = "sample-customer-123" + +client.meter( +    meter_api_name="sample-meter", +    meter_value=5, +    meter_time_in_millis=int(time() * 1000), +    customer_id=customer_id, +    dimensions=dimensions, +) +``` + +5. Query usage + +```python +import os +from time import time +from metering.usage import (AggregationType, Take, TimeGroupingInterval, +                            TimeRange, UsageApiClient, create_usage_query) + +client = UsageApiClient(os.environ.get("API_KEY")) + +since_two_days_ago = TimeRange(int(time()) - 60 * 60 * 24 * 2) + +query = create_usage_query( +    meter_api_name="my_meter", +    aggregation=AggregationType.SUM, +    time_grouping_interval=TimeGroupingInterval.DAY, +    time_range=since_two_days_ago, +    group_by=["customerId"], +    usage_filter={"customerId": ["some-customer-321", "sample-customer-123"]}, +    take=Take(limit=10, is_ascending=False), +) +report = client.get(query) +``` + +## :zap: High throughput ingestion + +Amberflo.io libraries are built to support high throughput environments. That +means you can safely send hundreds of meter records per second. For example, +you can chose to deploy it on a web server that is serving hundreds of requests +per second. + +However, every call does not result in a HTTP request, but is queued in memory +instead. Messages are batched and flushed in the background, allowing for much +faster operation. The size of batch and rate of flush can be customized. + +**Flush on demand:** For example, at the end of your program, you'll want to +flush to make sure there's nothing left in the queue. Calling this method will +block the calling thread until there are no messages left in the queue. So, +you'll want to use it as part of your cleanup scripts and avoid using it as +part of the request lifecycle. + +**Error handling:** The SDK allows you to set up a `on_error` callback function +for handling errors when trying to send a batch. + +Here is a complete example, showing the default values of all options: + +```python +def on_error_callback(error, batch): +    ... + +client = create_ingest_client( +    api_key=API_KEY, +    max_queue_size=100000,  # max number of items in the queue before rejecting new items +    threads=2,  # number of worker threads doing the sending +    retries=2,  # max number of retries after failures +    batch_size=100,  # max number of meter records in a batch +    send_interval_in_secs=0.5,  # wait time before sending an incomplete batch +    sleep_interval_in_secs=0.1,  # wait time after failure to send or queue empty +    on_error=on_error_callback,  # handle failures to send a batch +) + +... + +client.meter(...) + +client.flush()  # block and make sure all messages are sent +``` + +### What happens if there are just too many messages? + +If the module detects that it can't flush faster than it's receiving messages, +it'll simply stop accepting new messages. This allows your program to +continually run without ever crashing due to a backed up metering queue. + +### Ingesting through the S3 bucket + +The SDK provides a `metering.ingest.IngestS3Client` so you can send your meter +records to us via the S3 bucket. + +Use of this feature is enabled if you install the library with the `s3` option: +``` +pip install amberflo-metering-python[s3] +``` + +Just pass the S3 bucket credentials to the factory function: +```python +client = create_ingest_client( +    bucket_name=os.environ.get("BUCKET_NAME"), +    access_key=os.environ.get("ACCESS_KEY"), +    secret_key=os.environ.get("SECRET_KEY"), +) +``` + +## :book: Documentation + +General documentation on how to use Amberflo is available at [Product Walkthrough](https://docs.amberflo.io/docs/product-walkthrough). + +The full REST API documentation is available at [API Reference](https://docs.amberflo.io/reference). + +## :scroll: Samples + +Code samples covering different scenarios are available in the [./samples](https://github.com/amberflo/metering-python/blob/main/samples/README.md) folder. + +## :construction_worker: Contributing + +Feel free to open issues and send a pull request. + +Also, check out [CONTRIBUTING.md](https://github.com/amberflo/metering-python/blob/main/CONTRIBUTING.md). + +## :bookmark_tabs: Reference + +### API Clients + +#### [Ingest](https://docs.amberflo.io/reference/post_ingest) + +```python +from metering.ingest import ( +    create_ingest_payload, +    create_ingest_client, +) +``` + +#### [Customer](https://docs.amberflo.io/reference/post_customers) + +```python +from metering.customer import ( +    CustomerApiClient, +    create_customer_payload, +) +``` + +#### [Usage](https://docs.amberflo.io/reference/post_usage) + +```python +from metering.usage import ( +    AggregationType, +    Take, +    TimeGroupingInterval, +    TimeRange, +    UsageApiClient, +    create_usage_query, +    create_all_usage_query, +) +``` + +#### [Customer Portal Session](https://docs.amberflo.io/reference/post_session) + +```python +from metering.customer_portal_session import ( +    CustomerPortalSessionApiClient, +    create_customer_portal_session_payload, +) +``` + +#### [Customer Prepaid Order](https://docs.amberflo.io/reference/post_payments-pricing-amberflo-customer-prepaid) + +```python +from metering.customer_prepaid_order import ( +    BillingPeriod, +    BillingPeriodUnit, +    CustomerPrepaidOrderApiClient, +    create_customer_prepaid_order_payload, +) +``` + +#### [Customer Product Invoice](https://docs.amberflo.io/reference/get_payments-billing-customer-product-invoice) + +```python +from metering.customer_product_invoice import ( +    CustomerProductInvoiceApiClient, +    create_all_invoices_query, +    create_latest_invoice_query, +    create_invoice_query, +) +``` + +#### [Customer Product Plan](https://docs.amberflo.io/reference/post_payments-pricing-amberflo-customer-pricing) + +```python +from metering.customer_product_plan import ( +    CustomerProductPlanApiClient, +    create_customer_product_plan_payload, +) +``` + +### Exceptions + +```python +from metering.exceptions import ApiError +``` + +### Logging + +`amberflo-metering-python` uses the standard Python logging framework. By +default, logging is and set at the `WARNING` level. + +The following loggers are used: + +- `metering.ingest.producer` +- `metering.ingest.s3_client` +- `metering.ingest.consumer` +- `metering.session.ingest_session` +- `metering.session.api_session` + + + + +%package help +Summary:	Development documents and examples for amberflo-metering-python +Provides:	python3-amberflo-metering-python-doc +%description help +# amberflo-metering-python + +<p> +    <a href="https://github.com/amberflo/metering-python/actions"> +        <img alt="CI Status" src="https://github.com/amberflo/metering-python/actions/workflows/tests.yml/badge.svg?branch=main"> +    </a> +    <a href="https://pypi.org/project/amberflo-metering-python/"> +        <img alt="PyPI" src="https://img.shields.io/pypi/v/amberflo-metering-python"> +    </a> +</p> + +[Amberflo](https://amberflo.io) is the simplest way to integrate metering into your application. + +This is the official Python 3 client that wraps the [Amberflo REST API](https://docs.amberflo.io/docs). + +## :heavy_check_mark: Features + +- Add and update customers +- Assign and update product plans to customers +- List invoices of a customer +- Get a new customer portal session for a customer +- Add and list prepaid orders to customers +- Send meter events +    - In asynchronous batches for high throughput (with optional flush on demand) +    - Or synchronously +    - Using the Amberflo API or the Amberflo supplied AWS S3 bucket +- Query usage +- Fine grained logging control + +## :rocket: Quick Start + +1. [Sign up for free](https://ui.amberflo.io/) and get an API key. + +2. Install the SDK + +``` +pip install amberflo-metering-python +``` + +3. Create a customer + +```python +import os +from metering.customer import CustomerApiClient, create_customer_payload + +client = CustomerApiClient(os.environ.get("API_KEY")) + +message = create_customer_payload( +    customer_id="sample-customer-123", +    customer_email="customer-123@sample.com", +    customer_name="Sample Customer", +    traits={ +        "region": "us-east-1", +    }, +) +customer = client.add_or_update(message) +``` + +4. Ingest meter events + +```python +import os +from time import time +from metering.ingest import create_ingest_client + +client = create_ingest_client(api_key=os.environ["API_KEY"]) + +dimensions = {"region": "us-east-1"} +customer_id = "sample-customer-123" + +client.meter( +    meter_api_name="sample-meter", +    meter_value=5, +    meter_time_in_millis=int(time() * 1000), +    customer_id=customer_id, +    dimensions=dimensions, +) +``` + +5. Query usage + +```python +import os +from time import time +from metering.usage import (AggregationType, Take, TimeGroupingInterval, +                            TimeRange, UsageApiClient, create_usage_query) + +client = UsageApiClient(os.environ.get("API_KEY")) + +since_two_days_ago = TimeRange(int(time()) - 60 * 60 * 24 * 2) + +query = create_usage_query( +    meter_api_name="my_meter", +    aggregation=AggregationType.SUM, +    time_grouping_interval=TimeGroupingInterval.DAY, +    time_range=since_two_days_ago, +    group_by=["customerId"], +    usage_filter={"customerId": ["some-customer-321", "sample-customer-123"]}, +    take=Take(limit=10, is_ascending=False), +) +report = client.get(query) +``` + +## :zap: High throughput ingestion + +Amberflo.io libraries are built to support high throughput environments. That +means you can safely send hundreds of meter records per second. For example, +you can chose to deploy it on a web server that is serving hundreds of requests +per second. + +However, every call does not result in a HTTP request, but is queued in memory +instead. Messages are batched and flushed in the background, allowing for much +faster operation. The size of batch and rate of flush can be customized. + +**Flush on demand:** For example, at the end of your program, you'll want to +flush to make sure there's nothing left in the queue. Calling this method will +block the calling thread until there are no messages left in the queue. So, +you'll want to use it as part of your cleanup scripts and avoid using it as +part of the request lifecycle. + +**Error handling:** The SDK allows you to set up a `on_error` callback function +for handling errors when trying to send a batch. + +Here is a complete example, showing the default values of all options: + +```python +def on_error_callback(error, batch): +    ... + +client = create_ingest_client( +    api_key=API_KEY, +    max_queue_size=100000,  # max number of items in the queue before rejecting new items +    threads=2,  # number of worker threads doing the sending +    retries=2,  # max number of retries after failures +    batch_size=100,  # max number of meter records in a batch +    send_interval_in_secs=0.5,  # wait time before sending an incomplete batch +    sleep_interval_in_secs=0.1,  # wait time after failure to send or queue empty +    on_error=on_error_callback,  # handle failures to send a batch +) + +... + +client.meter(...) + +client.flush()  # block and make sure all messages are sent +``` + +### What happens if there are just too many messages? + +If the module detects that it can't flush faster than it's receiving messages, +it'll simply stop accepting new messages. This allows your program to +continually run without ever crashing due to a backed up metering queue. + +### Ingesting through the S3 bucket + +The SDK provides a `metering.ingest.IngestS3Client` so you can send your meter +records to us via the S3 bucket. + +Use of this feature is enabled if you install the library with the `s3` option: +``` +pip install amberflo-metering-python[s3] +``` + +Just pass the S3 bucket credentials to the factory function: +```python +client = create_ingest_client( +    bucket_name=os.environ.get("BUCKET_NAME"), +    access_key=os.environ.get("ACCESS_KEY"), +    secret_key=os.environ.get("SECRET_KEY"), +) +``` + +## :book: Documentation + +General documentation on how to use Amberflo is available at [Product Walkthrough](https://docs.amberflo.io/docs/product-walkthrough). + +The full REST API documentation is available at [API Reference](https://docs.amberflo.io/reference). + +## :scroll: Samples + +Code samples covering different scenarios are available in the [./samples](https://github.com/amberflo/metering-python/blob/main/samples/README.md) folder. + +## :construction_worker: Contributing + +Feel free to open issues and send a pull request. + +Also, check out [CONTRIBUTING.md](https://github.com/amberflo/metering-python/blob/main/CONTRIBUTING.md). + +## :bookmark_tabs: Reference + +### API Clients + +#### [Ingest](https://docs.amberflo.io/reference/post_ingest) + +```python +from metering.ingest import ( +    create_ingest_payload, +    create_ingest_client, +) +``` + +#### [Customer](https://docs.amberflo.io/reference/post_customers) + +```python +from metering.customer import ( +    CustomerApiClient, +    create_customer_payload, +) +``` + +#### [Usage](https://docs.amberflo.io/reference/post_usage) + +```python +from metering.usage import ( +    AggregationType, +    Take, +    TimeGroupingInterval, +    TimeRange, +    UsageApiClient, +    create_usage_query, +    create_all_usage_query, +) +``` + +#### [Customer Portal Session](https://docs.amberflo.io/reference/post_session) + +```python +from metering.customer_portal_session import ( +    CustomerPortalSessionApiClient, +    create_customer_portal_session_payload, +) +``` + +#### [Customer Prepaid Order](https://docs.amberflo.io/reference/post_payments-pricing-amberflo-customer-prepaid) + +```python +from metering.customer_prepaid_order import ( +    BillingPeriod, +    BillingPeriodUnit, +    CustomerPrepaidOrderApiClient, +    create_customer_prepaid_order_payload, +) +``` + +#### [Customer Product Invoice](https://docs.amberflo.io/reference/get_payments-billing-customer-product-invoice) + +```python +from metering.customer_product_invoice import ( +    CustomerProductInvoiceApiClient, +    create_all_invoices_query, +    create_latest_invoice_query, +    create_invoice_query, +) +``` + +#### [Customer Product Plan](https://docs.amberflo.io/reference/post_payments-pricing-amberflo-customer-pricing) + +```python +from metering.customer_product_plan import ( +    CustomerProductPlanApiClient, +    create_customer_product_plan_payload, +) +``` + +### Exceptions + +```python +from metering.exceptions import ApiError +``` + +### Logging + +`amberflo-metering-python` uses the standard Python logging framework. By +default, logging is and set at the `WARNING` level. + +The following loggers are used: + +- `metering.ingest.producer` +- `metering.ingest.s3_client` +- `metering.ingest.consumer` +- `metering.session.ingest_session` +- `metering.session.api_session` + + + + +%prep +%autosetup -n amberflo-metering-python-3.1.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-amberflo-metering-python -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 31 2023 Python_Bot <Python_Bot@openeuler.org> - 3.1.0-1 +- Package Spec generated @@ -0,0 +1 @@ +28267515ad15d976edd7704c88be9060  amberflo-metering-python-3.1.0.tar.gz  | 
