From c13f7cd9dfd3a44903dd405f16944db3724a6706 Mon Sep 17 00:00:00 2001 From: jakedt Date: Tue, 25 Feb 2014 18:22:02 -0500 Subject: [PATCH] Add the resource_key back to the repository build. --- data/database.py | 1 + data/model.py | 18 ++++++++++-------- endpoints/api.py | 7 +++---- endpoints/webhooks.py | 4 ++-- initdb.py | 2 +- test/data/test.db | Bin 167936 -> 168960 bytes test/test_api_usage.py | 4 ++-- workers/dockerfilebuild.py | 2 +- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/data/database.py b/data/database.py index dd6542106..f245ccb96 100644 --- a/data/database.py +++ b/data/database.py @@ -237,6 +237,7 @@ class RepositoryBuild(BaseModel): uuid = CharField(default=uuid_generator, index=True) repository = ForeignKeyField(Repository, index=True) access_token = ForeignKeyField(AccessToken) + resource_key = CharField(index=True) job_config = TextField() phase = CharField(default='waiting') started = DateTimeField(default=datetime.now) diff --git a/data/model.py b/data/model.py index 1ddb09f2c..e9e695e9f 100644 --- a/data/model.py +++ b/data/model.py @@ -775,14 +775,15 @@ def get_all_repo_users(namespace_name, repository_name): def get_repository_for_resource(resource_key): - joined = Repository.select().join(RepositoryBuild) - query = joined.where(RepositoryBuild.resource_key == resource_key).limit(1) - result = list(query) - if not result: + try: + return (Repository + .select() + .join(RepositoryBuild) + .where(RepositoryBuild.resource_key == resource_key) + .get()) + except Repository.DoesNotExist: return None - return result[0] - def get_repository(namespace_name, repository_name): try: @@ -1420,11 +1421,12 @@ def list_repository_builds(namespace_name, repository_name, return query -def create_repository_build(repo, access_token, job_config_obj, +def create_repository_build(repo, access_token, job_config_obj, dockerfile_id, display_name, trigger=None): return RepositoryBuild.create(repository=repo, access_token=access_token, job_config=json.dumps(job_config_obj), - display_name=display_name, trigger=trigger) + display_name=display_name, trigger=trigger, + resource_key=dockerfile_id) def create_webhook(repo, params_obj): diff --git a/endpoints/api.py b/endpoints/api.py index 3a522c65a..ea4d88318 100644 --- a/endpoints/api.py +++ b/endpoints/api.py @@ -1252,15 +1252,14 @@ def request_repo_build(namespace, repository): logger.debug('**********Md5: %s' % display_name) host = urlparse.urlparse(request.url).netloc - repo = '%s/%s/%s' % (host, repo.namespace, repo.name) + repo_tag_base = '%s/%s/%s' % (host, repo.namespace, repo.name) job_config = { 'docker_tags': ['latest'], 'build_subdir': '', - 'repository': repo, - 'resource_key': dockerfile_id, + 'repository': repo_tag_base, } build_request = model.create_repository_build(repo, token, job_config, - display_name) + dockerfile_id, display_name) dockerfile_build_queue.put(json.dumps({ 'build_uuid': build_request.uuid, 'namespace': namespace, diff --git a/endpoints/webhooks.py b/endpoints/webhooks.py index 65a2ec403..35d61d1a1 100644 --- a/endpoints/webhooks.py +++ b/endpoints/webhooks.py @@ -84,10 +84,10 @@ def build_trigger_webhook(namespace, repository, trigger_uuid): 'docker_tags': tags, 'repository': repo, 'build_subdir': subdir, - 'resource_key': dockerfile_id, } build_request = model.create_repository_build(trigger.repository, token, - job_config, name, trigger) + job_config, dockerfile_id, + name, trigger) dockerfile_build_queue.put(json.dumps({ 'build_uuid': build_request.uuid, diff --git a/initdb.py b/initdb.py index 97ede01d1..071e0d180 100644 --- a/initdb.py +++ b/initdb.py @@ -327,9 +327,9 @@ def populate_database(): 'repository': repo, 'docker_tags': ['latest'], 'build_subdir': '', - 'resource_key': '701dcc3724fb4f2ea6c31400528343cd', } build = model.create_repository_build(building, token, job_config, + '701dcc3724fb4f2ea6c31400528343cd' 'build-name', trigger) build.uuid = 'deadbeef-dead-beef-dead-beefdeadbeef' build.save() diff --git a/test/data/test.db b/test/data/test.db index ec2d396b04feac91796fec7a9ca3d88241c74f82..b2ed400b9e381f5cd18b05806808040aa8a0b617 100644 GIT binary patch delta 4873 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 diff --git a/test/test_api_usage.py b/test/test_api_usage.py index 7949d18c1..f6654fdab 100644 --- a/test/test_api_usage.py +++ b/test/test_api_usage.py @@ -858,7 +858,7 @@ class TestGetRepoBuilds(ApiTestCase): assert 'status' in build -class TestRequearRepoBuild(ApiTestCase): +class TestRequestRepoBuild(ApiTestCase): def test_requestrepobuild(self): self.login(ADMIN_ACCESS_USER) @@ -871,7 +871,7 @@ class TestRequearRepoBuild(ApiTestCase): # Request a (fake) build. self.postResponse('api.request_repo_build', params=dict(repository=ADMIN_ACCESS_USER + '/simple'), - data=dict(file_id = 'foobarbaz'), + data=dict(file_id='foobarbaz'), expected_code=201) # Check for the build. diff --git a/workers/dockerfilebuild.py b/workers/dockerfilebuild.py index a6c53c798..d0ee58360 100644 --- a/workers/dockerfilebuild.py +++ b/workers/dockerfilebuild.py @@ -274,7 +274,7 @@ class DockerfileBuildWorker(Worker): job_config = json.loads(repository_build.job_config) - resource_url = user_files.get_file_url(job_config['resource_key']) + resource_url = user_files.get_file_url(repository_build.resource_key) tag_names = job_config['docker_tags'] build_subdir = job_config['build_subdir'] repo = job_config['repository']