summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 13:32:55 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 13:32:55 +0000
commit958f50d735781b3355061bce816d676c61643e6e (patch)
tree4e390f1c991eaa4693d79125dafe51406fc8f969
parentba75c2eb4611f31d902455398ea275ed7cdcd05e (diff)
automatic import of python-aiocsvopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-aiocsv.spec620
-rw-r--r--sources1
3 files changed, 622 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..a3b217b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/aiocsv-1.2.4.tar.gz
diff --git a/python-aiocsv.spec b/python-aiocsv.spec
new file mode 100644
index 0000000..2e2170a
--- /dev/null
+++ b/python-aiocsv.spec
@@ -0,0 +1,620 @@
+%global _empty_manifest_terminate_build 0
+Name: python-aiocsv
+Version: 1.2.4
+Release: 1
+Summary: Asynchronous CSV reading/writing
+License: MIT
+URL: https://github.com/MKuranowski/aiocsv
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/81/5d/23f4e651058c2d83edbe75851ceb0295d744d62d531c14e295a1434554eb/aiocsv-1.2.4.tar.gz
+
+
+%description
+# aiocsv
+
+Asynchronous CSV reading and writing.
+
+
+## Installation
+
+Python 3.6+ is required.
+`pip3 install aiocsv`
+
+
+## Usage
+
+AsyncReader & AsyncDictReader accept any object that has a `read(size: int)` coroutine,
+which should return a string.
+
+AsyncWriter & AsyncDictWriter accept any object that has a `write(b: str)` coroutine.
+
+Reading is implemented using a custom CSV parser, which should behave exactly like the CPython parser.
+
+Writing is implemented using the synchronous csv.writer and csv.DictWriter objects -
+the serializers write data to a StringIO, and that buffer is then rewritten to the underlaying
+asynchronous file.
+
+
+## Example
+
+Example usage with [aiofiles](https://pypi.org/project/aiofiles/).
+
+```python
+import asyncio
+import csv
+
+import aiofiles
+from aiocsv import AsyncReader, AsyncDictReader, AsyncWriter, AsyncDictWriter
+
+async def main():
+ # simple reading
+ async with aiofiles.open("some_file.csv", mode="r", encoding="utf-8", newline="") as afp:
+ async for row in AsyncReader(afp):
+ print(row) # row is a list
+
+ # dict reading, tab-separated
+ async with aiofiles.open("some_other_file.tsv", mode="r", encoding="utf-8", newline="") as afp:
+ async for row in AsyncDictReader(afp, delimiter="\t"):
+ print(row) # row is a dict
+
+ # simple writing, "unix"-dialect
+ async with aiofiles.open("new_file.csv", mode="w", encoding="utf-8", newline="") as afp:
+ writer = AsyncWriter(afp, dialect="unix")
+ await writer.writerow(["name", "age"])
+ await writer.writerows([
+ ["John", 26], ["Sasha", 42], ["Hana", 37]
+ ])
+
+ # dict writing, all quoted, "NULL" for missing fields
+ async with aiofiles.open("new_file2.csv", mode="w", encoding="utf-8", newline="") as afp:
+ writer = AsyncDictWriter(afp, ["name", "age"], restval="NULL", quoting=csv.QUOTE_ALL)
+ await writer.writeheader()
+ await writer.writerow({"name": "John", "age": 26})
+ await writer.writerows([
+ {"name": "Sasha", "age": 42},
+ {"name": "Hana"}
+ ])
+
+asyncio.run(main())
+```
+
+
+## Reference
+
+
+### aiocsv.AsyncReader
+`AsyncReader(asyncfile: aiocsv.protocols.WithAsyncRead, **csvreaderparams)`
+
+An object that iterates over lines in given asynchronous file.
+Additional keyword arguments are understood as dialect parameters.
+
+Iterating over this object returns parsed CSV rows (`List[str]`).
+
+*Methods*:
+- `__aiter__(self) -> self`
+- `async __anext__(self) -> List[str]`
+
+*Properties*:
+- `dialect`: The csv.Dialect used when parsing
+
+*Read-only properties*:
+- `line_num`: Not implemented in aiocsv - issues a warning and always returns -1.
+
+
+### aiocsv.AsyncDictReader
+```
+AsyncDictReader(asyncfile: aiocsv.protocols.WithAsyncRead,
+ fieldnames: Optional[Sequence[str]] = None, restkey: Optional[str] = None, restval: Optional[str] = None, **csvreaderparams)
+```
+
+An object that iterates over lines in given asynchronous file.
+All arguments work exactly the same like in csv.DictReader.
+
+Iterating over this object returns parsed CSV rows (`Dict[str, str]`).
+
+*Methods*:
+- `__aiter__(self) -> self`
+- `async __anext__(self) -> Dict[str, str]`
+
+*Properties*:
+- `fieldnames`: field names used when converting rows to dictionaries
+ **⚠️** Unlike csv.DictReader, if not provided in the constructor, at least one row has to be retrieved before getting the fieldnames.
+ ```py
+ reader = csv.DictReader(some_file)
+ reader.fieldnames # ["cells", "from", "the", "header"]
+
+ areader = aiofiles.AsyncDictReader(same_file_but_async)
+ areader.fieldnames # ⚠️ None
+ await areader.__anext__()
+ areader.fieldnames # ["cells", "from", "the", "header"]
+ ```
+- `restkey`: If a row has more cells then the header, all remaining cells are stored under
+ this key in the returned dictionary. Defaults to `None`.
+- `restval`: If a row has less cells then the header, then missing keys will use this
+ value. Defaults to `None`.
+- `reader`: Underlaying `aiofiles.AsyncReader` instance
+
+*Read-only properties*:
+- `dialect`: Link to `self.reader.dialect` - the current csv.Dialect
+- `line_num`: Not implemented in aiocsv - issues a warning and always returns -1
+
+
+### aiocsv.AsyncWriter
+`AsyncWriter(asyncfile: aiocsv.protocols.WithAsyncWrite, **csvwriterparams)`
+
+An object that writes csv rows to the given asynchronous file.
+In this object "row" is a sequence of values.
+
+Additional keyword arguments are passed to the underlying csv.writer instance.
+
+*Methods*:
+- `async writerow(self, row: Iterable[Any]) -> None`
+ Writes one row to the specified file.
+
+- `async writerows(self, rows: Iterable[Iterable[Any]]) -> None`
+ Writes multiple rows to the specified file.
+
+ All rows are temporarly stored in RAM before actually being written to the file,
+ so don't provide a generator of loads of rows.
+
+*Readonly properties*:
+- `dialect`: Link to underlying's csv.reader's `dialect` attribute
+
+
+### aiocsv.AsyncDictWriter
+`AsyncDictWriter(asyncfile: aiocsv.protocols.WithAsyncWrite, fieldnames: Sequence[str], **csvdictwriterparams)`
+
+An object that writes csv rows to the given asynchronous file.
+In this object "row" is a mapping from fieldnames to values.
+
+Additional keyword arguments are passed to the underlying csv.DictWriter instance.
+
+*Methods*:
+- `async writeheader(self) -> None`
+ Writes header row to the specified file.
+
+- `async writerow(self, row: Mapping[str, Any]) -> None`
+ Writes one row to the specified file.
+
+- `async writerows(self, rows: Iterable[Mapping[str, Any]]) -> None`
+ Writes multiple rows to the specified file.
+
+ All rows are temporarly stored in RAM before actually being written to the file,
+ so don't provide a generator of loads of rows.
+
+*Readonly properties*:
+- `dialect`: Link to underlying's csv.reader's `dialect` attribute
+
+
+### aiocsv.protocols.WithAsyncRead
+A `typing.Protocol` describing an asynchronous file, which can be read.
+
+
+### aiocsv.protocols.WithAsyncWrite
+A `typing.Protocol` describing an asynchronous file, which can be written to.
+
+
+%package -n python3-aiocsv
+Summary: Asynchronous CSV reading/writing
+Provides: python-aiocsv
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+BuildRequires: python3-cffi
+BuildRequires: gcc
+BuildRequires: gdb
+%description -n python3-aiocsv
+# aiocsv
+
+Asynchronous CSV reading and writing.
+
+
+## Installation
+
+Python 3.6+ is required.
+`pip3 install aiocsv`
+
+
+## Usage
+
+AsyncReader & AsyncDictReader accept any object that has a `read(size: int)` coroutine,
+which should return a string.
+
+AsyncWriter & AsyncDictWriter accept any object that has a `write(b: str)` coroutine.
+
+Reading is implemented using a custom CSV parser, which should behave exactly like the CPython parser.
+
+Writing is implemented using the synchronous csv.writer and csv.DictWriter objects -
+the serializers write data to a StringIO, and that buffer is then rewritten to the underlaying
+asynchronous file.
+
+
+## Example
+
+Example usage with [aiofiles](https://pypi.org/project/aiofiles/).
+
+```python
+import asyncio
+import csv
+
+import aiofiles
+from aiocsv import AsyncReader, AsyncDictReader, AsyncWriter, AsyncDictWriter
+
+async def main():
+ # simple reading
+ async with aiofiles.open("some_file.csv", mode="r", encoding="utf-8", newline="") as afp:
+ async for row in AsyncReader(afp):
+ print(row) # row is a list
+
+ # dict reading, tab-separated
+ async with aiofiles.open("some_other_file.tsv", mode="r", encoding="utf-8", newline="") as afp:
+ async for row in AsyncDictReader(afp, delimiter="\t"):
+ print(row) # row is a dict
+
+ # simple writing, "unix"-dialect
+ async with aiofiles.open("new_file.csv", mode="w", encoding="utf-8", newline="") as afp:
+ writer = AsyncWriter(afp, dialect="unix")
+ await writer.writerow(["name", "age"])
+ await writer.writerows([
+ ["John", 26], ["Sasha", 42], ["Hana", 37]
+ ])
+
+ # dict writing, all quoted, "NULL" for missing fields
+ async with aiofiles.open("new_file2.csv", mode="w", encoding="utf-8", newline="") as afp:
+ writer = AsyncDictWriter(afp, ["name", "age"], restval="NULL", quoting=csv.QUOTE_ALL)
+ await writer.writeheader()
+ await writer.writerow({"name": "John", "age": 26})
+ await writer.writerows([
+ {"name": "Sasha", "age": 42},
+ {"name": "Hana"}
+ ])
+
+asyncio.run(main())
+```
+
+
+## Reference
+
+
+### aiocsv.AsyncReader
+`AsyncReader(asyncfile: aiocsv.protocols.WithAsyncRead, **csvreaderparams)`
+
+An object that iterates over lines in given asynchronous file.
+Additional keyword arguments are understood as dialect parameters.
+
+Iterating over this object returns parsed CSV rows (`List[str]`).
+
+*Methods*:
+- `__aiter__(self) -> self`
+- `async __anext__(self) -> List[str]`
+
+*Properties*:
+- `dialect`: The csv.Dialect used when parsing
+
+*Read-only properties*:
+- `line_num`: Not implemented in aiocsv - issues a warning and always returns -1.
+
+
+### aiocsv.AsyncDictReader
+```
+AsyncDictReader(asyncfile: aiocsv.protocols.WithAsyncRead,
+ fieldnames: Optional[Sequence[str]] = None, restkey: Optional[str] = None, restval: Optional[str] = None, **csvreaderparams)
+```
+
+An object that iterates over lines in given asynchronous file.
+All arguments work exactly the same like in csv.DictReader.
+
+Iterating over this object returns parsed CSV rows (`Dict[str, str]`).
+
+*Methods*:
+- `__aiter__(self) -> self`
+- `async __anext__(self) -> Dict[str, str]`
+
+*Properties*:
+- `fieldnames`: field names used when converting rows to dictionaries
+ **⚠️** Unlike csv.DictReader, if not provided in the constructor, at least one row has to be retrieved before getting the fieldnames.
+ ```py
+ reader = csv.DictReader(some_file)
+ reader.fieldnames # ["cells", "from", "the", "header"]
+
+ areader = aiofiles.AsyncDictReader(same_file_but_async)
+ areader.fieldnames # ⚠️ None
+ await areader.__anext__()
+ areader.fieldnames # ["cells", "from", "the", "header"]
+ ```
+- `restkey`: If a row has more cells then the header, all remaining cells are stored under
+ this key in the returned dictionary. Defaults to `None`.
+- `restval`: If a row has less cells then the header, then missing keys will use this
+ value. Defaults to `None`.
+- `reader`: Underlaying `aiofiles.AsyncReader` instance
+
+*Read-only properties*:
+- `dialect`: Link to `self.reader.dialect` - the current csv.Dialect
+- `line_num`: Not implemented in aiocsv - issues a warning and always returns -1
+
+
+### aiocsv.AsyncWriter
+`AsyncWriter(asyncfile: aiocsv.protocols.WithAsyncWrite, **csvwriterparams)`
+
+An object that writes csv rows to the given asynchronous file.
+In this object "row" is a sequence of values.
+
+Additional keyword arguments are passed to the underlying csv.writer instance.
+
+*Methods*:
+- `async writerow(self, row: Iterable[Any]) -> None`
+ Writes one row to the specified file.
+
+- `async writerows(self, rows: Iterable[Iterable[Any]]) -> None`
+ Writes multiple rows to the specified file.
+
+ All rows are temporarly stored in RAM before actually being written to the file,
+ so don't provide a generator of loads of rows.
+
+*Readonly properties*:
+- `dialect`: Link to underlying's csv.reader's `dialect` attribute
+
+
+### aiocsv.AsyncDictWriter
+`AsyncDictWriter(asyncfile: aiocsv.protocols.WithAsyncWrite, fieldnames: Sequence[str], **csvdictwriterparams)`
+
+An object that writes csv rows to the given asynchronous file.
+In this object "row" is a mapping from fieldnames to values.
+
+Additional keyword arguments are passed to the underlying csv.DictWriter instance.
+
+*Methods*:
+- `async writeheader(self) -> None`
+ Writes header row to the specified file.
+
+- `async writerow(self, row: Mapping[str, Any]) -> None`
+ Writes one row to the specified file.
+
+- `async writerows(self, rows: Iterable[Mapping[str, Any]]) -> None`
+ Writes multiple rows to the specified file.
+
+ All rows are temporarly stored in RAM before actually being written to the file,
+ so don't provide a generator of loads of rows.
+
+*Readonly properties*:
+- `dialect`: Link to underlying's csv.reader's `dialect` attribute
+
+
+### aiocsv.protocols.WithAsyncRead
+A `typing.Protocol` describing an asynchronous file, which can be read.
+
+
+### aiocsv.protocols.WithAsyncWrite
+A `typing.Protocol` describing an asynchronous file, which can be written to.
+
+
+%package help
+Summary: Development documents and examples for aiocsv
+Provides: python3-aiocsv-doc
+%description help
+# aiocsv
+
+Asynchronous CSV reading and writing.
+
+
+## Installation
+
+Python 3.6+ is required.
+`pip3 install aiocsv`
+
+
+## Usage
+
+AsyncReader & AsyncDictReader accept any object that has a `read(size: int)` coroutine,
+which should return a string.
+
+AsyncWriter & AsyncDictWriter accept any object that has a `write(b: str)` coroutine.
+
+Reading is implemented using a custom CSV parser, which should behave exactly like the CPython parser.
+
+Writing is implemented using the synchronous csv.writer and csv.DictWriter objects -
+the serializers write data to a StringIO, and that buffer is then rewritten to the underlaying
+asynchronous file.
+
+
+## Example
+
+Example usage with [aiofiles](https://pypi.org/project/aiofiles/).
+
+```python
+import asyncio
+import csv
+
+import aiofiles
+from aiocsv import AsyncReader, AsyncDictReader, AsyncWriter, AsyncDictWriter
+
+async def main():
+ # simple reading
+ async with aiofiles.open("some_file.csv", mode="r", encoding="utf-8", newline="") as afp:
+ async for row in AsyncReader(afp):
+ print(row) # row is a list
+
+ # dict reading, tab-separated
+ async with aiofiles.open("some_other_file.tsv", mode="r", encoding="utf-8", newline="") as afp:
+ async for row in AsyncDictReader(afp, delimiter="\t"):
+ print(row) # row is a dict
+
+ # simple writing, "unix"-dialect
+ async with aiofiles.open("new_file.csv", mode="w", encoding="utf-8", newline="") as afp:
+ writer = AsyncWriter(afp, dialect="unix")
+ await writer.writerow(["name", "age"])
+ await writer.writerows([
+ ["John", 26], ["Sasha", 42], ["Hana", 37]
+ ])
+
+ # dict writing, all quoted, "NULL" for missing fields
+ async with aiofiles.open("new_file2.csv", mode="w", encoding="utf-8", newline="") as afp:
+ writer = AsyncDictWriter(afp, ["name", "age"], restval="NULL", quoting=csv.QUOTE_ALL)
+ await writer.writeheader()
+ await writer.writerow({"name": "John", "age": 26})
+ await writer.writerows([
+ {"name": "Sasha", "age": 42},
+ {"name": "Hana"}
+ ])
+
+asyncio.run(main())
+```
+
+
+## Reference
+
+
+### aiocsv.AsyncReader
+`AsyncReader(asyncfile: aiocsv.protocols.WithAsyncRead, **csvreaderparams)`
+
+An object that iterates over lines in given asynchronous file.
+Additional keyword arguments are understood as dialect parameters.
+
+Iterating over this object returns parsed CSV rows (`List[str]`).
+
+*Methods*:
+- `__aiter__(self) -> self`
+- `async __anext__(self) -> List[str]`
+
+*Properties*:
+- `dialect`: The csv.Dialect used when parsing
+
+*Read-only properties*:
+- `line_num`: Not implemented in aiocsv - issues a warning and always returns -1.
+
+
+### aiocsv.AsyncDictReader
+```
+AsyncDictReader(asyncfile: aiocsv.protocols.WithAsyncRead,
+ fieldnames: Optional[Sequence[str]] = None, restkey: Optional[str] = None, restval: Optional[str] = None, **csvreaderparams)
+```
+
+An object that iterates over lines in given asynchronous file.
+All arguments work exactly the same like in csv.DictReader.
+
+Iterating over this object returns parsed CSV rows (`Dict[str, str]`).
+
+*Methods*:
+- `__aiter__(self) -> self`
+- `async __anext__(self) -> Dict[str, str]`
+
+*Properties*:
+- `fieldnames`: field names used when converting rows to dictionaries
+ **⚠️** Unlike csv.DictReader, if not provided in the constructor, at least one row has to be retrieved before getting the fieldnames.
+ ```py
+ reader = csv.DictReader(some_file)
+ reader.fieldnames # ["cells", "from", "the", "header"]
+
+ areader = aiofiles.AsyncDictReader(same_file_but_async)
+ areader.fieldnames # ⚠️ None
+ await areader.__anext__()
+ areader.fieldnames # ["cells", "from", "the", "header"]
+ ```
+- `restkey`: If a row has more cells then the header, all remaining cells are stored under
+ this key in the returned dictionary. Defaults to `None`.
+- `restval`: If a row has less cells then the header, then missing keys will use this
+ value. Defaults to `None`.
+- `reader`: Underlaying `aiofiles.AsyncReader` instance
+
+*Read-only properties*:
+- `dialect`: Link to `self.reader.dialect` - the current csv.Dialect
+- `line_num`: Not implemented in aiocsv - issues a warning and always returns -1
+
+
+### aiocsv.AsyncWriter
+`AsyncWriter(asyncfile: aiocsv.protocols.WithAsyncWrite, **csvwriterparams)`
+
+An object that writes csv rows to the given asynchronous file.
+In this object "row" is a sequence of values.
+
+Additional keyword arguments are passed to the underlying csv.writer instance.
+
+*Methods*:
+- `async writerow(self, row: Iterable[Any]) -> None`
+ Writes one row to the specified file.
+
+- `async writerows(self, rows: Iterable[Iterable[Any]]) -> None`
+ Writes multiple rows to the specified file.
+
+ All rows are temporarly stored in RAM before actually being written to the file,
+ so don't provide a generator of loads of rows.
+
+*Readonly properties*:
+- `dialect`: Link to underlying's csv.reader's `dialect` attribute
+
+
+### aiocsv.AsyncDictWriter
+`AsyncDictWriter(asyncfile: aiocsv.protocols.WithAsyncWrite, fieldnames: Sequence[str], **csvdictwriterparams)`
+
+An object that writes csv rows to the given asynchronous file.
+In this object "row" is a mapping from fieldnames to values.
+
+Additional keyword arguments are passed to the underlying csv.DictWriter instance.
+
+*Methods*:
+- `async writeheader(self) -> None`
+ Writes header row to the specified file.
+
+- `async writerow(self, row: Mapping[str, Any]) -> None`
+ Writes one row to the specified file.
+
+- `async writerows(self, rows: Iterable[Mapping[str, Any]]) -> None`
+ Writes multiple rows to the specified file.
+
+ All rows are temporarly stored in RAM before actually being written to the file,
+ so don't provide a generator of loads of rows.
+
+*Readonly properties*:
+- `dialect`: Link to underlying's csv.reader's `dialect` attribute
+
+
+### aiocsv.protocols.WithAsyncRead
+A `typing.Protocol` describing an asynchronous file, which can be read.
+
+
+### aiocsv.protocols.WithAsyncWrite
+A `typing.Protocol` describing an asynchronous file, which can be written to.
+
+
+%prep
+%autosetup -n aiocsv-1.2.4
+
+%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-aiocsv -f filelist.lst
+%dir %{python3_sitearch}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.2.4-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..b00c49b
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+3b3b7d54e4f0dc6dfb5a56b7810baf8e aiocsv-1.2.4.tar.gz