diaspora-event-sdk 0.1.5__tar.gz → 0.1.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. {diaspora-event-sdk-0.1.5/diaspora_event_sdk.egg-info → diaspora-event-sdk-0.1.7}/PKG-INFO +4 -11
  2. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/_environments.py +1 -1
  3. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/client.py +36 -26
  4. diaspora-event-sdk-0.1.7/diaspora_event_sdk/sdk/web_client.py +99 -0
  5. diaspora-event-sdk-0.1.7/diaspora_event_sdk/version.py +1 -0
  6. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7/diaspora_event_sdk.egg-info}/PKG-INFO +4 -11
  7. diaspora-event-sdk-0.1.5/diaspora_event_sdk/sdk/web_client.py +0 -92
  8. diaspora-event-sdk-0.1.5/diaspora_event_sdk/version.py +0 -1
  9. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/LICENSE +0 -0
  10. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/MANIFEST.in +0 -0
  11. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/README.md +0 -0
  12. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/__init__.py +0 -0
  13. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/__init__.py +0 -0
  14. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/decorators.py +0 -0
  15. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/kafka_client.py +0 -0
  16. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/login_manager/__init__.py +0 -0
  17. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/login_manager/client_login.py +0 -0
  18. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/login_manager/decorators.py +0 -0
  19. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/login_manager/globus_auth.py +0 -0
  20. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/login_manager/login_flow.py +0 -0
  21. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/login_manager/manager.py +0 -0
  22. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/login_manager/protocol.py +0 -0
  23. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/login_manager/tokenstore.py +0 -0
  24. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/utils/__init__.py +0 -0
  25. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk/sdk/utils/uuid_like.py +0 -0
  26. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk.egg-info/SOURCES.txt +0 -0
  27. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk.egg-info/dependency_links.txt +0 -0
  28. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk.egg-info/requires.txt +0 -0
  29. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/diaspora_event_sdk.egg-info/top_level.txt +0 -0
  30. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/setup.cfg +0 -0
  31. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/setup.py +0 -0
  32. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/tests/__init__.py +0 -0
  33. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/tests/unit/test_client.py +0 -0
  34. {diaspora-event-sdk-0.1.5 → diaspora-event-sdk-0.1.7}/tox.ini +0 -0
@@ -1,22 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: diaspora-event-sdk
3
- Version: 0.1.5
3
+ Version: 0.1.7
4
4
  Summary: SDK of Diaspora Event Fabric: Resilience-enabling services for science from HPC to edge
5
5
  Home-page: https://github.com/globus-labs/diaspora-event-sdk
6
6
  License: LICENSE
7
+ Platform: UNKNOWN
7
8
  Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
- Requires-Dist: globus-sdk<4,>=3.20.1
10
9
  Provides-Extra: kafka-python
11
- Requires-Dist: kafka-python; extra == "kafka-python"
12
- Requires-Dist: aws-msk-iam-sasl-signer-python; extra == "kafka-python"
13
10
  Provides-Extra: test
14
- Requires-Dist: pytest; extra == "test"
15
- Requires-Dist: pytest-cov; extra == "test"
16
- Requires-Dist: coverage; extra == "test"
17
- Requires-Dist: mypy; extra == "test"
18
- Requires-Dist: tox; extra == "test"
19
- Requires-Dist: check-manifest; extra == "test"
11
+ License-File: LICENSE
20
12
 
21
13
  # Diaspora: Resilience-enabling services for science from HPC to edge
22
14
 
