From 00dc50550fd8fea862c63e497280e2e056c3c257 Mon Sep 17 00:00:00 2001 From: Stijn Van Campenhout Date: Thu, 19 Dec 2019 13:42:26 +0100 Subject: [PATCH] Rename rmapi rmapy --- docs/source/conf.py | 2 +- docs/source/index.rst | 8 +-- docs/source/installation.rst | 4 +- docs/source/modules.rst | 4 +- docs/source/quickstart.rst | 86 ++++++++++++++++----------------- docs/source/rmapi.rst | 40 +++++++-------- {rmapi => rmapy}/__init__.py | 0 {rmapi => rmapy}/api.py | 5 +- {rmapi => rmapy}/collections.py | 0 {rmapi => rmapy}/config.py | 4 +- {rmapi => rmapy}/const.py | 4 +- {rmapi => rmapy}/document.py | 10 ++-- {rmapi => rmapy}/exceptions.py | 0 {rmapi => rmapy}/folder.py | 2 +- {rmapi => rmapy}/meta.py | 0 {rmapi => rmapy}/types.py | 0 setup.py | 12 ++--- 17 files changed, 90 insertions(+), 91 deletions(-) rename {rmapi => rmapy}/__init__.py (100%) rename {rmapi => rmapy}/api.py (99%) rename {rmapi => rmapy}/collections.py (100%) rename {rmapi => rmapy}/config.py (90%) rename {rmapi => rmapy}/const.py (70%) rename {rmapi => rmapy}/document.py (97%) rename {rmapi => rmapy}/exceptions.py (100%) rename {rmapi => rmapy}/folder.py (97%) rename {rmapi => rmapy}/meta.py (100%) rename {rmapi => rmapy}/types.py (100%) diff --git a/docs/source/conf.py b/docs/source/conf.py index 2ef3bae..45eae27 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -18,7 +18,7 @@ sys.path.insert(0, os.path.abspath('../..')) # -- Project information ----------------------------------------------------- -project = 'rmapi' +project = 'rmapy' copyright = '2019, Stijn Van Campenhout' author = 'Stijn Van Campenhout' diff --git a/docs/source/index.rst b/docs/source/index.rst index e3f63e4..b72685f 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,9 +1,9 @@ -.. rmapi documentation master file, created by +.. rmapy documentation master file, created by sphinx-quickstart on Tue Sep 17 19:24:29 2019. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to rmapi's documentation! +Welcome to rmapy's documentation! ================================= This is an (unofficial) Remarkable Cloud API Client written in Python. @@ -50,9 +50,9 @@ API Documentation .. toctree:: :maxdepth: 2 - rmapi + rmapy -.. automodule:: rmapi +.. automodule:: rmapy Indices and tables diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 4349080..3ed327f 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -1,11 +1,11 @@ Pip === -Like any other package, you can install rmapi using pip: +Like any other package, you can install rmapy using pip: .. code-block:: bash - pip install rmapi + pip install rmapy diff --git a/docs/source/modules.rst b/docs/source/modules.rst index 12d31a6..1815457 100644 --- a/docs/source/modules.rst +++ b/docs/source/modules.rst @@ -1,7 +1,7 @@ -rmapi +rmapy ===== .. toctree:: :maxdepth: 4 - rmapi + rmapy diff --git a/docs/source/quickstart.rst b/docs/source/quickstart.rst index 2911577..ae4eaf1 100644 --- a/docs/source/quickstart.rst +++ b/docs/source/quickstart.rst @@ -22,20 +22,20 @@ and use the code you see on the webpage :linenos: - from rmapi.api import Client + from rmapy.api import Client - rmapi = Client() + rmapy = Client() # Shoud return False - rmapi.is_authenticated() + rmapy.is_authenticated() # This registers the client as a new device. The received device token is # stored in the users directory in the file ~/.rmapi, the same as with the # go rmapi client. - rmapi.register_device("fkgzzklrs") + rmapy.register_device("fkgzzklrs") # It's always a good idea to refresh the user token everytime you start # a new session. - rmapi.refresh_token() + rmapy.refresh_token() # Shoud return True - rmapi.is_authenticated() + rmapy.is_authenticated() Working with items ~~~~~~~~~~~~~~~~~~ @@ -50,21 +50,21 @@ We can list the items in the Cloud .. code-block:: python :linenos: - >>> from rmapi.api import Client - >>> rmapi = Client() - >>> rmapi.renew_token() + >>> from rmapy.api import Client + >>> rmapy = Client() + >>> rmapy.renew_token() True - >>> collection = rmapi.get_meta_items() + >>> collection = rmapy.get_meta_items() >>> collection - + >>> len(collection) 181 >>> # Count the amount of documents - ... from rmapi.document import Document + ... from rmapy.document import Document >>> len([f for f in collection if isinstance(f, Document)]) 139 >>> # Count the amount of folders - ... from rmapi.folder import Folder + ... from rmapy.folder import Folder >>> len([f for f in collection if isinstance(f, Folder)]) 42 @@ -74,7 +74,7 @@ DocumentType ```````````` A DocumentType is a document. This can be a pdf, epub or notebook. -These types are represented by the object :class:`rmapi.document.Document` +These types are represented by the object :class:`rmapy.document.Document` Changing the metadata is easy @@ -83,28 +83,28 @@ Changing the metadata is easy :linenos: - >>> from rmapi.api import Client - >>> rmapi = Client() - >>> rmapi.renew_token() + >>> from rmapy.api import Client + >>> rmapy = Client() + >>> rmapy.renew_token() True - >>> collection = rmapi.get_meta_items() + >>> collection = rmapy.get_meta_items() >>> doc = [ d for d in collection if d.VissibleName == 'ModernC'][0] >>> doc - + >>> doc.to_dict() {'ID': 'a969fcd6-64b0-4f71-b1ce-d9533ec4a2a3', 'Version': 1, 'Message': '', 'Succes': True, 'BlobURLGet': '', 'BlobURLGetExpires': '0001-01-01T00:00:00Z', 'BlobURLPut': '', 'BlobURLPutExpires': '', 'ModifiedClient': '2019-09-18T20:12:07.206206Z', 'Type': 'DocumentType', 'VissibleName': 'ModernC', 'CurrentPage': 0, 'Bookmarked': False, 'Parent': ''} >>> doc.VissibleName = "Modern C: The book of wisdom" >>> # push the changes back to the Remarkable Cloud - ... rmapi.update_metadata(doc) + ... rmapy.update_metadata(doc) True - >>> collection = rmapi.get_meta_items() + >>> collection = rmapy.get_meta_items() >>> doc = [ d for d in docs if d.VissibleName == 'ModernC'][0] Traceback (most recent call last): File "", line 1, in IndexError: list index out of range >>> doc = [ d for d in docs if d.VissibleName == 'Modern C: The book of wisdom'][0] >>> doc - + >>> doc.to_dict() {'ID': 'a969fcd6-64b0-4f71-b1ce-d9533ec4a2a3', 'Version': 1, 'Message': '', 'Succes': True, 'BlobURLGet': '', 'BlobURLGetExpires': '0001-01-01T00:00:00Z', 'BlobURLPut': '', 'BlobURLPutExpires': '', 'ModifiedClient': '2019-09-18T20:12:07.206206Z', 'Type': 'DocumentType', 'VissibleName': 'Modern C: The book of wisdom', 'CurrentPage': 0, 'Bookmarked': False, 'Parent': ''} @@ -114,7 +114,7 @@ CollectionType A CollectionType is a Folder. -These types are represented by the object :class:`rmapi.folder.Folder` +These types are represented by the object :class:`rmapy.folder.Folder` Working with folders is easy! @@ -122,42 +122,42 @@ Working with folders is easy! :linenos: - >>> from rmapi.api import Client - >>> rmapi = Client() - >>> rmapi.renew_token() + >>> from rmapy.api import Client + >>> rmapy = Client() + >>> rmapy.renew_token() True - >>> collection = rmapi.get_meta_items() + >>> collection = rmapy.get_meta_items() >>> collection - - >>> from rmapi.folder import Folder + + >>> from rmapy.folder import Folder >>> # Get all the folders. Note that the fs of Remarkable is flat in the cloud ... folders = [ f for f in collection if isinstance(f, Folder) ] >>> folders - [, , ...] + [, , ...] >>> # Get the root folders ... root = [ f for f in folders if f.Parent == "" ] >>> root - [, , ...] + [, , ...] >>> # Create a new folder ... new_folder = Folder("New Folder") >>> new_folder - - >>> rmapi.create_folder(new_folder) + + >>> rmapy.create_folder(new_folder) True >>> # verify - ... [ f for f in rmapi.get_meta_items() if f.VissibleName == "New Folder" ] - [] - >>> [ f for f in rmapi.get_meta_items() if f.VissibleName == "New Folder" ][0].ID == new_folder.ID + ... [ f for f in rmapy.get_meta_items() if f.VissibleName == "New Folder" ] + [] + >>> [ f for f in rmapy.get_meta_items() if f.VissibleName == "New Folder" ][0].ID == new_folder.ID True >>> # Move a document in a folder - ... doc = rmapi.get_doc("a969fcd6-64b0-4f71-b1ce-d9533ec4a2a3") + ... doc = rmapy.get_doc("a969fcd6-64b0-4f71-b1ce-d9533ec4a2a3") >>> doc - + >>> doc.Parent = new_folder.ID >>> # Submit the changes - ... rmapi.update_metadata(doc) + ... rmapy.update_metadata(doc) True - >>> doc = rmapi.get_doc("a969fcd6-64b0-4f71-b1ce-d9533ec4a2a3") + >>> doc = rmapy.get_doc("a969fcd6-64b0-4f71-b1ce-d9533ec4a2a3") >>> doc.Parent == new_folder.ID True @@ -193,14 +193,14 @@ the remarkable file format: :linenos: - >>> from rmapi.document import ZipDocument - >>> from rmapi.api import Client + >>> from rmapy.document import ZipDocument + >>> from rmapy.api import Client >>> rm = Client() >>> rm.renew_token() True >>> rawDocument = ZipDocument(doc="/home/svancampenhout/27-11-2019.pdf") >>> rawDocument - + >>> rawDocument.metadata["VissibleName"] '27-11-2019' diff --git a/docs/source/rmapi.rst b/docs/source/rmapi.rst index b9d35b1..9da4bf6 100644 --- a/docs/source/rmapi.rst +++ b/docs/source/rmapi.rst @@ -1,77 +1,77 @@ -rmapi package +rmapy package ============= Submodules ---------- -rmapi.api module +rmapy.api module ---------------- -.. automodule:: rmapi.api +.. automodule:: rmapy.api :members: :undoc-members: :show-inheritance: -rmapi.collections module +rmapy.collections module ------------------------ -.. automodule:: rmapi.collections +.. automodule:: rmapy.collections :members: :undoc-members: :show-inheritance: -rmapi.config module +rmapy.config module ------------------- -.. automodule:: rmapi.config +.. automodule:: rmapy.config :members: :undoc-members: :show-inheritance: -rmapi.const module +rmapy.const module ------------------ -.. automodule:: rmapi.const +.. automodule:: rmapy.const :members: :undoc-members: :show-inheritance: -rmapi.document module +rmapy.document module --------------------- -.. automodule:: rmapi.document +.. automodule:: rmapy.document :members: :undoc-members: :show-inheritance: -rmapi.exceptions module +rmapy.exceptions module ----------------------- -.. automodule:: rmapi.exceptions +.. automodule:: rmapy.exceptions :members: :undoc-members: :show-inheritance: -rmapi.folder module +rmapy.folder module ------------------- -.. automodule:: rmapi.folder +.. automodule:: rmapy.folder :members: :undoc-members: :show-inheritance: -rmapi.meta module +rmapy.meta module ----------------- -.. automodule:: rmapi.meta +.. automodule:: rmapy.meta :members: :undoc-members: :show-inheritance: -rmapi.types module +rmapy.types module ------------------ -.. automodule:: rmapi.types +.. automodule:: rmapy.types :members: :undoc-members: :show-inheritance: @@ -80,7 +80,7 @@ rmapi.types module Module contents --------------- -.. automodule:: rmapi +.. automodule:: rmapy :members: :undoc-members: :show-inheritance: diff --git a/rmapi/__init__.py b/rmapy/__init__.py similarity index 100% rename from rmapi/__init__.py rename to rmapy/__init__.py diff --git a/rmapi/api.py b/rmapy/api.py similarity index 99% rename from rmapi/api.py rename to rmapy/api.py index dfc991f..8e22bc8 100644 --- a/rmapi/api.py +++ b/rmapy/api.py @@ -1,7 +1,6 @@ import requests from logging import getLogger from datetime import datetime -import json from typing import Union, Optional from uuid import uuid4 from .collections import Collection @@ -20,10 +19,10 @@ from .const import (RFC3339Nano, USER_TOKEN_URL, DEVICE,) -log = getLogger("rmapipy.rmapi") - +log = getLogger("rmapy") DocumentOrFolder = Union[Document, Folder] + class Client(object): """API Client for Remarkable Cloud diff --git a/rmapi/collections.py b/rmapy/collections.py similarity index 100% rename from rmapi/collections.py rename to rmapy/collections.py diff --git a/rmapi/config.py b/rmapy/config.py similarity index 90% rename from rmapi/config.py rename to rmapy/config.py index 05576c3..139c13f 100644 --- a/rmapi/config.py +++ b/rmapy/config.py @@ -6,7 +6,7 @@ from typing import Dict def load() -> dict: - """Load the .rmapi config file""" + """Load the .rmapy config file""" config_file_path = Path.joinpath(Path.home(), ".rmapi") config: Dict[str, str] = {} @@ -18,7 +18,7 @@ def load() -> dict: def dump(config: dict) -> None: - """Dump config to the .rmapi config file + """Dump config to the .rmapy config file Args: config: A dict containing data to dump to the .rmapi diff --git a/rmapi/const.py b/rmapy/const.py similarity index 70% rename from rmapi/const.py rename to rmapy/const.py index 811aaad..21ee01c 100644 --- a/rmapi/const.py +++ b/rmapy/const.py @@ -1,7 +1,7 @@ RFC3339Nano = "%Y-%m-%dT%H:%M:%SZ" -USER_AGENT = "rmapipy" +USER_AGENT = "rmapy" BASE_URL = "https://document-storage-production-dot-remarkable-production.appspot.com" # noqa DEVICE_TOKEN_URL = "https://my.remarkable.com/token/json/2/device/new" USER_TOKEN_URL = "https://my.remarkable.com/token/json/2/user/new" DEVICE = "desktop-windows" - +SERVICE_MGR_URL = "https://service-manager-production-dot-remarkable-production.appspot.com" # noqa diff --git a/rmapi/document.py b/rmapy/document.py similarity index 97% rename from rmapi/document.py rename to rmapy/document.py index 3005d3b..737dc19 100644 --- a/rmapi/document.py +++ b/rmapy/document.py @@ -35,7 +35,7 @@ class RmPage(object): def __str__(self) -> str: """String representation of this object""" - return f"" + return f"" def __repr__(self) -> str: """String representation of this object""" @@ -73,7 +73,7 @@ class Document(Meta): def __str__(self): """String representation of this object""" - return f"" + return f"" def __repr__(self): """String representation of this object""" @@ -109,7 +109,7 @@ class ZipDocument(object): zipfile: The raw zipfile in memory. pdf: the raw pdf file if there is one. epub: the raw epub file if there is one. - rm: A list of :class:rmapi.document.RmPage in this zip. + rm: A list of :class:rmapy.document.RmPage in this zip. """ # {"extraMetadata": {}, @@ -216,7 +216,7 @@ class ZipDocument(object): def __str__(self) -> str: """string representation of this class""" - return f"" + return f"" def __repr__(self) -> str: """string representation of this class""" @@ -355,7 +355,7 @@ def from_zip(ID: str, file: str) -> ZipDocument: def from_request_stream(ID: str, stream: Response) -> ZipDocument: """Return a ZipDocument from a request stream containing a zipfile. - This is used with the BlobGETUrl from a :class:`rmapi.document.Document`. + This is used with the BlobGETUrl from a :class:`rmapy.document.Document`. Args: ID: The object ID this zipfile represents. diff --git a/rmapi/exceptions.py b/rmapy/exceptions.py similarity index 100% rename from rmapi/exceptions.py rename to rmapy/exceptions.py diff --git a/rmapi/folder.py b/rmapy/folder.py similarity index 97% rename from rmapi/folder.py rename to rmapy/folder.py index 0f7b268..e23eeed 100644 --- a/rmapi/folder.py +++ b/rmapy/folder.py @@ -72,7 +72,7 @@ class Folder(Meta): return data def __str__(self): - return f"" + return f"" def __repr__(self): return self.__str__() diff --git a/rmapi/meta.py b/rmapy/meta.py similarity index 100% rename from rmapi/meta.py rename to rmapy/meta.py diff --git a/rmapi/types.py b/rmapy/types.py similarity index 100% rename from rmapi/types.py rename to rmapy/types.py diff --git a/setup.py b/setup.py index 117a797..4414815 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,7 @@ setup( # There are some restrictions on what makes a valid project name # specification here: # https://packaging.python.org/specifications/core-metadata/#name - name='rmapi', # Required + name='rmapy', # Required # Versions should comply with PEP 440: # https://www.python.org/dev/peps/pep-0440/ @@ -37,7 +37,7 @@ setup( # For a discussion on single-sourcing the version across setup.py and the # project code, see # https://packaging.python.org/en/latest/single_source_version.html - version='0.2.0', # Required + version='0.2.1', # Required # This is a one-line description or tagline of what your project does. This # corresponds to the "Summary" metadata field: @@ -70,7 +70,7 @@ setup( # # This field corresponds to the "Home-Page" metadata field: # https://packaging.python.org/specifications/core-metadata/#home-page-optional - url='https://github.com/subutux/rmapi', # Optional + url='https://github.com/subutux/rmapy', # Optional # This should be your name or the name of the organization which owns the # project. @@ -110,7 +110,7 @@ setup( # project page. What does your project relate to? # # Note that this is a string of words separated by whitespace, not a list. - keywords='remarkable rmapi cloud paper tablet', # Optional + keywords='remarkable rmapy cloud paper tablet', # Optional # You can just specify package directories manually here if your project is # simple. Or you can use find_packages(). @@ -197,9 +197,9 @@ setup( # maintainers, and where to support the project financially. The key is # what's used to render the link text on PyPI. project_urls={ # Optional - 'Bug Reports': 'https://github.com/subutux/rmapi/issues', + 'Bug Reports': 'https://github.com/subutux/rmapy/issues', 'Funding': 'https://donate.pypi.org', 'Say Thanks!': 'https://www.paypal.me/subutux', - 'Source': 'https://github.com/subutux/rmapi/', + 'Source': 'https://github.com/subutux/rmapy/', }, )