Merge lp:~cjohnston/ubuntu-ci-services-itself/new-ticket-defaults into lp:ubuntu-ci-services-itself
- new-ticket-defaults
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Chris Johnston |
Approved revision: | 227 |
Merged at revision: | 231 |
Proposed branch: | lp:~cjohnston/ubuntu-ci-services-itself/new-ticket-defaults |
Merge into: | lp:ubuntu-ci-services-itself |
Diff against target: |
277 lines (+60/-11) 9 files modified
juju-deployer/configs/unit_config.yaml.tmpl (+5/-0) juju-deployer/ticket-system.yaml (+1/-2) ticket_system/setup.py (+1/-0) ticket_system/ticket/migrations/0001_initial.py (+7/-3) ticket_system/ticket/models.py (+10/-0) ticket_system/ticket/tests/test_full_read_api.py (+2/-0) ticket_system/ticket/tests/test_models.py (+4/-2) ticket_system/ticket/tests/test_read_api.py (+10/-0) ticket_system/ticket_system/settings.py (+20/-4) |
To merge this branch: | bzr merge lp:~cjohnston/ubuntu-ci-services-itself/new-ticket-defaults |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andy Doan (community) | Approve | ||
PS Jenkins bot (community) | continuous-integration | Approve | |
Review via email:
|
Commit message
Add 'series' and 'master ppa' defaults to a ticket
Description of the change
* Add 'series' and 'master ppa' defaults to a ticket
* switch from defining extra settings in the deployer yaml to using unit_config
- 226. By Chris Johnston
-
cleanup
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:226
http://
Executed test runs:
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:227
http://
Executed test runs:
Click here to trigger a rebuild:
http://
- 227. By Chris Johnston
-
Add choices
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:227
http://
Executed test runs:
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Andy Doan (doanac) : | # |
Preview Diff
1 | === modified file 'juju-deployer/configs/unit_config.yaml.tmpl' | |||
2 | --- juju-deployer/configs/unit_config.yaml.tmpl 2014-02-03 20:29:42 +0000 | |||
3 | +++ juju-deployer/configs/unit_config.yaml.tmpl 2014-02-11 16:41:21 +0000 | |||
4 | @@ -14,3 +14,8 @@ | |||
5 | 14 | oauth_token_secret: TODO | 14 | oauth_token_secret: TODO |
6 | 15 | 15 | ||
7 | 16 | ppa_pattern: "ci-pool-\\d+" | 16 | ppa_pattern: "ci-pool-\\d+" |
8 | 17 | |||
9 | 18 | # for ticket system | ||
10 | 19 | base_image: "http://cloud-images.ubuntu.com/releases/13.10/release-20131015/ubuntu-13.10-server-cloudimg-amd64-disk1.img" | ||
11 | 20 | series: SAUCY | ||
12 | 21 | master_ppa: TODO | ||
13 | 17 | 22 | ||
14 | === modified file 'juju-deployer/ticket-system.yaml' | |||
15 | --- juju-deployer/ticket-system.yaml 2014-01-29 20:13:31 +0000 | |||
16 | +++ juju-deployer/ticket-system.yaml 2014-02-11 16:41:21 +0000 | |||
17 | @@ -16,13 +16,12 @@ | |||
18 | 16 | options: | 16 | options: |
19 | 17 | vcs: bzr | 17 | vcs: bzr |
20 | 18 | repos_url: lp:ubuntu-ci-services-itself | 18 | repos_url: lp:ubuntu-ci-services-itself |
22 | 19 | additional_distro_packages: python-mock,lazr.enum | 19 | additional_distro_packages: python-mock,lazr.enum, python-yaml |
23 | 20 | additional_pip_packages: django-tastypie==0.9.15 | 20 | additional_pip_packages: django-tastypie==0.9.15 |
24 | 21 | application_path: ticket_system/ | 21 | application_path: ticket_system/ |
25 | 22 | django_settings: ticket_system.settings | 22 | django_settings: ticket_system.settings |
26 | 23 | django_south: True | 23 | django_south: True |
27 | 24 | django_debug: True | 24 | django_debug: True |
28 | 25 | django_extra_settings: BASE_IMAGE_DEFAULT="http://cloud-images.ubuntu.com/releases/13.10/release-20131015/ubuntu-13.10-server-cloudimg-amd64-disk1.img" | ||
29 | 26 | python_path: /srv/ts_django/ci-utils:/srv/ts_django/ticket_system | 25 | python_path: /srv/ts_django/ci-utils:/srv/ts_django/ticket_system |
30 | 27 | # this gets shared with gunicorn via a relation-set in this charm | 26 | # this gets shared with gunicorn via a relation-set in this charm |
31 | 28 | wsgi_wsgi_file: ticket_system.wsgi:application | 27 | wsgi_wsgi_file: ticket_system.wsgi:application |
32 | 29 | 28 | ||
33 | === modified file 'ticket_system/setup.py' | |||
34 | --- ticket_system/setup.py 2014-01-14 19:16:51 +0000 | |||
35 | +++ ticket_system/setup.py 2014-02-11 16:41:21 +0000 | |||
36 | @@ -49,6 +49,7 @@ | |||
37 | 49 | 'mock==1.0.1', | 49 | 'mock==1.0.1', |
38 | 50 | 'model_mommy==1.2', | 50 | 'model_mommy==1.2', |
39 | 51 | 'lazr.enum>=1.1.2', | 51 | 'lazr.enum>=1.1.2', |
40 | 52 | 'PyYAML==3.10', | ||
41 | 52 | ] | 53 | ] |
42 | 53 | 54 | ||
43 | 54 | setup( | 55 | setup( |
44 | 55 | 56 | ||
45 | === modified file 'ticket_system/ticket/migrations/0001_initial.py' | |||
46 | --- ticket_system/ticket/migrations/0001_initial.py 2014-01-24 16:39:35 +0000 | |||
47 | +++ ticket_system/ticket/migrations/0001_initial.py 2014-02-11 16:41:21 +0000 | |||
48 | @@ -17,7 +17,9 @@ | |||
49 | 17 | ('bug_id', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), | 17 | ('bug_id', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), |
50 | 18 | ('current_workflow_step', self.gf('django.db.models.fields.IntegerField')(default=0, max_length=4096)), | 18 | ('current_workflow_step', self.gf('django.db.models.fields.IntegerField')(default=0, max_length=4096)), |
51 | 19 | ('status', self.gf('django.db.models.fields.IntegerField')(default=0, max_length=4096)), | 19 | ('status', self.gf('django.db.models.fields.IntegerField')(default=0, max_length=4096)), |
53 | 20 | ('base_image', self.gf('django.db.models.fields.CharField')(max_length=4096)), | 20 | ('base_image', self.gf('django.db.models.fields.CharField')(default='', max_length=4096)), |
54 | 21 | ('series', self.gf('django.db.models.fields.CharField')(default=None, max_length=4096)), | ||
55 | 22 | ('master_ppa', self.gf('django.db.models.fields.CharField')(default=None, max_length=4096)), | ||
56 | 21 | ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), | 23 | ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
57 | 22 | ('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), | 24 | ('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
58 | 23 | ('added_binaries', self.gf('django.db.models.fields.CharField')(max_length=4096, null=True, blank=True)), | 25 | ('added_binaries', self.gf('django.db.models.fields.CharField')(max_length=4096, null=True, blank=True)), |
59 | @@ -86,7 +88,7 @@ | |||
60 | 86 | u'project.sourcepackage': { | 88 | u'project.sourcepackage': { |
61 | 87 | 'Meta': {'object_name': 'SourcePackage', 'db_table': "'sourcepackage'"}, | 89 | 'Meta': {'object_name': 'SourcePackage', 'db_table': "'sourcepackage'"}, |
62 | 88 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | 90 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
64 | 89 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) | 91 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) |
65 | 90 | }, | 92 | }, |
66 | 91 | u'ticket.sourcepackageupload': { | 93 | u'ticket.sourcepackageupload': { |
67 | 92 | 'Meta': {'object_name': 'SourcePackageUpload', 'db_table': "'sourcepackageupload'"}, | 94 | 'Meta': {'object_name': 'SourcePackageUpload', 'db_table': "'sourcepackageupload'"}, |
68 | @@ -114,14 +116,16 @@ | |||
69 | 114 | u'ticket.ticket': { | 116 | u'ticket.ticket': { |
70 | 115 | 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket'"}, | 117 | 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket'"}, |
71 | 116 | 'added_binaries': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True', 'blank': 'True'}), | 118 | 'added_binaries': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True', 'blank': 'True'}), |
73 | 117 | 'base_image': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), | 119 | 'base_image': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), |
74 | 118 | 'bug_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), | 120 | 'bug_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), |
75 | 119 | 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), | 121 | 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
76 | 120 | 'current_workflow_step': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '4096'}), | 122 | 'current_workflow_step': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '4096'}), |
77 | 121 | 'description': ('django.db.models.fields.TextField', [], {}), | 123 | 'description': ('django.db.models.fields.TextField', [], {}), |
78 | 122 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | 124 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
79 | 125 | 'master_ppa': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '4096'}), | ||
80 | 123 | 'owner': ('django.db.models.fields.EmailField', [], {'max_length': '254'}), | 126 | 'owner': ('django.db.models.fields.EmailField', [], {'max_length': '254'}), |
81 | 124 | 'removed_binaries': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True', 'blank': 'True'}), | 127 | 'removed_binaries': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True', 'blank': 'True'}), |
82 | 128 | 'series': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '4096'}), | ||
83 | 125 | 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '4096'}), | 129 | 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '4096'}), |
84 | 126 | 'title': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), | 130 | 'title': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), |
85 | 127 | 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) | 131 | 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
86 | 128 | 132 | ||
87 | === modified file 'ticket_system/ticket/models.py' | |||
88 | --- ticket_system/ticket/models.py 2014-01-28 12:28:13 +0000 | |||
89 | +++ ticket_system/ticket/models.py 2014-02-11 16:41:21 +0000 | |||
90 | @@ -38,6 +38,12 @@ | |||
91 | 38 | class Meta: | 38 | class Meta: |
92 | 39 | db_table = 'ticket' | 39 | db_table = 'ticket' |
93 | 40 | 40 | ||
94 | 41 | SERIES_CHOICES = ( | ||
95 | 42 | ('PRECISE', 'Precise'), | ||
96 | 43 | ('QUANTAL', 'Quantal'), | ||
97 | 44 | ('SAUCY', 'Saucy'), | ||
98 | 45 | ('TRUSTY', 'Trusty'), | ||
99 | 46 | ) | ||
100 | 41 | owner = models.EmailField(max_length=254) | 47 | owner = models.EmailField(max_length=254) |
101 | 42 | title = models.CharField(max_length=4096) | 48 | title = models.CharField(max_length=4096) |
102 | 43 | description = models.TextField() | 49 | description = models.TextField() |
103 | @@ -50,6 +56,10 @@ | |||
104 | 50 | default=000) | 56 | default=000) |
105 | 51 | base_image = models.CharField(max_length=4096, | 57 | base_image = models.CharField(max_length=4096, |
106 | 52 | default=settings.BASE_IMAGE_DEFAULT) | 58 | default=settings.BASE_IMAGE_DEFAULT) |
107 | 59 | series = models.CharField(max_length=4096, choices=SERIES_CHOICES, | ||
108 | 60 | default=settings.SERIES_DEFAULT) | ||
109 | 61 | master_ppa = models.CharField(max_length=4096, | ||
110 | 62 | default=settings.MASTER_PPA_DEFAULT) | ||
111 | 53 | created = models.DateTimeField(auto_now_add=True) | 63 | created = models.DateTimeField(auto_now_add=True) |
112 | 54 | updated = models.DateTimeField(auto_now=True) | 64 | updated = models.DateTimeField(auto_now=True) |
113 | 55 | # Comma-separated list of binary names to install or not install when | 65 | # Comma-separated list of binary names to install or not install when |
114 | 56 | 66 | ||
115 | === modified file 'ticket_system/ticket/tests/test_full_read_api.py' | |||
116 | --- ticket_system/ticket/tests/test_full_read_api.py 2014-01-24 16:58:12 +0000 | |||
117 | +++ ticket_system/ticket/tests/test_full_read_api.py 2014-02-11 16:41:21 +0000 | |||
118 | @@ -89,7 +89,9 @@ | |||
119 | 89 | u'owner': unicode(self.ticket.owner), | 89 | u'owner': unicode(self.ticket.owner), |
120 | 90 | u'base_image': unicode(self.ticket.base_image), | 90 | u'base_image': unicode(self.ticket.base_image), |
121 | 91 | u'id': self.ticket.pk, | 91 | u'id': self.ticket.pk, |
122 | 92 | u'master_ppa': unicode(self.ticket.master_ppa), | ||
123 | 92 | u'resource_uri': u'/api/v1/fullticket/{0}/'.format(self.ticket.pk), | 93 | u'resource_uri': u'/api/v1/fullticket/{0}/'.format(self.ticket.pk), |
124 | 94 | u'series': unicode(self.ticket.series), | ||
125 | 93 | u'updated': unicode(self.ticket.updated.strftime( | 95 | u'updated': unicode(self.ticket.updated.strftime( |
126 | 94 | "%Y-%m-%dT%H:%M:%S.%f")), | 96 | "%Y-%m-%dT%H:%M:%S.%f")), |
127 | 95 | u'removed_binaries': self.ticket.removed_binaries, | 97 | u'removed_binaries': self.ticket.removed_binaries, |
128 | 96 | 98 | ||
129 | === modified file 'ticket_system/ticket/tests/test_models.py' | |||
130 | --- ticket_system/ticket/tests/test_models.py 2014-01-24 16:39:35 +0000 | |||
131 | +++ ticket_system/ticket/tests/test_models.py 2014-02-11 16:41:21 +0000 | |||
132 | @@ -42,8 +42,8 @@ | |||
133 | 42 | bug_id='12345', owner='test@example.com', | 42 | bug_id='12345', owner='test@example.com', |
134 | 43 | current_workflow_step=TicketWorkflowStep.PKG_BUILDING, | 43 | current_workflow_step=TicketWorkflowStep.PKG_BUILDING, |
135 | 44 | status=TicketWorkflowStepStatus.PKG_BUILDING_INPROGRESS, | 44 | status=TicketWorkflowStepStatus.PKG_BUILDING_INPROGRESS, |
138 | 45 | base_image='17', added_binaries="foo,bar", | 45 | base_image='17', added_binaries="foo,bar", series='saucy', |
139 | 46 | removed_binaries="baz"): | 46 | removed_binaries="baz", master_ppa='ci-engine/ppa'): |
140 | 47 | ticket = Ticket() | 47 | ticket = Ticket() |
141 | 48 | ticket.owner = owner | 48 | ticket.owner = owner |
142 | 49 | ticket.title = title | 49 | ticket.title = title |
143 | @@ -54,6 +54,8 @@ | |||
144 | 54 | ticket.base_image = base_image | 54 | ticket.base_image = base_image |
145 | 55 | ticket.added_binaries = added_binaries | 55 | ticket.added_binaries = added_binaries |
146 | 56 | ticket.removed_binaries = removed_binaries | 56 | ticket.removed_binaries = removed_binaries |
147 | 57 | ticket.series = series | ||
148 | 58 | ticket.master_ppa = master_ppa | ||
149 | 57 | ticket.save() | 59 | ticket.save() |
150 | 58 | return ticket | 60 | return ticket |
151 | 59 | 61 | ||
152 | 60 | 62 | ||
153 | === modified file 'ticket_system/ticket/tests/test_read_api.py' | |||
154 | --- ticket_system/ticket/tests/test_read_api.py 2014-01-24 16:58:12 +0000 | |||
155 | +++ ticket_system/ticket/tests/test_read_api.py 2014-02-11 16:41:21 +0000 | |||
156 | @@ -77,8 +77,10 @@ | |||
157 | 77 | u'removed_binaries': self.ticket.removed_binaries, | 77 | u'removed_binaries': self.ticket.removed_binaries, |
158 | 78 | u'base_image': unicode(self.ticket.base_image), | 78 | u'base_image': unicode(self.ticket.base_image), |
159 | 79 | u'id': self.ticket.pk, | 79 | u'id': self.ticket.pk, |
160 | 80 | u'master_ppa': unicode(self.ticket.master_ppa), | ||
161 | 80 | u'resource_uri': u'/api/v1/ticket/{0}/'.format( | 81 | u'resource_uri': u'/api/v1/ticket/{0}/'.format( |
162 | 81 | self.ticket.pk), | 82 | self.ticket.pk), |
163 | 83 | u'series': unicode(self.ticket.series), | ||
164 | 82 | u'updated': unicode(self.ticket.updated.strftime( | 84 | u'updated': unicode(self.ticket.updated.strftime( |
165 | 83 | "%Y-%m-%dT%H:%M:%S.%f"))}, | 85 | "%Y-%m-%dT%H:%M:%S.%f"))}, |
166 | 84 | u'id': self.subticket.pk, | 86 | u'id': self.subticket.pk, |
167 | @@ -111,8 +113,10 @@ | |||
168 | 111 | u'removed_binaries': self.ticket.removed_binaries, | 113 | u'removed_binaries': self.ticket.removed_binaries, |
169 | 112 | u'base_image': unicode(self.ticket.base_image), | 114 | u'base_image': unicode(self.ticket.base_image), |
170 | 113 | u'id': self.ticket.pk, | 115 | u'id': self.ticket.pk, |
171 | 116 | u'master_ppa': unicode(self.ticket.master_ppa), | ||
172 | 114 | u'resource_uri': u'/api/v1/ticket/{0}/'.format( | 117 | u'resource_uri': u'/api/v1/ticket/{0}/'.format( |
173 | 115 | self.ticket.pk), | 118 | self.ticket.pk), |
174 | 119 | u'series': unicode(self.ticket.series), | ||
175 | 116 | u'updated': unicode(self.ticket.updated.strftime( | 120 | u'updated': unicode(self.ticket.updated.strftime( |
176 | 117 | "%Y-%m-%dT%H:%M:%S.%f"))}, | 121 | "%Y-%m-%dT%H:%M:%S.%f"))}, |
177 | 118 | u'type': unicode(self.artifact_2.type), | 122 | u'type': unicode(self.artifact_2.type), |
178 | @@ -154,6 +158,7 @@ | |||
179 | 154 | TicketWorkflowStep)), | 158 | TicketWorkflowStep)), |
180 | 155 | u'description': unicode(self.ticket.description), | 159 | u'description': unicode(self.ticket.description), |
181 | 156 | u'id': self.ticket.pk, | 160 | u'id': self.ticket.pk, |
182 | 161 | u'master_ppa': unicode(self.ticket.master_ppa), | ||
183 | 157 | u'owner': unicode(self.ticket.owner), | 162 | u'owner': unicode(self.ticket.owner), |
184 | 158 | u'removed_binaries': self.ticket.removed_binaries, | 163 | u'removed_binaries': self.ticket.removed_binaries, |
185 | 159 | u'status': unicode(get_enum_title(self.ticket.status, | 164 | u'status': unicode(get_enum_title(self.ticket.status, |
186 | @@ -161,6 +166,7 @@ | |||
187 | 161 | u'title': unicode(self.ticket.title), | 166 | u'title': unicode(self.ticket.title), |
188 | 162 | u'resource_uri': u'/api/v1/ticket/{0}/'.format( | 167 | u'resource_uri': u'/api/v1/ticket/{0}/'.format( |
189 | 163 | self.ticket.pk), | 168 | self.ticket.pk), |
190 | 169 | u'series': unicode(self.ticket.series), | ||
191 | 164 | u'updated': unicode(self.ticket.updated.strftime( | 170 | u'updated': unicode(self.ticket.updated.strftime( |
192 | 165 | "%Y-%m-%dT%H:%M:%S.%f"))}, | 171 | "%Y-%m-%dT%H:%M:%S.%f"))}, |
193 | 166 | }) | 172 | }) |
194 | @@ -183,8 +189,10 @@ | |||
195 | 183 | u'removed_binaries': self.ticket.removed_binaries, | 189 | u'removed_binaries': self.ticket.removed_binaries, |
196 | 184 | u'base_image': unicode(self.ticket.base_image), | 190 | u'base_image': unicode(self.ticket.base_image), |
197 | 185 | u'id': self.ticket.pk, | 191 | u'id': self.ticket.pk, |
198 | 192 | u'master_ppa': unicode(self.ticket.master_ppa), | ||
199 | 186 | u'resource_uri': u'/api/v1/ticket/{0}/'.format( | 193 | u'resource_uri': u'/api/v1/ticket/{0}/'.format( |
200 | 187 | self.ticket.pk), | 194 | self.ticket.pk), |
201 | 195 | u'series': unicode(self.ticket.series), | ||
202 | 188 | u'updated': unicode(self.ticket.updated.strftime( | 196 | u'updated': unicode(self.ticket.updated.strftime( |
203 | 189 | "%Y-%m-%dT%H:%M:%S.%f")), | 197 | "%Y-%m-%dT%H:%M:%S.%f")), |
204 | 190 | }) | 198 | }) |
205 | @@ -380,8 +388,10 @@ | |||
206 | 380 | u'removed_binaries': self.ticket_6.removed_binaries, | 388 | u'removed_binaries': self.ticket_6.removed_binaries, |
207 | 381 | u'base_image': unicode(self.ticket_6.base_image), | 389 | u'base_image': unicode(self.ticket_6.base_image), |
208 | 382 | u'id': self.ticket_6.pk, | 390 | u'id': self.ticket_6.pk, |
209 | 391 | u'master_ppa': unicode(self.ticket_6.master_ppa), | ||
210 | 383 | u'resource_uri': u'/api/v1/opentickets/{0}/'.format( | 392 | u'resource_uri': u'/api/v1/opentickets/{0}/'.format( |
211 | 384 | self.ticket_6.pk), | 393 | self.ticket_6.pk), |
212 | 394 | u'series': unicode(self.ticket_6.series), | ||
213 | 385 | u'updated': unicode(self.ticket_6.updated.strftime( | 395 | u'updated': unicode(self.ticket_6.updated.strftime( |
214 | 386 | "%Y-%m-%dT%H:%M:%S.%f")), | 396 | "%Y-%m-%dT%H:%M:%S.%f")), |
215 | 387 | }) | 397 | }) |
216 | 388 | 398 | ||
217 | === modified file 'ticket_system/ticket_system/settings.py' | |||
218 | --- ticket_system/ticket_system/settings.py 2014-01-27 15:48:03 +0000 | |||
219 | +++ ticket_system/ticket_system/settings.py 2014-02-11 16:41:21 +0000 | |||
220 | @@ -1,5 +1,5 @@ | |||
221 | 1 | # Ubuntu Continuous Integration Engine | 1 | # Ubuntu Continuous Integration Engine |
223 | 2 | # Copyright 2013 Canonical Ltd. | 2 | # Copyright 2013, 2014 Canonical Ltd. |
224 | 3 | 3 | ||
225 | 4 | # This program is free software: you can redistribute it and/or modify it | 4 | # This program is free software: you can redistribute it and/or modify it |
226 | 5 | # under the terms of the GNU Affero General Public License version 3, as | 5 | # under the terms of the GNU Affero General Public License version 3, as |
227 | @@ -13,7 +13,10 @@ | |||
228 | 13 | # You should have received a copy of the GNU Affero General Public License | 13 | # You should have received a copy of the GNU Affero General Public License |
229 | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
230 | 15 | 15 | ||
231 | 16 | import glob | ||
232 | 16 | import os | 17 | import os |
233 | 18 | import yaml | ||
234 | 19 | |||
235 | 17 | BASEDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) | 20 | BASEDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) |
236 | 18 | 21 | ||
237 | 19 | DEBUG = False | 22 | DEBUG = False |
238 | @@ -25,6 +28,22 @@ | |||
239 | 25 | 28 | ||
240 | 26 | MANAGERS = ADMINS | 29 | MANAGERS = ADMINS |
241 | 27 | 30 | ||
242 | 31 | |||
243 | 32 | def _unit_config(): | ||
244 | 33 | path = os.path.join(BASEDIR, '../unit_config') | ||
245 | 34 | config = {} | ||
246 | 35 | try: | ||
247 | 36 | with open(path) as f: | ||
248 | 37 | config = yaml.safe_load(f.read()) | ||
249 | 38 | except: | ||
250 | 39 | print('Unable to use unit_config(%s), defaulting values' % path) | ||
251 | 40 | return config | ||
252 | 41 | _cfg = _unit_config() | ||
253 | 42 | |||
254 | 43 | BASE_IMAGE_DEFAULT = _cfg.get('base_image', '') | ||
255 | 44 | SERIES_DEFAULT = _cfg.get('series', '') | ||
256 | 45 | MASTER_PPA_DEFAULT = _cfg.get('master_ppa', '') | ||
257 | 46 | |||
258 | 28 | DATABASES = { | 47 | DATABASES = { |
259 | 29 | 'default': { | 48 | 'default': { |
260 | 30 | 'ENGINE': 'django.db.backends.sqlite3', | 49 | 'ENGINE': 'django.db.backends.sqlite3', |
261 | @@ -186,8 +205,6 @@ | |||
262 | 186 | } | 205 | } |
263 | 187 | } | 206 | } |
264 | 188 | 207 | ||
265 | 189 | BASE_IMAGE_DEFAULT = "" | ||
266 | 190 | |||
267 | 191 | # Use local settings if available | 208 | # Use local settings if available |
268 | 192 | try: | 209 | try: |
269 | 193 | from local_settings import * | 210 | from local_settings import * |
270 | @@ -196,7 +213,6 @@ | |||
271 | 196 | 213 | ||
272 | 197 | # Pull in juju_settings | 214 | # Pull in juju_settings |
273 | 198 | try: | 215 | try: |
274 | 199 | import glob, os | ||
275 | 200 | p = os.path.join(os.path.dirname(__file__), '../juju_settings') | 216 | p = os.path.join(os.path.dirname(__file__), '../juju_settings') |
276 | 201 | p = os.path.join(os.path.abspath(p), '*.py') | 217 | p = os.path.join(os.path.abspath(p), '*.py') |
277 | 202 | for f in sorted(glob.glob(p)): | 218 | for f in sorted(glob.glob(p)): |
hard to argue against this, since 50% of this was my idea :)