@@ -47,3 +39,4 @@ Note: This method does not include dependencies for `KafkaProducer` and `KafkaCo
47
39
  **Advanced Consumers with Faust**: Explore the [Faust Streaming Guide](docs/faust_weather_app.md) for advanced event streaming with Faust.
48
40
 
49
41
  **Advanced Consumer Functions**: See our [Colab example](https://colab.research.google.com/drive/1tPKfxU2qPsLvNTreF6nKINU62k7pQWxa?usp=sharing) for demonstration.
42
+
@@ -1,7 +1,7 @@
1
1
  import os
2
2
 
3
3
 
4
- TOKEN_EXCHANGE = "http://3.220.110.101"
4
+ TOKEN_EXCHANGE = "http://3.220.110.101/"
5
5
  DIASPORA_RESOURCE_SERVER = "2b9d2f5c-fa32-45b5-875b-b24cd343b917"
6
6
 
7
7
 
@@ -89,16 +89,6 @@ class Client:
89
89
  "endpoint": tokens["endpoint"],
90
90
  }
91
91
 
92
- # @requires_login # TODO
93
- # def get_secret_key(self):
94
- # tokens = self.login_manager._token_storage.get_token_data(
95
- # DIASPORA_RESOURCE_SERVER
96
- # )
97
- # if tokens is None or "secret_key" not in tokens:
98
- # return None
99
- # else:
100
- # return tokens["secret_key"]
101
-
102
92
  @requires_login
103
93
  def put_secret_key(self, access_key, secret_key, endpoint):
104
94
  tokens = self.login_manager._token_storage.get_token_data(
@@ -133,54 +123,74 @@ class Client:
133
123
  """
134
124
  Registers a new topic under the user's OpenID.
135
125
  """
136
- return self.web_client.register_topic(self.subject_openid, topic)
126
+ return self.web_client.register_topic(self.subject_openid, topic, "register")
137
127
 
138
128
  @requires_login
139
129
  def unregister_topic(self, topic):
140
130
  """
141
131
  Unregisters a topic from the user's OpenID.
142
132
  """
143
- return self.web_client.unregister_topic(self.subject_openid, topic)
133
+ return self.web_client.register_topic(self.subject_openid, topic, "unregister")
134
+
135
+ @requires_login
136
+ def get_topic_configs(self, topic):
137
+ """
138
+ Get topic configurations.
139
+ """
140
+ return self.web_client.get_topic_configs(self.subject_openid, topic)
144
141
 
145
142
  @requires_login
146
- def register_topic_for_user(self, topic, user):
143
+ def update_topic_configs(self, topic, configs):
144
+ """
145
+ Set topic configurations.
146
+ """
147
+ return self.web_client.update_topic_configs(self.subject_openid, topic, configs)
148
+
149
+ @requires_login
150
+ def update_topic_partitions(self, topic, new_partitions):
151
+ """
152
+ Adjust topic number of partitions
153
+ """
154
+ return self.web_client.update_topic_partitions(self.subject_openid, topic, new_partitions)
155
+
156
+ @requires_login
157
+ def grant_user_access(self, topic, user):
147
158
  """
148
159
  Registers a new topic under the user's OpenID.
149
160
  """
150
- return self.web_client.register_topic_for_user(self.subject_openid, topic, user)
161
+ return self.web_client.grant_user_access(self.subject_openid, topic, user, "grant")
151
162
 
152
163
  @requires_login
153
- def unregister_topic_for_user(self, topic, user):
164
+ def revoke_user_access(self, topic, user):
154
165
  """
155
166
  Unregisters a topic from the user's OpenID.
156
167
  """
157
- return self.web_client.unregister_topic_for_user(self.subject_openid, topic, user)
158
-
168
+ return self.web_client.grant_user_access(self.subject_openid, topic, user, "revoke")
159
169
 
160
170
  @requires_login
161
- def list_functions(self):
171
+ def list_triggers(self):
162
172
  """
163
173
  Retrieves the list of functions associated with the user's OpenID.
164
174
  """
165
- return self.web_client.list_functions(self.subject_openid)
175
+ return self.web_client.list_triggers(self.subject_openid)
166
176
 
167
177
  @requires_login
168
- def register_function(self, topic, function, function_configs):
178
+ def create_trigger(self, topic, function, function_configs):
169
179
  """
170
180
  Registers a new functions under the user's OpenID.
171
181
  """
172
- return self.web_client.register_function(self.subject_openid, topic, function, function_configs)
182
+ return self.web_client.create_trigger(self.subject_openid, topic, function, "create", function_configs)
173
183
 
174
184
  @requires_login
175
- def unregister_function(self, topic, function):
185
+ def delete_trigger(self, topic, function):
176
186
  """
177
187
  Unregisters a functions from the user's OpenID.
178
188
  """
179
- return self.web_client.unregister_function(self.subject_openid, topic, function)
180
-
189
+ return self.web_client.create_trigger(self.subject_openid, topic, function, "delete", {})
190
+
181
191
  @requires_login
182
- def update_trigger_config(self, trigger_uuid, trigger_configs):
192
+ def update_trigger(self, trigger_uuid, trigger_configs):
183
193
  """
184
194
  Update a functions's trigger'.
185
195
  """
186
- return self.web_client.update_function_trigger(self.subject_openid, trigger_uuid, trigger_configs)
196
+ return self.web_client.update_trigger(self.subject_openid, trigger_uuid, trigger_configs)
@@ -0,0 +1,99 @@
1
+ from typing import Optional
2
+ import json
3
+ import globus_sdk
4
+ from diaspora_event_sdk.sdk.utils.uuid_like import UUID_LIKE_T
5
+
6
+ from ._environments import TOKEN_EXCHANGE
7
+
8
+
9
+ class WebClient(globus_sdk.BaseClient):
10
+ def __init__(
11
+ self,
12
+ *,
13
+ environment: Optional[str] = None,
14
+ base_url: Optional[str] = None,
15
+ app_name: Optional[str] = None,
16
+ **kwargs,
17
+ ):
18
+ if base_url is None:
19
+ base_url = TOKEN_EXCHANGE
20
+
21
+ super().__init__(environment=environment, base_url=base_url, **kwargs)
22
+
23
+ self._user_app_name = None
24
+ self.user_app_name = app_name
25
+
26
+ def create_key(self, subject: UUID_LIKE_T) -> globus_sdk.GlobusHTTPResponse:
27
+ return self.get("/api/v2/create_key", headers={"Subject": str(subject)})
28
+
29
+ def list_topics(self, subject: UUID_LIKE_T) -> globus_sdk.GlobusHTTPResponse:
30
+ return self.get("/api/v2/topics", headers={"Subject": str(subject)})
31
+
32
+ def register_topic(
33
+ self, subject: UUID_LIKE_T, topic: str, action: str
34
+ ) -> globus_sdk.GlobusHTTPResponse:
35
+ return self.put(
36
+ f"/api/v2/topic/{topic}", headers={"Subject": str(subject), "Action": action}
37
+ )
38
+
39
+ def get_topic_configs(
40
+ self, subject: UUID_LIKE_T, topic: str
41
+ ) -> globus_sdk.GlobusHTTPResponse:
42
+ return self.get(
43
+ f"/api/v2/topic/{topic}",
44
+ headers={"Subject": str(subject), "Topic": topic},
45
+ # data=json.dumps(configs).encode("utf-8")
46
+ )
47
+
48
+ def update_topic_configs(
49
+ self, subject: UUID_LIKE_T, topic: str, configs: dict
50
+ ) -> globus_sdk.GlobusHTTPResponse:
51
+ return self.post(
52
+ f"/api/v2/topic/{topic}",
53
+ headers={"Subject": str(subject), "Topic": topic,
54
+ "Content-Type": "text/plain"},
55
+ data=json.dumps(configs).encode("utf-8")
56
+ )
57
+
58
+ def update_topic_partitions(
59
+ self, subject: UUID_LIKE_T, topic: str, new_partitions: int
60
+ ) -> globus_sdk.GlobusHTTPResponse:
61
+ return self.post(
62
+ f"/api/v2/topic/{topic}/partitions",
63
+ headers={"Subject": str(subject), "Topic": topic,
64
+ "NewPartitions": str(new_partitions)},
65
+ )
66
+
67
+ def grant_user_access(
68
+ self, subject: UUID_LIKE_T, topic: str, user: UUID_LIKE_T, action: str
69
+ ) -> globus_sdk.GlobusHTTPResponse:
70
+ return self.post(
71
+ f"/api/v2/topic/{topic}/user",
72
+ headers={"Subject": str(subject), "Action": action,
73
+ "Topic": topic, "User": str(user)}
74
+ )
75
+
76
+ def list_triggers(self, subject: UUID_LIKE_T) -> globus_sdk.GlobusHTTPResponse:
77
+ return self.get("/api/v2/triggers", headers={"Subject": str(subject)})
78
+
79
+ def create_trigger(
80
+ self, subject: UUID_LIKE_T, topic: str, function: str, action: str,
81
+ function_configs: dict
82
+ ) -> globus_sdk.GlobusHTTPResponse:
83
+ return self.put(
84
+ "/api/v2/trigger",
85
+ headers={"Subject": str(subject), "Topic": topic,
86
+ "Trigger": function, "Action": action,
87
+ "Content-Type": "text/plain"},
88
+ data=json.dumps(function_configs).encode("utf-8")
89
+ )
90
+
91
+ def update_trigger(
92
+ self, subject: UUID_LIKE_T, trigger_uuid: UUID_LIKE_T, trigger_configs: dict
93
+ ) -> globus_sdk.GlobusHTTPResponse:
94
+ return self.post(
95
+ f"/api/v2/triggers/{trigger_uuid}",
96
+ headers={"Subject": str(subject), "Trigger_id": str(trigger_uuid),
97
+ "Content-Type": "text/plain"},
98
+ data=json.dumps(trigger_configs).encode("utf-8")
99
+ )
@@ -0,0 +1 @@
1
+ __version__ = "0.1.7"
@@ -1,22 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: diaspora-event-sdk
3
- Version: 0.1.5
3
+ Version: 0.1.7
4
4
  Summary: SDK of Diaspora Event Fabric: Resilience-enabling services for science from HPC to edge
5
5
  Home-page: https://github.com/globus-labs/diaspora-event-sdk
6
6
  License: LICENSE
7
+ Platform: UNKNOWN
7
8
  Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
- Requires-Dist: globus-sdk<4,>=3.20.1
10
9
  Provides-Extra: kafka-python
11
- Requires-Dist: kafka-python; extra == "kafka-python"
12
- Requires-Dist: aws-msk-iam-sasl-signer-python; extra == "kafka-python"
13
10
  Provides-Extra: test
14
- Requires-Dist: pytest; extra == "test"
15
- Requires-Dist: pytest-cov; extra == "test"
16
- Requires-Dist: coverage; extra == "test"
17
- Requires-Dist: mypy; extra == "test"
18
- Requires-Dist: tox; extra == "test"
19
- Requires-Dist: check-manifest; extra == "test"
11
+ License-File: LICENSE
20
12
 
21
13
  # Diaspora: Resilience-enabling services for science from HPC to edge
22
14
 
@@ -47,3 +39,4 @@ Note: This method does not include dependencies for `KafkaProducer` and `KafkaCo
47
39
  **Advanced Consumers with Faust**: Explore the [Faust Streaming Guide](docs/faust_weather_app.md) for advanced event streaming with Faust.
