meerschaum 2.9.5__py3-none-any.whl → 3.0.0rc2__py3-none-any.whl
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.
- meerschaum/__init__.py +5 -2
- meerschaum/_internal/__init__.py +1 -0
- meerschaum/_internal/arguments/_parse_arguments.py +4 -4
- meerschaum/_internal/arguments/_parser.py +19 -2
- meerschaum/_internal/docs/index.py +49 -2
- meerschaum/_internal/entry.py +6 -6
- meerschaum/_internal/shell/Shell.py +1 -1
- meerschaum/_internal/static.py +356 -0
- meerschaum/actions/api.py +12 -2
- meerschaum/actions/bootstrap.py +7 -7
- meerschaum/actions/edit.py +142 -18
- meerschaum/actions/register.py +137 -6
- meerschaum/actions/show.py +117 -29
- meerschaum/actions/stop.py +4 -1
- meerschaum/actions/sync.py +1 -1
- meerschaum/actions/tag.py +9 -8
- meerschaum/actions/verify.py +5 -8
- meerschaum/api/__init__.py +11 -3
- meerschaum/api/_events.py +39 -2
- meerschaum/api/_oauth2.py +118 -8
- meerschaum/api/_tokens.py +102 -0
- meerschaum/api/dash/__init__.py +0 -3
- meerschaum/api/dash/callbacks/custom.py +2 -2
- meerschaum/api/dash/callbacks/dashboard.py +103 -19
- meerschaum/api/dash/callbacks/plugins.py +0 -1
- meerschaum/api/dash/callbacks/register.py +1 -1
- meerschaum/api/dash/callbacks/settings/__init__.py +1 -0
- meerschaum/api/dash/callbacks/settings/password_reset.py +2 -2
- meerschaum/api/dash/callbacks/settings/tokens.py +388 -0
- meerschaum/api/dash/components.py +30 -8
- meerschaum/api/dash/keys.py +19 -93
- meerschaum/api/dash/pages/dashboard.py +1 -20
- meerschaum/api/dash/pages/settings/__init__.py +1 -0
- meerschaum/api/dash/pages/settings/password_reset.py +1 -1
- meerschaum/api/dash/pages/settings/tokens.py +55 -0
- meerschaum/api/dash/pipes.py +94 -59
- meerschaum/api/dash/sessions.py +12 -0
- meerschaum/api/dash/tokens.py +606 -0
- meerschaum/api/dash/websockets.py +1 -1
- meerschaum/api/dash/webterm.py +4 -0
- meerschaum/api/models/__init__.py +23 -3
- meerschaum/api/models/_actions.py +22 -0
- meerschaum/api/models/_pipes.py +85 -7
- meerschaum/api/models/_tokens.py +81 -0
- meerschaum/api/resources/templates/termpage.html +12 -0
- meerschaum/api/routes/__init__.py +1 -0
- meerschaum/api/routes/_actions.py +3 -4
- meerschaum/api/routes/_connectors.py +3 -7
- meerschaum/api/routes/_jobs.py +14 -35
- meerschaum/api/routes/_login.py +49 -12
- meerschaum/api/routes/_misc.py +5 -10
- meerschaum/api/routes/_pipes.py +173 -140
- meerschaum/api/routes/_plugins.py +38 -28
- meerschaum/api/routes/_tokens.py +236 -0
- meerschaum/api/routes/_users.py +47 -35
- meerschaum/api/routes/_version.py +3 -3
- meerschaum/config/__init__.py +43 -20
- meerschaum/config/_default.py +43 -6
- meerschaum/config/_edit.py +28 -24
- meerschaum/config/_environment.py +1 -1
- meerschaum/config/_patch.py +6 -6
- meerschaum/config/_paths.py +5 -1
- meerschaum/config/_read_config.py +65 -34
- meerschaum/config/_sync.py +6 -3
- meerschaum/config/_version.py +1 -1
- meerschaum/config/stack/__init__.py +31 -11
- meerschaum/config/static.py +18 -0
- meerschaum/connectors/_Connector.py +10 -4
- meerschaum/connectors/__init__.py +4 -20
- meerschaum/connectors/api/_APIConnector.py +34 -6
- meerschaum/connectors/api/_actions.py +2 -2
- meerschaum/connectors/api/_jobs.py +1 -1
- meerschaum/connectors/api/_login.py +33 -7
- meerschaum/connectors/api/_misc.py +2 -2
- meerschaum/connectors/api/_pipes.py +16 -31
- meerschaum/connectors/api/_plugins.py +2 -2
- meerschaum/connectors/api/_request.py +1 -1
- meerschaum/connectors/api/_tokens.py +146 -0
- meerschaum/connectors/api/_users.py +70 -58
- meerschaum/connectors/instance/_InstanceConnector.py +83 -0
- meerschaum/connectors/instance/__init__.py +10 -0
- meerschaum/connectors/instance/_pipes.py +442 -0
- meerschaum/connectors/instance/_plugins.py +151 -0
- meerschaum/connectors/instance/_tokens.py +296 -0
- meerschaum/connectors/instance/_users.py +181 -0
- meerschaum/connectors/parse.py +4 -1
- meerschaum/connectors/sql/_SQLConnector.py +8 -5
- meerschaum/connectors/sql/_cli.py +12 -11
- meerschaum/connectors/sql/_create_engine.py +9 -168
- meerschaum/connectors/sql/_fetch.py +2 -18
- meerschaum/connectors/sql/_pipes.py +156 -190
- meerschaum/connectors/sql/_plugins.py +29 -0
- meerschaum/connectors/sql/_sql.py +46 -21
- meerschaum/connectors/sql/_users.py +29 -2
- meerschaum/connectors/sql/tables/__init__.py +1 -1
- meerschaum/connectors/valkey/_ValkeyConnector.py +2 -4
- meerschaum/connectors/valkey/_pipes.py +53 -26
- meerschaum/connectors/valkey/_plugins.py +2 -26
- meerschaum/core/Pipe/__init__.py +59 -19
- meerschaum/core/Pipe/_attributes.py +412 -90
- meerschaum/core/Pipe/_bootstrap.py +54 -24
- meerschaum/core/Pipe/_data.py +96 -18
- meerschaum/core/Pipe/_dtypes.py +48 -18
- meerschaum/core/Pipe/_edit.py +14 -4
- meerschaum/core/Pipe/_fetch.py +1 -1
- meerschaum/core/Pipe/_show.py +5 -5
- meerschaum/core/Pipe/_sync.py +118 -193
- meerschaum/core/Pipe/_verify.py +4 -4
- meerschaum/{plugins → core/Plugin}/_Plugin.py +9 -11
- meerschaum/core/Plugin/__init__.py +1 -1
- meerschaum/core/Token/_Token.py +220 -0
- meerschaum/core/Token/__init__.py +12 -0
- meerschaum/core/User/_User.py +34 -8
- meerschaum/core/User/__init__.py +9 -1
- meerschaum/core/__init__.py +1 -0
- meerschaum/jobs/_Job.py +3 -2
- meerschaum/jobs/__init__.py +3 -2
- meerschaum/jobs/systemd.py +1 -1
- meerschaum/models/__init__.py +35 -0
- meerschaum/models/pipes.py +247 -0
- meerschaum/models/tokens.py +38 -0
- meerschaum/models/users.py +26 -0
- meerschaum/plugins/__init__.py +22 -7
- meerschaum/plugins/bootstrap.py +2 -1
- meerschaum/utils/_get_pipes.py +68 -27
- meerschaum/utils/daemon/Daemon.py +2 -1
- meerschaum/utils/daemon/__init__.py +30 -2
- meerschaum/utils/dataframe.py +473 -81
- meerschaum/utils/debug.py +15 -15
- meerschaum/utils/dtypes/__init__.py +473 -34
- meerschaum/utils/dtypes/sql.py +368 -28
- meerschaum/utils/formatting/__init__.py +1 -1
- meerschaum/utils/formatting/_pipes.py +5 -4
- meerschaum/utils/formatting/_shell.py +11 -9
- meerschaum/utils/misc.py +246 -148
- meerschaum/utils/packages/__init__.py +10 -27
- meerschaum/utils/packages/_packages.py +41 -34
- meerschaum/utils/pipes.py +181 -0
- meerschaum/utils/process.py +1 -1
- meerschaum/utils/prompt.py +3 -1
- meerschaum/utils/schedule.py +2 -1
- meerschaum/utils/sql.py +121 -44
- meerschaum/utils/typing.py +1 -4
- meerschaum/utils/venv/_Venv.py +2 -2
- meerschaum/utils/venv/__init__.py +5 -7
- {meerschaum-2.9.5.dist-info → meerschaum-3.0.0rc2.dist-info}/METADATA +92 -96
- meerschaum-3.0.0rc2.dist-info/RECORD +283 -0
- {meerschaum-2.9.5.dist-info → meerschaum-3.0.0rc2.dist-info}/WHEEL +1 -1
- meerschaum-3.0.0rc2.dist-info/licenses/NOTICE +2 -0
- meerschaum/api/models/_interfaces.py +0 -15
- meerschaum/api/models/_locations.py +0 -15
- meerschaum/api/models/_metrics.py +0 -15
- meerschaum/config/static/__init__.py +0 -186
- meerschaum-2.9.5.dist-info/RECORD +0 -263
- {meerschaum-2.9.5.dist-info → meerschaum-3.0.0rc2.dist-info}/entry_points.txt +0 -0
- {meerschaum-2.9.5.dist-info → meerschaum-3.0.0rc2.dist-info}/licenses/LICENSE +0 -0
- {meerschaum-2.9.5.dist-info → meerschaum-3.0.0rc2.dist-info}/top_level.txt +0 -0
- {meerschaum-2.9.5.dist-info → meerschaum-3.0.0rc2.dist-info}/zip-safe +0 -0
@@ -0,0 +1,146 @@
|
|
1
|
+
#! /usr/bin/env python3
|
2
|
+
# vim:fenc=utf-8
|
3
|
+
|
4
|
+
"""
|
5
|
+
Implement the `APIConnector` token methods.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import json
|
9
|
+
import uuid
|
10
|
+
from datetime import datetime
|
11
|
+
from typing import Union, List, Optional
|
12
|
+
|
13
|
+
import meerschaum as mrsm
|
14
|
+
from meerschaum.core import Token
|
15
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
16
|
+
tokens_endpoint = STATIC_CONFIG['api']['endpoints']['tokens']
|
17
|
+
|
18
|
+
|
19
|
+
def register_token(self, token: Token, debug: bool = False) -> mrsm.SuccessTuple:
|
20
|
+
"""
|
21
|
+
Register the provided token to the API.
|
22
|
+
"""
|
23
|
+
from meerschaum.utils.dtypes import json_serialize_value
|
24
|
+
r_url = tokens_endpoint + '/register'
|
25
|
+
response = self.post(
|
26
|
+
r_url,
|
27
|
+
data=json.dumps({
|
28
|
+
'label': token.label,
|
29
|
+
'scopes': token.scopes,
|
30
|
+
'expiration': token.expiration,
|
31
|
+
}, default=json_serialize_value),
|
32
|
+
debug=debug,
|
33
|
+
)
|
34
|
+
if not response:
|
35
|
+
return False, f"Failed to register token:\n{response.text}"
|
36
|
+
|
37
|
+
data = response.json()
|
38
|
+
token.label = data['label']
|
39
|
+
token.secret = data['secret']
|
40
|
+
token.id = uuid.UUID(data['id'])
|
41
|
+
if data.get('expiration', None):
|
42
|
+
token.expiration = datetime.fromisoformat(data['expiration'])
|
43
|
+
|
44
|
+
return True, f"Registered token '{token.label}'."
|
45
|
+
|
46
|
+
|
47
|
+
def get_token_model(self, token_id: uuid.UUID, debug: bool = False) -> 'Union[TokenModel, None]':
|
48
|
+
"""
|
49
|
+
Return a token's model from the API instance.
|
50
|
+
"""
|
51
|
+
from meerschaum.models import TokenModel
|
52
|
+
r_url = tokens_endpoint + f'/{token_id}'
|
53
|
+
response = self.get(r_url, debug=debug)
|
54
|
+
if not response:
|
55
|
+
return None
|
56
|
+
data = response.json()
|
57
|
+
return TokenModel(**data)
|
58
|
+
|
59
|
+
|
60
|
+
def get_tokens(self, labels: Optional[List[str]] = None, debug: bool = False) -> List[Token]:
|
61
|
+
"""
|
62
|
+
Return the tokens registered to the current user.
|
63
|
+
"""
|
64
|
+
from meerschaum.utils.warnings import warn
|
65
|
+
r_url = tokens_endpoint
|
66
|
+
params = {}
|
67
|
+
if labels:
|
68
|
+
params['labels'] = ','.join(labels)
|
69
|
+
response = self.get(r_url, params={'labels': labels}, debug=debug)
|
70
|
+
if not response:
|
71
|
+
warn(f"Could not get tokens from '{self}':\n{response.text}")
|
72
|
+
return []
|
73
|
+
|
74
|
+
tokens = [
|
75
|
+
Token(instance=self, **payload)
|
76
|
+
for payload in response.json()
|
77
|
+
]
|
78
|
+
return tokens
|
79
|
+
|
80
|
+
|
81
|
+
def edit_token(self, token: Token, debug: bool = False) -> mrsm.SuccessTuple:
|
82
|
+
"""
|
83
|
+
Persist the token's in-memory state to the API.
|
84
|
+
"""
|
85
|
+
r_url = tokens_endpoint + f"/{token.id}/edit"
|
86
|
+
response = self.post(
|
87
|
+
r_url,
|
88
|
+
json={
|
89
|
+
'creation': token.creation.isoformat() if token.creation else None,
|
90
|
+
'expiration': token.expiration.isoformat() if token.expiration else None,
|
91
|
+
'label': token.label,
|
92
|
+
'is_valid': token.is_valid,
|
93
|
+
'scopes': token.scopes,
|
94
|
+
},
|
95
|
+
)
|
96
|
+
if not response:
|
97
|
+
return False, f"Failed to edit token:\n{response.text}"
|
98
|
+
|
99
|
+
success, msg = response.json()
|
100
|
+
return success, msg
|
101
|
+
|
102
|
+
|
103
|
+
def invalidate_token(self, token: Token, debug: bool = False) -> mrsm.SuccessTuple:
|
104
|
+
"""
|
105
|
+
Invalidate the token, disabling it for future requests.
|
106
|
+
"""
|
107
|
+
r_url = tokens_endpoint + f"/{token.id}/invalidate"
|
108
|
+
response = self.post(r_url)
|
109
|
+
if not response:
|
110
|
+
return False, f"Failed to invalidate token:\n{response.text}"
|
111
|
+
|
112
|
+
success, msg = response.json()
|
113
|
+
return success, msg
|
114
|
+
|
115
|
+
|
116
|
+
def get_token_scopes(self, token_id: Union[uuid.UUID, Token], debug: bool = False) -> List[str]:
|
117
|
+
"""
|
118
|
+
Return the scopes for a token.
|
119
|
+
"""
|
120
|
+
_token_id = (token_id.id if isinstance(token_id, Token) else token_id)
|
121
|
+
model = self.get_token_model(_token_id, debug=debug).scopes
|
122
|
+
return getattr(model, 'scopes', [])
|
123
|
+
|
124
|
+
|
125
|
+
def token_exists(self, token_id: Union[uuid.UUID, Token], debug: bool = False) -> bool:
|
126
|
+
"""
|
127
|
+
Return `True` if a token exists.
|
128
|
+
"""
|
129
|
+
_token_id = (token_id.id if isinstance(token_id, Token) else token_id)
|
130
|
+
model = self.get_token_model(_token_id, debug=debug)
|
131
|
+
if model is None:
|
132
|
+
return False
|
133
|
+
return model.creation is not None
|
134
|
+
|
135
|
+
|
136
|
+
def delete_token(self, token: Token, debug: bool = False) -> mrsm.SuccessTuple:
|
137
|
+
"""
|
138
|
+
Delete the token from the API.
|
139
|
+
"""
|
140
|
+
r_url = tokens_endpoint + f"/{token.id}"
|
141
|
+
response = self.delete(r_url, debug=debug)
|
142
|
+
if not response:
|
143
|
+
return False, f"Failed to delete token:\n{response.text}"
|
144
|
+
|
145
|
+
success, msg = response.json()
|
146
|
+
return success, msg
|
@@ -7,18 +7,23 @@ Manage users via the API Connector.
|
|
7
7
|
"""
|
8
8
|
|
9
9
|
from __future__ import annotations
|
10
|
-
|
10
|
+
|
11
|
+
import json
|
12
|
+
from uuid import UUID
|
13
|
+
|
14
|
+
import meerschaum as mrsm
|
15
|
+
from meerschaum.utils.typing import Optional, Any, List, SuccessTuple, Union
|
16
|
+
|
11
17
|
|
12
18
|
def get_users(
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
19
|
+
self,
|
20
|
+
debug: bool = False,
|
21
|
+
**kw: Any
|
22
|
+
) -> List[str]:
|
17
23
|
"""
|
18
24
|
Return a list of registered usernames.
|
19
25
|
"""
|
20
|
-
from meerschaum.
|
21
|
-
import json
|
26
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
22
27
|
response = self.get(
|
23
28
|
f"{STATIC_CONFIG['api']['endpoints']['users']}",
|
24
29
|
debug = debug,
|
@@ -31,15 +36,15 @@ def get_users(
|
|
31
36
|
except Exception as e:
|
32
37
|
return []
|
33
38
|
|
39
|
+
|
34
40
|
def edit_user(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
41
|
+
self,
|
42
|
+
user: mrsm.core.User,
|
43
|
+
debug: bool = False,
|
44
|
+
**kw: Any
|
45
|
+
) -> SuccessTuple:
|
40
46
|
"""Edit an existing user."""
|
41
|
-
import
|
42
|
-
from meerschaum.config.static import STATIC_CONFIG
|
47
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
43
48
|
r_url = f"{STATIC_CONFIG['api']['endpoints']['users']}/edit"
|
44
49
|
data = {
|
45
50
|
'username': user.username,
|
@@ -54,7 +59,7 @@ def edit_user(
|
|
54
59
|
if isinstance(_json, dict) and 'detail' in _json:
|
55
60
|
return False, _json['detail']
|
56
61
|
success_tuple = tuple(_json)
|
57
|
-
except Exception
|
62
|
+
except Exception:
|
58
63
|
msg = response.text if response else f"Failed to edit user '{user}'."
|
59
64
|
return False, msg
|
60
65
|
|
@@ -62,14 +67,13 @@ def edit_user(
|
|
62
67
|
|
63
68
|
|
64
69
|
def register_user(
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
+
self,
|
71
|
+
user: mrsm.core.User,
|
72
|
+
debug: bool = False,
|
73
|
+
**kw: Any
|
74
|
+
) -> SuccessTuple:
|
70
75
|
"""Register a new user."""
|
71
|
-
import
|
72
|
-
from meerschaum.config.static import STATIC_CONFIG
|
76
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
73
77
|
r_url = f"{STATIC_CONFIG['api']['endpoints']['users']}/register"
|
74
78
|
data = {
|
75
79
|
'username': user.username,
|
@@ -94,31 +98,37 @@ def register_user(
|
|
94
98
|
|
95
99
|
|
96
100
|
def get_user_id(
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
101
|
+
self,
|
102
|
+
user: mrsm.core.User,
|
103
|
+
debug: bool = False,
|
104
|
+
**kw: Any
|
105
|
+
) -> Union[int, str, UUID, None]:
|
102
106
|
"""Get a user's ID."""
|
103
|
-
from meerschaum.
|
104
|
-
import
|
107
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
108
|
+
from meerschaum.utils.misc import is_int, is_uuid
|
105
109
|
r_url = f"{STATIC_CONFIG['api']['endpoints']['users']}/{user.username}/id"
|
106
110
|
response = self.get(r_url, debug=debug, **kw)
|
107
111
|
try:
|
108
|
-
|
112
|
+
id_text = str(json.loads(response.text))
|
113
|
+
if is_int(id_text):
|
114
|
+
user_id = int(id_text)
|
115
|
+
elif is_uuid(id_text):
|
116
|
+
user_id = UUID(id_text)
|
117
|
+
else:
|
118
|
+
user_id = id_text
|
109
119
|
except Exception as e:
|
110
120
|
user_id = None
|
111
121
|
return user_id
|
112
122
|
|
123
|
+
|
113
124
|
def delete_user(
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
125
|
+
self,
|
126
|
+
user: mrsm.core.User,
|
127
|
+
debug: bool = False,
|
128
|
+
**kw: Any
|
129
|
+
) -> SuccessTuple:
|
119
130
|
"""Delete a user."""
|
120
|
-
from meerschaum.
|
121
|
-
import json
|
131
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
122
132
|
r_url = f"{STATIC_CONFIG['api']['endpoints']['users']}/{user.username}"
|
123
133
|
response = self.delete(r_url, debug=debug)
|
124
134
|
try:
|
@@ -126,53 +136,55 @@ def delete_user(
|
|
126
136
|
if isinstance(_json, dict) and 'detail' in _json:
|
127
137
|
return False, _json['detail']
|
128
138
|
success_tuple = tuple(_json)
|
129
|
-
except Exception
|
139
|
+
except Exception:
|
130
140
|
success_tuple = False, f"Failed to delete user '{user.username}'."
|
131
141
|
return success_tuple
|
132
142
|
|
143
|
+
|
133
144
|
def get_user_attributes(
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
145
|
+
self,
|
146
|
+
user: mrsm.core.User,
|
147
|
+
debug: bool = False,
|
148
|
+
**kw
|
149
|
+
) -> int:
|
139
150
|
"""Get a user's attributes."""
|
140
|
-
from meerschaum.
|
141
|
-
import json
|
151
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
142
152
|
r_url = f"{STATIC_CONFIG['api']['endpoints']['users']}/{user.username}/attributes"
|
143
153
|
response = self.get(r_url, debug=debug, **kw)
|
144
154
|
try:
|
145
155
|
attributes = json.loads(response.text)
|
146
|
-
except Exception
|
156
|
+
except Exception:
|
147
157
|
attributes = None
|
148
158
|
return attributes
|
149
159
|
|
160
|
+
|
150
161
|
#############################
|
151
162
|
# Chaining functions below. #
|
152
163
|
#############################
|
153
164
|
|
154
165
|
def get_user_password_hash(
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
166
|
+
self,
|
167
|
+
user: mrsm.core.User,
|
168
|
+
debug: bool = False,
|
169
|
+
**kw: Any
|
170
|
+
) -> Optional[str]:
|
160
171
|
"""If configured, get a user's password hash."""
|
161
|
-
from meerschaum.
|
172
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
162
173
|
r_url = STATIC_CONFIG['api']['endpoints']['users'] + '/' + user.username + '/password_hash'
|
163
174
|
response = self.get(r_url, debug=debug, **kw)
|
164
175
|
if not response:
|
165
176
|
return None
|
166
177
|
return response.json()
|
167
178
|
|
179
|
+
|
168
180
|
def get_user_type(
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
181
|
+
self,
|
182
|
+
user: mrsm.core.User,
|
183
|
+
debug: bool = False,
|
184
|
+
**kw: Any
|
185
|
+
) -> Optional[str]:
|
174
186
|
"""If configured, get a user's type."""
|
175
|
-
from meerschaum.
|
187
|
+
from meerschaum._internal.static import STATIC_CONFIG
|
176
188
|
r_url = STATIC_CONFIG['api']['endpoints']['users'] + '/' + user.username + '/type'
|
177
189
|
response = self.get(r_url, debug=debug, **kw)
|
178
190
|
if not response:
|
@@ -0,0 +1,83 @@
|
|
1
|
+
#! /usr/bin/env python3
|
2
|
+
# vim:fenc=utf-8
|
3
|
+
|
4
|
+
"""
|
5
|
+
Define the interface for instance connectors.
|
6
|
+
"""
|
7
|
+
|
8
|
+
from __future__ import annotations
|
9
|
+
|
10
|
+
import abc
|
11
|
+
from typing import Any, Union, Dict, List, Tuple, Optional
|
12
|
+
|
13
|
+
import meerschaum as mrsm
|
14
|
+
from meerschaum.connectors._Connector import Connector
|
15
|
+
|
16
|
+
|
17
|
+
class InstanceConnector(Connector):
|
18
|
+
"""
|
19
|
+
Instance connectors define the interface for managing pipes and provide methods
|
20
|
+
for management of users, plugins, tokens, and other metadata built atop pipes.
|
21
|
+
"""
|
22
|
+
|
23
|
+
IS_INSTANCE: bool = True
|
24
|
+
IS_THREAD_SAFE: bool = False
|
25
|
+
|
26
|
+
from ._users import (
|
27
|
+
get_users_pipe,
|
28
|
+
register_user,
|
29
|
+
get_user_id,
|
30
|
+
get_username,
|
31
|
+
get_users,
|
32
|
+
edit_user,
|
33
|
+
delete_user,
|
34
|
+
get_user_password_hash,
|
35
|
+
get_user_type,
|
36
|
+
get_user_attributes,
|
37
|
+
)
|
38
|
+
|
39
|
+
from ._plugins import (
|
40
|
+
get_plugins_pipe,
|
41
|
+
register_plugin,
|
42
|
+
get_plugin_user_id,
|
43
|
+
delete_plugin,
|
44
|
+
get_plugin_id,
|
45
|
+
get_plugin_version,
|
46
|
+
get_plugins,
|
47
|
+
get_plugin_user_id,
|
48
|
+
get_plugin_username,
|
49
|
+
get_plugin_attributes,
|
50
|
+
)
|
51
|
+
|
52
|
+
from ._tokens import (
|
53
|
+
get_tokens_pipe,
|
54
|
+
register_token,
|
55
|
+
edit_token,
|
56
|
+
invalidate_token,
|
57
|
+
delete_token,
|
58
|
+
get_token,
|
59
|
+
get_tokens,
|
60
|
+
get_token_model,
|
61
|
+
get_token_secret_hash,
|
62
|
+
token_exists,
|
63
|
+
get_token_scopes,
|
64
|
+
)
|
65
|
+
|
66
|
+
from ._pipes import (
|
67
|
+
register_pipe,
|
68
|
+
get_pipe_attributes,
|
69
|
+
get_pipe_id,
|
70
|
+
edit_pipe,
|
71
|
+
delete_pipe,
|
72
|
+
fetch_pipes_keys,
|
73
|
+
pipe_exists,
|
74
|
+
drop_pipe,
|
75
|
+
drop_pipe_indices,
|
76
|
+
sync_pipe,
|
77
|
+
create_pipe_indices,
|
78
|
+
clear_pipe,
|
79
|
+
get_pipe_data,
|
80
|
+
get_sync_time,
|
81
|
+
get_pipe_columns_types,
|
82
|
+
get_pipe_columns_indices,
|
83
|
+
)
|