Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions cloudfoundry_client/common_objects.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import json
from collections.abc import Callable
from collections.abc import Callable, Generator
from typing import TypeVar, Generic


Expand All @@ -19,7 +19,7 @@ def __init__(self, *args, **kwargs):
ENTITY = TypeVar('ENTITY')


class Pagination(Generic[ENTITY]):
class Pagination(Generic[ENTITY], Generator[ENTITY, None, None]):
def __init__(self, first_page: JsonObject,
total_result: int,
next_page_loader: Callable[[JsonObject], JsonObject | None],
Expand All @@ -37,10 +37,7 @@ def __init__(self, first_page: JsonObject,
def total_results(self) -> int:
return self._total_results

def __iter__(self):
return self

def __next__(self) -> ENTITY:
def send(self, value) -> ENTITY:
try:
if self._cursor is None:
self._current_page = self._first_page
Expand All @@ -52,3 +49,15 @@ def __next__(self) -> ENTITY:
raise
self._cursor = self._resources_accessor(self._current_page).__iter__()
return self._instance_creator(self._cursor.__next__())

def throw(self, typ, val=None, tb=None):
super().throw(typ, val, tb)

def close(self):
super().close()

def __iter__(self):
return self

def __next__(self) -> ENTITY:
return self.send(None)
2 changes: 1 addition & 1 deletion cloudfoundry_client/doppler/client.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import logging
import re
from typing import Generator
from collections.abc import Generator
from urllib.parse import urlparse

from oauth2_client.credentials_manager import CredentialManager
Expand Down
4 changes: 2 additions & 2 deletions cloudfoundry_client/networking/entities.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
from collections.abc import Callable
from collections.abc import Callable, Generator
from functools import reduce
from typing import Any, Generator, TYPE_CHECKING
from typing import Any, TYPE_CHECKING
from urllib.parse import quote

from requests import Response
Expand Down
3 changes: 1 addition & 2 deletions cloudfoundry_client/operations/push/file_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
import os
import stat
import zipfile
from collections.abc import Callable
from typing import Generator
from collections.abc import Callable, Generator


class FileHelper(object):
Expand Down
3 changes: 2 additions & 1 deletion cloudfoundry_client/v2/events.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from typing import Generator, TYPE_CHECKING
from collections.abc import Generator
from typing import TYPE_CHECKING

from cloudfoundry_client.v2.entities import EntityManager, Entity

Expand Down
144 changes: 144 additions & 0 deletions tests/fixtures/v3/fake/GET_multi_page_0_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
{
"pagination": {
"total_results": 3,
"total_pages": 2,
"first": {
"href": "http://somewhere.org/fake"
},
"last": {
"href": "http://somewhere.org/fake/last?page=2&per_page=2"
},
"next": {
"href": "http://somewhere.org/fake/last?page=2&per_page=2"
},
"previous": null
},
"resources": [
{
"guid": "1cb006ee-fb05-47e1-b541-c34179ddc446",
"name": "my_app",
"state": "STARTED",
"created_at": "2016-03-17T21:41:30Z",
"updated_at": "2016-03-18T11:32:30Z",
"lifecycle": {
"type": "buildpack",
"data": {
"buildpacks": [
"java_buildpack"
],
"stack": "cflinuxfs2"
}
},
"relationships": {
"space": {
"data": {
"guid": "2f35885d-0c9d-4423-83ad-fd05066f8576"
}
}
},
"links": {
"self": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446"
},
"space": {
"href": "http://somewhere.org/v3/spaces/2f35885d-0c9d-4423-83ad-fd05066f8576"
},
"processes": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/processes"
},
"route_mappings": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/route_mappings"
},
"packages": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/packages"
},
"environment_variables": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/environment_variables"
},
"current_droplet": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/droplets/current"
},
"droplets": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/droplets"
},
"tasks": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/tasks"
},
"start": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/actions/start",
"method": "POST"
},
"stop": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc446/actions/stop",
"method": "POST"
}
},
"metadata": {
"labels": {}
}
},
{
"guid": "02b4ec9b-94c7-4468-9c23-4e906191a0f8",
"name": "my_app2",
"state": "STOPPED",
"created_at": "1970-01-01T00:00:02Z",
"updated_at": "2016-06-08T16:41:26Z",
"lifecycle": {
"type": "buildpack",
"data": {
"buildpacks": [
"ruby_buildpack"
],
"stack": "cflinuxfs2"
}
},
"relationships": {
"space": {
"data": {
"guid": "2f35885d-0c9d-4423-83ad-fd05066f8576"
}
}
},
"links": {
"self": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8"
},
"space": {
"href": "http://somewhere.org/v3/spaces/2f35885d-0c9d-4423-83ad-fd05066f8576"
},
"processes": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/processes"
},
"route_mappings": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/route_mappings"
},
"packages": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/packages"
},
"environment_variables": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/environment_variables"
},
"current_droplet": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/droplets/current"
},
"droplets": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/droplets"
},
"tasks": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/tasks"
},
"start": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/actions/start",
"method": "POST"
},
"stop": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f8/actions/stop",
"method": "POST"
}
},
"metadata": {
"labels": {}
}
}
]
}
144 changes: 144 additions & 0 deletions tests/fixtures/v3/fake/GET_multi_page_1_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
{
"pagination": {
"total_results": 3,
"total_pages": 2,
"first": {
"href": "http://somewhere.org/fake"
},
"last": {
"href": "http://somewhere.org/fake/last?page=2&per_page=2"
},
"next": null,
"previous": {
"href": "http://somewhere.org/fake"
}
},
"resources": [
{
"guid": "1cb006ee-fb05-47e1-b541-c34179ddc447",
"name": "my_app3",
"state": "STARTED",
"created_at": "2016-03-17T21:41:30Z",
"updated_at": "2016-03-18T11:32:30Z",
"lifecycle": {
"type": "buildpack",
"data": {
"buildpacks": [
"java_buildpack"
],
"stack": "cflinuxfs2"
}
},
"relationships": {
"space": {
"data": {
"guid": "2f35885d-0c9d-4423-83ad-fd05066f8576"
}
}
},
"links": {
"self": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447"
},
"space": {
"href": "http://somewhere.org/v3/spaces/2f35885d-0c9d-4423-83ad-fd05066f8576"
},
"processes": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/processes"
},
"route_mappings": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/route_mappings"
},
"packages": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/packages"
},
"environment_variables": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/environment_variables"
},
"current_droplet": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/droplets/current"
},
"droplets": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/droplets"
},
"tasks": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/tasks"
},
"start": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/actions/start",
"method": "POST"
},
"stop": {
"href": "http://somewhere.org/v3/apps/1cb006ee-fb05-47e1-b541-c34179ddc447/actions/stop",
"method": "POST"
}
},
"metadata": {
"labels": {}
}
},
{
"guid": "02b4ec9b-94c7-4468-9c23-4e906191a0f9",
"name": "my_app4",
"state": "STOPPED",
"created_at": "1970-01-01T00:00:02Z",
"updated_at": "2016-06-08T16:41:26Z",
"lifecycle": {
"type": "buildpack",
"data": {
"buildpacks": [
"ruby_buildpack"
],
"stack": "cflinuxfs2"
}
},
"relationships": {
"space": {
"data": {
"guid": "2f35885d-0c9d-4423-83ad-fd05066f8576"
}
}
},
"links": {
"self": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9"
},
"space": {
"href": "http://somewhere.org/v3/spaces/2f35885d-0c9d-4423-83ad-fd05066f8576"
},
"processes": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/processes"
},
"route_mappings": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/route_mappings"
},
"packages": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/packages"
},
"environment_variables": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/environment_variables"
},
"current_droplet": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/droplets/current"
},
"droplets": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/droplets"
},
"tasks": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/tasks"
},
"start": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/actions/start",
"method": "POST"
},
"stop": {
"href": "http://somewhere.org/v3/apps/02b4ec9b-94c7-4468-9c23-4e906191a0f9/actions/stop",
"method": "POST"
}
},
"metadata": {
"labels": {}
}
}
]
}
10 changes: 8 additions & 2 deletions tests/operations/push/test_push.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,13 @@ def test_to_host_should_remove_unwanted_characters(self):
@patch.object(
sys,
"argv",
["main", "push_app", AbstractTestCase.get_fixtures_path("fake", "manifest_main.yml"), "-space_guid", "space_id"],
[
"main",
"push_app",
AbstractTestCase.get_fixtures_path("fake", "operations", "manifest_main.yml"),
"-space_guid",
"space_id"
],
)
def test_main_push(self):
class FakeOperation(object):
Expand All @@ -59,4 +65,4 @@ def __init__(self):
"cloudfoundry_client.main.operation_commands.PushOperation", new=lambda c: push_operation
):
main.main()
push_operation.push.assert_called_with("space_id", self.get_fixtures_path("fake", "manifest_main.yml"))
push_operation.push.assert_called_with("space_id", self.get_fixtures_path("fake", "operations", "manifest_main.yml"))
Loading
Loading