diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-05 13:32:55 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-05 13:32:55 +0000 |
commit | 958f50d735781b3355061bce816d676c61643e6e (patch) | |
tree | 4e390f1c991eaa4693d79125dafe51406fc8f969 | |
parent | ba75c2eb4611f31d902455398ea275ed7cdcd05e (diff) |
automatic import of python-aiocsvopeneuler20.03
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-aiocsv.spec | 620 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 622 insertions, 0 deletions
@@ -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 @@ -0,0 +1 @@ +3b3b7d54e4f0dc6dfb5a56b7810baf8e aiocsv-1.2.4.tar.gz |