summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-15 03:27:53 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-15 03:27:53 +0000
commit5db7f66993f71d1b30cf80312d62021026c56adc (patch)
treef0daffc8560e6be2427ba02525590ee598f6c64c
parent880f9fdf3f944d9fb27588b4adaa75ecff588a0d (diff)
automatic import of python-gspread-asyncio
-rw-r--r--.gitignore1
-rw-r--r--python-gspread-asyncio.spec356
-rw-r--r--sources1
3 files changed, 358 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..3695f88 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/gspread_asyncio-1.8.1.tar.gz
diff --git a/python-gspread-asyncio.spec b/python-gspread-asyncio.spec
new file mode 100644
index 0000000..dbe6031
--- /dev/null
+++ b/python-gspread-asyncio.spec
@@ -0,0 +1,356 @@
+%global _empty_manifest_terminate_build 0
+Name: python-gspread-asyncio
+Version: 1.8.1
+Release: 1
+Summary: asyncio wrapper for burnash's Google Spreadsheet API library, gspread
+License: MIT
+URL: https://github.com/dgilman/gspread_asyncio
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/e5/7c/230958d09cc2bcf06b89d0ffb50ee032d570c97554099cfd36ec1bbd1f46/gspread_asyncio-1.8.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-requests
+Requires: python3-gspread
+
+%description
+# gspread_asyncio
+
+An [asyncio wrapper](https://docs.python.org/3/library/asyncio.html) for [burnash's excellent Google Spreadsheet API library](https://github.com/burnash/gspread). `gspread_asyncio` isn't just a plain asyncio wrapper around the `gspread` API, it implements several useful and helpful features on top of those APIs. It's useful for long-running processes and one-off scripts.
+
+Requires Python >= 3.7.
+
+[![Documentation Status](https://readthedocs.org/projects/gspread-asyncio/badge/?version=latest)](https://gspread-asyncio.readthedocs.io/en/latest/?badge=latest) ![CI status](https://github.com/dgilman/gspread_asyncio/actions/workflows/ci.yml/badge.svg)
+
+
+## Features
+
+* Complete async wrapping of the `gspread` API. All `gspread` API calls are run off the main thread in a threadpool executor.
+* Internal caching and reuse of `gspread` `Client`/`Spreadsheet`/`Worksheet` objects.
+* Automatic renewal of expired credentials.
+* Automatic retries of spurious failures from Google's servers (HTTP 5xx).
+* Automatic rate limiting with defaults set to Google's default API limits.
+* Many methods that don't need to return a value can optionally return an already-scheduled `Future` (the `nowait` kwarg). You can ignore that future, allowing forward progress on your calling coroutine while the asyncio event loop schedules and runs the Google Spreadsheet API call at a later time for you.
+
+## Example usage
+
+```python
+import asyncio
+
+import gspread_asyncio
+
+# from google-auth package
+from google.oauth2.service_account import Credentials
+
+# First, set up a callback function that fetches our credentials off the disk.
+# gspread_asyncio needs this to re-authenticate when credentials expire.
+
+def get_creds():
+ # To obtain a service account JSON file, follow these steps:
+ # https://gspread.readthedocs.io/en/latest/oauth2.html#for-bots-using-service-account
+ creds = Credentials.from_service_account_file("serviceacct_spreadsheet.json")
+ scoped = creds.with_scopes([
+ "https://spreadsheets.google.com/feeds",
+ "https://www.googleapis.com/auth/spreadsheets",
+ "https://www.googleapis.com/auth/drive",
+ ])
+ return scoped
+
+# Create an AsyncioGspreadClientManager object which
+# will give us access to the Spreadsheet API.
+
+agcm = gspread_asyncio.AsyncioGspreadClientManager(get_creds)
+
+# Here's an example of how you use the API:
+
+async def example(agcm):
+ # Always authorize first.
+ # If you have a long-running program call authorize() repeatedly.
+ agc = await agcm.authorize()
+
+ ss = await agc.create("Test Spreadsheet")
+ print("Spreadsheet URL: https://docs.google.com/spreadsheets/d/{0}".format(ss.id))
+ print("Open the URL in your browser to see gspread_asyncio in action!")
+
+ # Allow anyone with the URL to write to this spreadsheet.
+ await agc.insert_permission(ss.id, None, perm_type="anyone", role="writer")
+
+ # Create a new spreadsheet but also grab a reference to the default one.
+ ws = await ss.add_worksheet("My Test Worksheet", 10, 5)
+ zero_ws = await ss.get_worksheet(0)
+
+ # Write some stuff to both spreadsheets.
+ for row in range(1, 11):
+ for col in range(1, 6):
+ val = "{0}/{1}".format(row, col)
+ await ws.update_cell(row, col, val + " ws")
+ await zero_ws.update_cell(row, col, val + " zero ws")
+ print("All done!")
+
+# Turn on debugging if you're new to asyncio!
+asyncio.run(example(agcm), debug=True)
+```
+
+## Observational notes and gotchas
+
+* This module does not define its own exceptions, it propagates instances of `gspread.exceptions.GSpreadException`.
+* Always call `AsyncioGspreadClientManager.authorize()`, `AsyncioGspreadClient.open_*()` and `AsyncioGspreadSpreadsheet.get_worksheet()` before doing any work on a spreadsheet. These methods keep an internal cache so it is painless to call them many times, even inside of a loop. This makes sure you always have a valid set of authentication credentials from Google.
+* The only object you should store in your application is the `AsyncioGspreadClientManager` (`agcm`).
+* Right now the `gspread` library does not support bulk appends of rows or bulk changes of cells. When this is done `gspread_asyncio` will support batching of these Google API calls without any changes to the Python `gspread_asyncio` API.
+* I came up with the default 1.1 second delay between API calls (the `gspread_delay` kwarg) after extensive experimentation. The official API rate limit is one call every second but however Google measures these things introduces a tiny bit of jitter that will get you rate blocked if you ride that limit exactly.
+* Google's service reliability on these endpoints is surprisingly bad. There are frequent HTTP 500s and the retry logic will save your butt in long-running scripts or short, one-shot, one-off ones.
+* Experimentation also found that Google's credentials expire after an hour and the default `reauth_interval` of 45 minutes takes care of that just fine.
+
+## License
+
+MIT
+
+## Sponsorship
+
+Development of gspread_asyncio is sponsored by [Pro Football History.com, your source for NFL coaching biographies.](https://pro-football-history.com)
+
+
+%package -n python3-gspread-asyncio
+Summary: asyncio wrapper for burnash's Google Spreadsheet API library, gspread
+Provides: python-gspread-asyncio
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-gspread-asyncio
+# gspread_asyncio
+
+An [asyncio wrapper](https://docs.python.org/3/library/asyncio.html) for [burnash's excellent Google Spreadsheet API library](https://github.com/burnash/gspread). `gspread_asyncio` isn't just a plain asyncio wrapper around the `gspread` API, it implements several useful and helpful features on top of those APIs. It's useful for long-running processes and one-off scripts.
+
+Requires Python >= 3.7.
+
+[![Documentation Status](https://readthedocs.org/projects/gspread-asyncio/badge/?version=latest)](https://gspread-asyncio.readthedocs.io/en/latest/?badge=latest) ![CI status](https://github.com/dgilman/gspread_asyncio/actions/workflows/ci.yml/badge.svg)
+
+
+## Features
+
+* Complete async wrapping of the `gspread` API. All `gspread` API calls are run off the main thread in a threadpool executor.
+* Internal caching and reuse of `gspread` `Client`/`Spreadsheet`/`Worksheet` objects.
+* Automatic renewal of expired credentials.
+* Automatic retries of spurious failures from Google's servers (HTTP 5xx).
+* Automatic rate limiting with defaults set to Google's default API limits.
+* Many methods that don't need to return a value can optionally return an already-scheduled `Future` (the `nowait` kwarg). You can ignore that future, allowing forward progress on your calling coroutine while the asyncio event loop schedules and runs the Google Spreadsheet API call at a later time for you.
+
+## Example usage
+
+```python
+import asyncio
+
+import gspread_asyncio
+
+# from google-auth package
+from google.oauth2.service_account import Credentials
+
+# First, set up a callback function that fetches our credentials off the disk.
+# gspread_asyncio needs this to re-authenticate when credentials expire.
+
+def get_creds():
+ # To obtain a service account JSON file, follow these steps:
+ # https://gspread.readthedocs.io/en/latest/oauth2.html#for-bots-using-service-account
+ creds = Credentials.from_service_account_file("serviceacct_spreadsheet.json")
+ scoped = creds.with_scopes([
+ "https://spreadsheets.google.com/feeds",
+ "https://www.googleapis.com/auth/spreadsheets",
+ "https://www.googleapis.com/auth/drive",
+ ])
+ return scoped
+
+# Create an AsyncioGspreadClientManager object which
+# will give us access to the Spreadsheet API.
+
+agcm = gspread_asyncio.AsyncioGspreadClientManager(get_creds)
+
+# Here's an example of how you use the API:
+
+async def example(agcm):
+ # Always authorize first.
+ # If you have a long-running program call authorize() repeatedly.
+ agc = await agcm.authorize()
+
+ ss = await agc.create("Test Spreadsheet")
+ print("Spreadsheet URL: https://docs.google.com/spreadsheets/d/{0}".format(ss.id))
+ print("Open the URL in your browser to see gspread_asyncio in action!")
+
+ # Allow anyone with the URL to write to this spreadsheet.
+ await agc.insert_permission(ss.id, None, perm_type="anyone", role="writer")
+
+ # Create a new spreadsheet but also grab a reference to the default one.
+ ws = await ss.add_worksheet("My Test Worksheet", 10, 5)
+ zero_ws = await ss.get_worksheet(0)
+
+ # Write some stuff to both spreadsheets.
+ for row in range(1, 11):
+ for col in range(1, 6):
+ val = "{0}/{1}".format(row, col)
+ await ws.update_cell(row, col, val + " ws")
+ await zero_ws.update_cell(row, col, val + " zero ws")
+ print("All done!")
+
+# Turn on debugging if you're new to asyncio!
+asyncio.run(example(agcm), debug=True)
+```
+
+## Observational notes and gotchas
+
+* This module does not define its own exceptions, it propagates instances of `gspread.exceptions.GSpreadException`.
+* Always call `AsyncioGspreadClientManager.authorize()`, `AsyncioGspreadClient.open_*()` and `AsyncioGspreadSpreadsheet.get_worksheet()` before doing any work on a spreadsheet. These methods keep an internal cache so it is painless to call them many times, even inside of a loop. This makes sure you always have a valid set of authentication credentials from Google.
+* The only object you should store in your application is the `AsyncioGspreadClientManager` (`agcm`).
+* Right now the `gspread` library does not support bulk appends of rows or bulk changes of cells. When this is done `gspread_asyncio` will support batching of these Google API calls without any changes to the Python `gspread_asyncio` API.
+* I came up with the default 1.1 second delay between API calls (the `gspread_delay` kwarg) after extensive experimentation. The official API rate limit is one call every second but however Google measures these things introduces a tiny bit of jitter that will get you rate blocked if you ride that limit exactly.
+* Google's service reliability on these endpoints is surprisingly bad. There are frequent HTTP 500s and the retry logic will save your butt in long-running scripts or short, one-shot, one-off ones.
+* Experimentation also found that Google's credentials expire after an hour and the default `reauth_interval` of 45 minutes takes care of that just fine.
+
+## License
+
+MIT
+
+## Sponsorship
+
+Development of gspread_asyncio is sponsored by [Pro Football History.com, your source for NFL coaching biographies.](https://pro-football-history.com)
+
+
+%package help
+Summary: Development documents and examples for gspread-asyncio
+Provides: python3-gspread-asyncio-doc
+%description help
+# gspread_asyncio
+
+An [asyncio wrapper](https://docs.python.org/3/library/asyncio.html) for [burnash's excellent Google Spreadsheet API library](https://github.com/burnash/gspread). `gspread_asyncio` isn't just a plain asyncio wrapper around the `gspread` API, it implements several useful and helpful features on top of those APIs. It's useful for long-running processes and one-off scripts.
+
+Requires Python >= 3.7.
+
+[![Documentation Status](https://readthedocs.org/projects/gspread-asyncio/badge/?version=latest)](https://gspread-asyncio.readthedocs.io/en/latest/?badge=latest) ![CI status](https://github.com/dgilman/gspread_asyncio/actions/workflows/ci.yml/badge.svg)
+
+
+## Features
+
+* Complete async wrapping of the `gspread` API. All `gspread` API calls are run off the main thread in a threadpool executor.
+* Internal caching and reuse of `gspread` `Client`/`Spreadsheet`/`Worksheet` objects.
+* Automatic renewal of expired credentials.
+* Automatic retries of spurious failures from Google's servers (HTTP 5xx).
+* Automatic rate limiting with defaults set to Google's default API limits.
+* Many methods that don't need to return a value can optionally return an already-scheduled `Future` (the `nowait` kwarg). You can ignore that future, allowing forward progress on your calling coroutine while the asyncio event loop schedules and runs the Google Spreadsheet API call at a later time for you.
+
+## Example usage
+
+```python
+import asyncio
+
+import gspread_asyncio
+
+# from google-auth package
+from google.oauth2.service_account import Credentials
+
+# First, set up a callback function that fetches our credentials off the disk.
+# gspread_asyncio needs this to re-authenticate when credentials expire.
+
+def get_creds():
+ # To obtain a service account JSON file, follow these steps:
+ # https://gspread.readthedocs.io/en/latest/oauth2.html#for-bots-using-service-account
+ creds = Credentials.from_service_account_file("serviceacct_spreadsheet.json")
+ scoped = creds.with_scopes([
+ "https://spreadsheets.google.com/feeds",
+ "https://www.googleapis.com/auth/spreadsheets",
+ "https://www.googleapis.com/auth/drive",
+ ])
+ return scoped
+
+# Create an AsyncioGspreadClientManager object which
+# will give us access to the Spreadsheet API.
+
+agcm = gspread_asyncio.AsyncioGspreadClientManager(get_creds)
+
+# Here's an example of how you use the API:
+
+async def example(agcm):
+ # Always authorize first.
+ # If you have a long-running program call authorize() repeatedly.
+ agc = await agcm.authorize()
+
+ ss = await agc.create("Test Spreadsheet")
+ print("Spreadsheet URL: https://docs.google.com/spreadsheets/d/{0}".format(ss.id))
+ print("Open the URL in your browser to see gspread_asyncio in action!")
+
+ # Allow anyone with the URL to write to this spreadsheet.
+ await agc.insert_permission(ss.id, None, perm_type="anyone", role="writer")
+
+ # Create a new spreadsheet but also grab a reference to the default one.
+ ws = await ss.add_worksheet("My Test Worksheet", 10, 5)
+ zero_ws = await ss.get_worksheet(0)
+
+ # Write some stuff to both spreadsheets.
+ for row in range(1, 11):
+ for col in range(1, 6):
+ val = "{0}/{1}".format(row, col)
+ await ws.update_cell(row, col, val + " ws")
+ await zero_ws.update_cell(row, col, val + " zero ws")
+ print("All done!")
+
+# Turn on debugging if you're new to asyncio!
+asyncio.run(example(agcm), debug=True)
+```
+
+## Observational notes and gotchas
+
+* This module does not define its own exceptions, it propagates instances of `gspread.exceptions.GSpreadException`.
+* Always call `AsyncioGspreadClientManager.authorize()`, `AsyncioGspreadClient.open_*()` and `AsyncioGspreadSpreadsheet.get_worksheet()` before doing any work on a spreadsheet. These methods keep an internal cache so it is painless to call them many times, even inside of a loop. This makes sure you always have a valid set of authentication credentials from Google.
+* The only object you should store in your application is the `AsyncioGspreadClientManager` (`agcm`).
+* Right now the `gspread` library does not support bulk appends of rows or bulk changes of cells. When this is done `gspread_asyncio` will support batching of these Google API calls without any changes to the Python `gspread_asyncio` API.
+* I came up with the default 1.1 second delay between API calls (the `gspread_delay` kwarg) after extensive experimentation. The official API rate limit is one call every second but however Google measures these things introduces a tiny bit of jitter that will get you rate blocked if you ride that limit exactly.
+* Google's service reliability on these endpoints is surprisingly bad. There are frequent HTTP 500s and the retry logic will save your butt in long-running scripts or short, one-shot, one-off ones.
+* Experimentation also found that Google's credentials expire after an hour and the default `reauth_interval` of 45 minutes takes care of that just fine.
+
+## License
+
+MIT
+
+## Sponsorship
+
+Development of gspread_asyncio is sponsored by [Pro Football History.com, your source for NFL coaching biographies.](https://pro-football-history.com)
+
+
+%prep
+%autosetup -n gspread-asyncio-1.8.1
+
+%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-gspread-asyncio -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon May 15 2023 Python_Bot <Python_Bot@openeuler.org> - 1.8.1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..34ac72d
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+eec3551c731026cb60b4bc25cde3ef56 gspread_asyncio-1.8.1.tar.gz