Metadata-Version: 2.1
Name: perseus-restful-api-client-library
Version: 1.4.2
Summary: Perseus RESTful API Client Python Library
Home-page: UNKNOWN
Author: Daniel CAUNE
Author-email: daniel.caune@majormode.com
License: Copyright (C) 2019, Majormode
Platform: any
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Development Status :: 5 - Production/Stable
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Programming Language :: Python
Requires-Python: >=3
Description-Content-Type: text/markdown
Requires-Dist: perseus-core-library
Requires-Dist: requests

# Perseus RESTful API Client Python Library

Repository of classes that provide Pythonic interfaces to connect to a RESTful API server developed with Perseus RESTful API Framework.

## Python Library `Poster 0.8.1`

Note: this library includes a modified version of `poster 0.8.1`, which original version provides a set of classes and functions to facilitate making HTTP POST (or PUT) requests using the standard multipart/form-data encoding.

The original library `poster 0.8.1` cannot be used to upload file uploaded into memory (i.e., stream-to-memory), like for instance django `InMemoryUploadedFile`. The reason is that such file-like object doesn't support the method `fileno()` used by the `poster 0.8.1` to determine the size of the file-like object to upload in Python module `poster.encode`:

```python
if fileobj is not None and filesize is None:
    # Try and determine the file size
    try:
        self.filesize = os.fstat(fileobj.fileno()).st_size
    except (OSError, AttributeError):
        try:
            fileobj.seek(0, 2)
            self.filesize = fileobj.tell()
            fileobj.seek(0)
        except:
            raise ValueError("Could not determine filesize")
```

This code raises the exception `io.UnsupportedOperation` that `poster 0.8.1` doesn't catch. Chris AtLee included Alon Hammerman's patch in the tag `tip` of the library ``poster`, for catching the`io.UnsupportedOperation for fileno` on 2013-03-12:

```python
try:
    from io import UnsupportedOperation
except ImportError:
    UnsupportedOperation = None

(...)

if fileobj is not None and filesize is None:
    # Try and determine the file size
    try:
        self.filesize = os.fstat(fileobj.fileno()).st_size
    except (OSError, AttributeError, UnsupportedOperation):
        try:
            fileobj.seek(0, 2)
            self.filesize = fileobj.tell()
            fileobj.seek(0)
        except:
            raise ValueError("Could not determine filesize")
```

However, the latest version of `poster` installable with `pip` is still `0.8.1`.


