summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2019-10-18 10:49:33 +0300
committerLars Wirzenius <liw@liw.fi>2019-10-18 10:49:33 +0300
commite4604e40a451150d2d5f8bef9d6a9c8dfc00c6d6 (patch)
tree2588958603fa067487bcecb9a51770b82a5804d2
parent540b55836a7eff3de13acfb54712fa931a8b4a52 (diff)
downloadick2-e4604e40a451150d2d5f8bef9d6a9c8dfc00c6d6.tar.gz
Revert "Change: get and use tokens"
This reverts commit 4dd2e14cd15ad2840cfc3636251802f8eb0bc9ba.
-rw-r--r--ick2/apibase.py63
-rw-r--r--ick2/logapi.py6
-rw-r--r--ick2/persistent.py36
-rw-r--r--ick2/persistent_tests.py44
-rw-r--r--ick2/projectapi.py20
-rw-r--r--ick2/trans.py40
-rw-r--r--ick2/workapi.py24
7 files changed, 94 insertions, 139 deletions
diff --git a/ick2/apibase.py b/ick2/apibase.py
index e18ebe2..f330eae 100644
--- a/ick2/apibase.py
+++ b/ick2/apibase.py
@@ -16,15 +16,10 @@
import ick2
-import bottle
-
-
class APIbase:
def __init__(self, state):
- assert (state is None or
- isinstance(state, ick2.MemoryPersistentState) or
- isinstance(state, ick2.MuckPersistentState))
+ assert state is None or isinstance(state, ick2.MemoryPersistentState)
self._trans = ick2.TransactionalState(state)
def get_routes(self, path):
@@ -57,26 +52,12 @@ class APIbase:
},
]
- # This is quite ugly. The apifw library we use as a wrapper around
- # Bottle should be doing this. But due to stupid reasons, it's
- # awkward to modify that library, for now, and anyway all of this
- # is going to be rewritten in a better programming language
- # eventually, so we take the past of least effort and increase
- # technical debt.
- def _get_token(self):
- v = bottle.request.get_header('Authorization', '')
- prefix = 'Bearer '
- if v.startswith(prefix):
- return v[len(prefix):]
- return None
-
def GET(self, callback):
def wrapper(content_type, body, **kwargs):
ick2.log.log(
'trace', msg_text='GET called', kwargs=kwargs,
content_type=content_type, body=body)
try:
- kwargs['token'] = self._get_token()
if 'raw_uri_path' in kwargs:
del kwargs['raw_uri_path']
body = callback(**kwargs)
@@ -101,7 +82,6 @@ class APIbase:
'trace', msg_text='POST called', kwargs=kwargs,
content_type=content_type, body=body)
try:
- kwargs['token'] = self._get_token()
body = callback(body, **kwargs)
except ick2.ExistsAlready as e:
ick2.log.log('error', msg_text=str(e), kwargs=kwargs)
@@ -114,7 +94,6 @@ class APIbase:
ick2.log.log(
'trace', msg_text='PUT called', kwargs=kwargs,
content_type=content_type, body=body)
- kwargs['token'] = self._get_token()
if 'raw_uri_path' in kwargs:
del kwargs['raw_uri_path']
try:
@@ -133,7 +112,6 @@ class APIbase:
'trace', msg_text='DELETE called', kwargs=kwargs,
content_type=content_type, body=body)
try:
- kwargs['token'] = self._get_token()
if 'raw_uri_path' in kwargs:
del kwargs['raw_uri_path']
body = callback(**kwargs)
@@ -144,19 +122,19 @@ class APIbase:
return ick2.OK(body)
return wrapper
- def create(self, body, token=None, **kwargs):
+ def create(self, body, **kwargs):
raise NotImplementedError()
- def update(self, body, name, token=None, **kwargs):
+ def update(self, body, name, **kwargs):
raise NotImplementedError()
- def delete(self, name, token=None, **kwargs):
+ def delete(self, name, **kwargs):
raise NotImplementedError()
- def list(self, token=None, **kwargs):
+ def list(self, **kwargs):
raise NotImplementedError()
- def show(self, name, token=None, **kwargs):
+ def show(self, name, **kwargs):
raise NotImplementedError()
@@ -166,27 +144,26 @@ class ResourceApiBase(APIbase):
super().__init__(state)
self._type_name = type_name
- def list(self, token=None, **kwargs):
- resources = self._trans.get_resources(token, self._type_name)
+ def list(self, **kwargs):
+ resources = self._trans.get_resources(self._type_name)
return {
self._type_name: [r.as_dict() for r in resources]
}
- def show(self, name, token=None, **kwargs):
- return self._trans.get_resource(token, self._type_name, name).as_dict()
+ def show(self, name, **kwargs):
+ return self._trans.get_resource(self._type_name, name).as_dict()
- def create(self, body, token=None, **kwargs):
+ def create(self, body, **kwargs):
ick2.log.log(
'trace', msg_text='create resource',
- resource_type=self._type_name,
- body=body, token=token, kwargs=kwargs)
+ resource_type=self._type_name, body=body, kwargs=kwargs)
as_dict = self.mangle_new_resource(body)
rid = self.get_resource_name(as_dict)
- if self._trans.has_resource(token, self._type_name, rid):
+ if self._trans.has_resource(self._type_name, rid):
raise ick2.ExistsAlready(rid)
- with self._trans.new(token, self._type_name, rid) as resource:
+ with self._trans.new(self._type_name, rid) as resource:
resource.from_dict(as_dict)
return as_dict
@@ -197,12 +174,12 @@ class ResourceApiBase(APIbase):
def get_resource_name(self, resource): # pragma: no cover
raise NotImplementedError()
- def update(self, body, name, token=None, **kwargs):
+ def update(self, body, name, **kwargs):
rid = self.get_resource_name(body)
- if not self._trans.has_resource(token, self._type_name, rid):
+ if not self._trans.has_resource(self._type_name, rid):
raise ick2.NotFound(kind=self._type_name, rid=rid)
- with self._trans.modify(token, self._type_name, rid) as resource:
+ with self._trans.modify(self._type_name, rid) as resource:
as_dict = self.mangle_updated_resource(resource.as_dict(), body)
resource.from_dict(as_dict)
@@ -211,7 +188,7 @@ class ResourceApiBase(APIbase):
def mangle_updated_resource(self, old, new): # pragma: no cover
return new
- def delete(self, name, token=None, **kwargs):
- if not self._trans.has_resource(token, self._type_name, name):
+ def delete(self, name, **kwargs):
+ if not self._trans.has_resource(self._type_name, name):
raise ick2.NotFound(kind=self._type_name, rid=name)
- self._trans.remove_resource(token, self._type_name, name)
+ self._trans.remove_resource(self._type_name, name)
diff --git a/ick2/logapi.py b/ick2/logapi.py
index 16aeaef..c43e8a6 100644
--- a/ick2/logapi.py
+++ b/ick2/logapi.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2017-2019 Lars Wirzenius
+# Copyright (C) 2017-2018 Lars Wirzenius
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
@@ -59,7 +59,7 @@ class LogAPI(ick2.ResourceApiBase): # pragma: no cover
def update(self, body, name, **kwargs): # pragma: no cover
raise ick2.MethodNotAllowed('Updating builds directly is not allowed')
- def show(self, name, token=None, **kwargs):
- log = self._trans.get_resource(token, 'log', str(name))
+ def show(self, name, **kwargs):
+ log = self._trans.get_resource('log', str(name))
ick2.log.log('info', msg_text='Returning log', log=log.as_dict())
return log['log']
diff --git a/ick2/persistent.py b/ick2/persistent.py
index d865207..31473ba 100644
--- a/ick2/persistent.py
+++ b/ick2/persistent.py
@@ -27,25 +27,25 @@ import ick2
class PersistentStateInterface: # pragma: no cover
- def get_resource_ids(self, token, kind):
+ def get_resource_ids(self, kind):
raise NotImplementedError()
- def has_resource(self, token, kind, rid):
+ def has_resource(self, kind, rid):
raise NotImplementedError()
- def get_resource(self, token, kind, rid):
+ def get_resource(self, kind, rid):
raise NotImplementedError()
- def get_resources(self, token, kind):
+ def get_resources(self, kind):
return [
- self.get_resource(token, kind, rid)
- for rid in self.get_resource_ids(token, kind)
+ self.get_resource(kind, rid)
+ for rid in self.get_resource_ids(kind)
]
- def write_resource(self, token, kind, rid, resource):
+ def write_resource(self, kind, rid, resource):
raise NotImplementedError()
- def remove_resource(self, token, kind, rid):
+ def remove_resource(self, kind, rid):
raise NotImplementedError()
@@ -54,25 +54,25 @@ class MemoryPersistentState(PersistentStateInterface):
def __init__(self):
self._res = {}
- def get_resource_ids(self, token, kind):
+ def get_resource_ids(self, kind):
if kind not in self._res:
return []
return list(self._res[kind].keys())
- def has_resource(self, token, kind, rid):
+ def has_resource(self, kind, rid):
return kind in self._res and rid in self._res[kind]
- def get_resource(self, token, kind, rid):
+ def get_resource(self, kind, rid):
if kind not in self._res or rid not in self._res[kind]:
raise ick2.NotFound(kind=kind, rid=rid)
return self._res[kind][rid]
- def write_resource(self, token, kind, rid, resource):
+ def write_resource(self, kind, rid, resource):
if kind not in self._res:
self._res[kind] = {}
self._res[kind][rid] = resource
- def remove_resource(self, token, kind, rid):
+ def remove_resource(self, kind, rid):
if kind not in self._res or rid not in self._res[kind]:
raise ick2.NotFound(kind=kind, rid=rid)
del self._res[kind][rid]
@@ -83,25 +83,25 @@ class MuckPersistentState(PersistentStateInterface):
def __init__(self):
self._res = {}
- def get_resource_ids(self, token, kind):
+ def get_resource_ids(self, kind):
if kind not in self._res:
return []
return list(self._res[kind].keys())
- def has_resource(self, token, kind, rid):
+ def has_resource(self, kind, rid):
return kind in self._res and rid in self._res[kind]
- def get_resource(self, token, kind, rid):
+ def get_resource(self, kind, rid):
if kind not in self._res or rid not in self._res[kind]:
raise ick2.NotFound(kind=kind, rid=rid)
return self._res[kind][rid]
- def write_resource(self, token, kind, rid, resource):
+ def write_resource(self, kind, rid, resource):
if kind not in self._res:
self._res[kind] = {}
self._res[kind][rid] = resource
- def remove_resource(self, token, kind, rid):
+ def remove_resource(self, kind, rid):
if kind not in self._res or rid not in self._res[kind]:
raise ick2.NotFound(kind=kind, rid=rid)
del self._res[kind][rid]
diff --git a/ick2/persistent_tests.py b/ick2/persistent_tests.py
index 802ca8b..3d72342 100644
--- a/ick2/persistent_tests.py
+++ b/ick2/persistent_tests.py
@@ -24,69 +24,51 @@ import ick2
class PersistentStateTestsMixIn:
- def get_token(self):
- raise NotImplementedError()
-
def test_has_no_resources_initially(self):
- token = self.get_token()
- self.assertEqual(self.state.get_resource_ids(token, 'silly'), [])
+ self.assertEqual(self.state.get_resource_ids('silly'), [])
def test_has_no_resource_initially(self):
- token = self.get_token()
with self.assertRaises(ick2.NotFound):
- self.state.get_resource(token, 'silly', '#1')
+ self.state.get_resource('silly', '#1')
def test_creates_resource(self):
as_dict = {'foo': 'bar'}
r = ick2.resource_from_dict(as_dict)
+ self.state.write_resource('silly', '#1', r)
+ self.assertTrue(self.state.has_resource('silly', '#1'))
+ self.assertEqual(self.state.get_resource_ids('silly'), ['#1'])
- token = self.get_token()
- self.state.write_resource(token, 'silly', '#1', r)
- self.assertTrue(self.state.has_resource(token, 'silly', '#1'))
- self.assertEqual(self.state.get_resource_ids(token, 'silly'), ['#1'])
-
- r2 = self.state.get_resource(token, 'silly', '#1')
+ r2 = self.state.get_resource('silly', '#1')
self.assertTrue(isinstance(r2, ick2.Resource))
self.assertEqual(r.as_dict(), r2.as_dict())
def test_removes_resource(self):
as_dict = {'foo': 'bar'}
r = ick2.resource_from_dict(as_dict)
-
- token = self.get_token()
- self.state.write_resource(token, 'silly', '#1', r)
- self.state.remove_resource(token, 'silly', '#1')
- self.assertFalse(self.state.has_resource(token, 'silly', '#1'))
- self.assertEqual(self.state.get_resource_ids(token, 'silly'), [])
+ self.state.write_resource('silly', '#1', r)
+ self.state.remove_resource('silly', '#1')
+ self.assertFalse(self.state.has_resource('silly', '#1'))
+ self.assertEqual(self.state.get_resource_ids('silly'), [])
def test_raises_error_removing_nonexistent_resource_kind(self):
- token = self.get_token()
with self.assertRaises(ick2.NotFound):
- self.state.remove_resource(token, 'silly', '#1')
+ self.state.remove_resource('silly', '#1')
def test_raises_error_removing_nonexistent_resource(self):
as_dict = {'foo': 'bar'}
r = ick2.resource_from_dict(as_dict)
-
- token = self.get_token()
- self.state.write_resource(token, 'silly', '#1', r)
+ self.state.write_resource('silly', '#1', r)
with self.assertRaises(ick2.NotFound):
- self.state.remove_resource(token, 'silly', '#2')
+ self.state.remove_resource('silly', '#2')
class MemoryPersistentStateTests(unittest.TestCase, PersistentStateTestsMixIn):
- def get_token(self):
- return 'DUMMY-TOKEN'
-
def setUp(self):
self.state = ick2.MemoryPersistentState()
class MuckPersistentStateTests(unittest.TestCase, PersistentStateTestsMixIn):
- def get_token(self):
- return 'DUMMY-TOKEN'
-
def setUp(self):
self.state = ick2.MuckPersistentState()
diff --git a/ick2/projectapi.py b/ick2/projectapi.py
index a854716..0d9f8f5 100644
--- a/ick2/projectapi.py
+++ b/ick2/projectapi.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2017-2019 Lars Wirzenius
+# Copyright (C) 2017-2018 Lars Wirzenius
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
@@ -50,17 +50,16 @@ class ProjectAPI(ick2.ResourceApiBase):
]
def trigger_project(self, project, **kwargs): # pragma: no cover
- token = 'FIXME'
- with self._trans.modify(token, 'projects', project) as p:
- self._start_build(token, p)
+ with self._trans.modify('projects', project) as p:
+ self._start_build(p)
return {'status': ick2.BUILD_TRIGGERED}
- def _start_build(self, token, project): # pragma: no cover
+ def _start_build(self, project): # pragma: no cover
build_no = self._pick_build_number(project)
build_id = '{}/{}'.format(project['project'], build_no)
ick2.log.log('info', msg_text='Starting new build', build_id=build_id)
- with self._trans.new(token, 'builds', build_id) as build:
+ with self._trans.new('builds', build_id) as build:
parameters = project.get('parameters', {})
build.from_dict({
'build_id': build_id,
@@ -82,10 +81,10 @@ class ProjectAPI(ick2.ResourceApiBase):
build_obj = ick2.Build(build)
graph = build_obj.get_graph()
graph.append_action(create_workspace)
- for action in self._get_actions(token, project):
+ for action in self._get_actions(project):
graph.append_action(action)
- with self._trans.new(token, 'log', build_id) as r:
+ with self._trans.new('log', build_id) as r:
r.from_dict({
'build_id': build_id,
'log': '',
@@ -102,12 +101,11 @@ class ProjectAPI(ick2.ResourceApiBase):
old_build_no=old_build_no, build_no=build_no)
return build_no
- def _get_actions(self, token, project): # pragma: no cover
+ def _get_actions(self, project): # pragma: no cover
actions = []
params = project.get('parameters', {})
for pipeline_name in project.get('pipelines', []):
- pipeline = self._trans.get_resource(
- token, 'pipelines', pipeline_name)
+ pipeline = self._trans.get_resource('pipelines', pipeline_name)
wanted = pipeline.get('parameters', [])
missing = [
name
diff --git a/ick2/trans.py b/ick2/trans.py
index 20e38ed..c5dc22f 100644
--- a/ick2/trans.py
+++ b/ick2/trans.py
@@ -19,13 +19,12 @@ import ick2
class TransactionalResource:
- def __init__(self, token, state, kind, rid):
- self.token = token
+ def __init__(self, state, kind, rid):
self.state = state
self.kind = kind
self.rid = rid
- if state.has_resource(self.token, kind, rid):
- self.resource = state.get_resource(self.token, kind, rid)
+ if state.has_resource(kind, rid):
+ self.resource = state.get_resource(kind, rid)
else:
self.resource = ick2.resource_from_dict({})
@@ -44,8 +43,7 @@ class TransactionalResource:
def __exit__(self, exc_type, value, traceback):
if exc_type is None:
- self.state.write_resource(
- self.token, self.kind, self.rid, self.resource)
+ self.state.write_resource(self.kind, self.rid, self.resource)
class TransactionalState:
@@ -53,25 +51,25 @@ class TransactionalState:
def __init__(self, state):
self.state = state
- def new(self, token, kind, rid):
- return TransactionalResource(token, self.state, kind, rid)
+ def new(self, kind, rid):
+ return TransactionalResource(self.state, kind, rid)
- def modify(self, token, kind, rid):
- if not self.state.has_resource(token, kind, rid):
+ def modify(self, kind, rid):
+ if not self.state.has_resource(kind, rid):
raise ick2.NotFound(kind=kind, rid=rid)
- return TransactionalResource(token, self.state, kind, rid)
+ return TransactionalResource(self.state, kind, rid)
- def get_resource_ids(self, token, kind):
- return self.state.get_resource_ids(token, kind)
+ def get_resource_ids(self, kind):
+ return self.state.get_resource_ids(kind)
- def has_resource(self, token, kind, rid):
- return self.state.has_resource(token, kind, rid)
+ def has_resource(self, kind, rid):
+ return self.state.has_resource(kind, rid)
- def get_resource(self, token, kind, rid):
- return self.state.get_resource(token, kind, rid)
+ def get_resource(self, kind, rid):
+ return self.state.get_resource(kind, rid)
- def get_resources(self, token, kind):
- return self.state.get_resources(token, kind)
+ def get_resources(self, kind):
+ return self.state.get_resources(kind)
- def remove_resource(self, token, kind, rid):
- self.state.remove_resource(token, kind, rid)
+ def remove_resource(self, kind, rid):
+ self.state.remove_resource(kind, rid)
diff --git a/ick2/workapi.py b/ick2/workapi.py
index 3eeb0fa..5179f90 100644
--- a/ick2/workapi.py
+++ b/ick2/workapi.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2017-2019 Lars Wirzenius
+# Copyright (C) 2017-2018 Lars Wirzenius
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
@@ -40,24 +40,24 @@ class WorkAPI(ick2.APIbase):
},
]
- def get_work(self, token=None, **kwargs):
+ def get_work(self, **kwargs):
worker_id = self._get_client_id(**kwargs)
ick2.log.log(
'trace', msg_text='Worker wants work', worker_id=worker_id)
- with self._trans.modify(token, 'workers', worker_id) as worker:
+ with self._trans.modify('workers', worker_id) as worker:
doing = worker.get('doing')
if doing:
ick2.log.log(
'trace', msg_text='Worker already got work', doing=doing)
return doing
- build_id = self._pick_build(token, worker_id)
+ build_id = self._pick_build(worker_id)
if build_id is None:
ick2.log.log('trace', msg_text='No suitable build for worker')
return {}
- with self._trans.modify(token, 'builds', build_id) as build:
- with self._trans.modify(token, 'log', build_id) as log:
+ with self._trans.modify('builds', build_id) as build:
+ with self._trans.modify('log', build_id) as log:
ick2.log.log(
'trace', msg_text='Picked build for worker',
build_id=build_id, build=build.as_dict())
@@ -115,7 +115,7 @@ class WorkAPI(ick2.APIbase):
raise ick2.ClientIdMissing()
return client_id
- def _pick_build(self, token, worker):
+ def _pick_build(self, worker):
def on_worker(build):
return build.get('worker') == worker
@@ -129,7 +129,7 @@ class WorkAPI(ick2.APIbase):
def is_triggered(build):
return status(build) == ick2.BUILD_TRIGGERED
- builds = self._trans.get_resources(token, 'builds')
+ builds = self._trans.get_resources('builds')
return (self._find_build(builds, on_worker, is_building) or
self._find_build(builds, is_triggered))
@@ -139,7 +139,7 @@ class WorkAPI(ick2.APIbase):
return build['build_id']
return None
- def update_work(self, update, token=None, **kwargs):
+ def update_work(self, update, **kwargs):
try:
worker_id = update['worker']
build_id = update['build_id']
@@ -148,9 +148,9 @@ class WorkAPI(ick2.APIbase):
except KeyError as e: # pragma: no cover
raise ick2.BadUpdate(str(e))
- with self._trans.modify(token, 'workers', worker_id) as worker:
- with self._trans.modify(token, 'builds', build_id) as build:
- with self._trans.modify(token, 'log', build_id) as log:
+ with self._trans.modify('workers', worker_id) as worker:
+ with self._trans.modify('builds', build_id) as build:
+ with self._trans.modify('log', build_id) as log:
doing = worker.get('doing', {})
self._check_work_update(doing, update)
self._append_to_build_log(log, update)