48
40
 
49
41
  **Advanced Consumer Functions**: See our [Colab example](https://colab.research.google.com/drive/1tPKfxU2qPsLvNTreF6nKINU62k7pQWxa?usp=sharing) for demonstration.
42
+
@@ -1,92 +0,0 @@
1
- from typing import Optional
2
-
3
- import globus_sdk
4
- from diaspora_event_sdk.sdk.utils.uuid_like import UUID_LIKE_T
5
-
6
- from ._environments import TOKEN_EXCHANGE
7
-
8
-
9
- class WebClient(globus_sdk.BaseClient):
10
- def __init__(
11
- self,
12
- *,
13
- environment: Optional[str] = None,
14
- base_url: Optional[str] = None,
15
- app_name: Optional[str] = None,
16
- **kwargs,
17
- ):
18
- if base_url is None:
19
- base_url = TOKEN_EXCHANGE
20
-
21
- super().__init__(environment=environment, base_url=base_url, **kwargs)
22
-
23
- self._user_app_name = None
24
- self.user_app_name = app_name
25
-
26
- def create_key(self, subject: UUID_LIKE_T) -> globus_sdk.GlobusHTTPResponse:
27
- return self.post("/v1/create_key", headers={"Subject": str(subject)})
28
-
29
- def list_topics(self, subject: UUID_LIKE_T) -> globus_sdk.GlobusHTTPResponse:
30
- return self.get("/v1/list_topics", headers={"Subject": str(subject)})
31
-
32
- def register_topic(
33
- self, subject: UUID_LIKE_T, topic: str
34
- ) -> globus_sdk.GlobusHTTPResponse:
35
- return self.post(
36
- "/v1/register_topic", headers={"Subject": str(subject), "Topic": topic}
37
- )
38
-
39
- def unregister_topic(
40
- self, subject: UUID_LIKE_T, topic: str
41
- ) -> globus_sdk.GlobusHTTPResponse:
42
- return self.post(
43
- "/v1/unregister_topic", headers={"Subject": str(subject), "Topic": topic}
44
- )
45
-
46
- def register_topic_for_user(
47
- self, subject: UUID_LIKE_T, topic: str, user: UUID_LIKE_T
48
- ) -> globus_sdk.GlobusHTTPResponse:
49
- return self.post(
50
- "/v1/register_topic_for_user",
51
- headers={"Subject": str(
52
- subject), "Topic": topic, "User": str(user)}
53
- )
54
-
55
- def unregister_topic_for_user(
56
- self, subject: UUID_LIKE_T, topic: str, user: UUID_LIKE_T
57
- ) -> globus_sdk.GlobusHTTPResponse:
58
- return self.post(
59
- "/v1/unregister_topic_for_user",
60
- headers={"Subject": str(
61
- subject), "Topic": topic, "User": str(user)}
62
- )
63
-
64
- def list_functions(self, subject: UUID_LIKE_T) -> globus_sdk.GlobusHTTPResponse:
65
- return self.get("/v1/list_functions", headers={"Subject": str(subject)})
66
-
67
- def register_function(
68
- self, subject: UUID_LIKE_T, topic: str, function: str,
69
- function_configs: dict
70
- ) -> globus_sdk.GlobusHTTPResponse:
71
- return self.post(
72
- "/v1/register_function",
73
- headers={"Subject": str(subject), "Topic": topic,
74
- "Function": function},
75
- data=function_configs
76
- )
77
-
78
- def unregister_function(
79
- self, subject: UUID_LIKE_T, topic: str, function: str
80
- ) -> globus_sdk.GlobusHTTPResponse:
81
- return self.post(
82
- "/v1/unregister_function", headers={"Subject": str(subject), "Topic": topic, "Function": function}
83
- )
84
-
85
- def update_function_trigger(
86
- self, subject: UUID_LIKE_T, trigger_uuid: UUID_LIKE_T, trigger_configs: dict
87
- ) -> globus_sdk.GlobusHTTPResponse:
88
- return self.post(
89
- "/v1/update_function_trigger",
90
- headers={"Subject": str(subject), "Trigger": str(trigger_uuid)},
91
- data=trigger_configs
92
- )
@@ -1 +0,0 @@
1
- __version__ = "0.1.5"