Skip to content

Commit 14debea

Browse files
committed
New format for api_version and preparing for resource doc params WIP
1 parent 5112892 commit 14debea

File tree

11 files changed

+151
-26
lines changed

11 files changed

+151
-26
lines changed

NOTICE

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
Open Bank Project API Manager
2-
Copyright (C) 2011-2016, TESOBE Ltd
1+
Open Bank Project API Tester
2+
Copyright (C) 2011-2020, TESOBE GmbH
33

44
This program is free software: you can redistribute it and/or modify
55
it under the terms of the GNU Affero General Public License as published by
@@ -15,11 +15,12 @@ You should have received a copy of the GNU Affero General Public License
1515
along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

1717
18-
TESOBE Ltd
18+
TESOBE GmbH
1919
Osloerstrasse 16/17
2020
Berlin 13359, Germany
2121

2222
This product includes software developed at
23-
TESOBE (http://www.tesobe.com/)
23+
TESOBE GmbH (http://www.tesobe.com/)
2424
by
2525
Sebastian Henschel <[email protected]>
26+
and others

apitester/apitester/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
'django.contrib.sessions',
4242
'django.contrib.messages',
4343
'django.contrib.staticfiles',
44-
44+
'django.contrib.admin',
4545
'base',
4646
'obp',
4747
'runtests',

apitester/base/templates/base.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
<p class="text-muted">
6262
<a title="API ROOT" href="{{ API_ROOT }}">API ROOT: {{ API_ROOT }}</a> |
6363
<a title="Open Bank Project" href="https://openbankproject.com">Open Bank Project</a> |
64-
Powered by <a title="TESOBE" href="http://tesobe.com">TESOBE</a> |
65-
<small>Copyright &copy; 2016</small>
64+
Powered by <a title="TESOBE" href="http://tesobe.com">TESOBE GmbH</a> |
65+
<small>Copyright &copy; 2016-2020</small>
6666
</p>
6767
</div>
6868
</footer>

apitester/obp/api.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,27 @@ def get_swagger(self, api_version='3.0.0'):
168168
Uses API version 3.0.0 per default, but can be overridden by e.g.
169169
testconfig
170170
"""
171-
urlpath = '/resource-docs/v{}/swagger'.format(api_version)
171+
"""
172+
Typical path
173+
https://apisandbox.openbankproject.com/obp/v3.1.0/resource-docs/v3.1.0/swagger?functions=getBanks,bankById
174+
175+
176+
https://apisandbox.ofpilot.com/mx-open-finance/v0.0.1/accounts
177+
178+
"""
179+
180+
181+
#
182+
# api_version MUST be specified in the following format: <STANDARD>v<VERSION>
183+
#
184+
# UKv2.0 /obp/v4.0.0/resource-docs/UKv2.0/obp (previously /obp/v4.0.0/resource-docs/v2.0/obp)
185+
# BGv1 /obp/v4.0.0/resource-docs/BGv1/obp (previously /obp/v4.0.0/resource-docs/v1/obp)
186+
# BGv1.3 /obp/v4.0.0/resource-docs/BGv1.3/obp (previously /obp/v4.0.0/resource-docs/v1.3/obp)
187+
# MXOFv0.0.1 /obp/v4.0.0/resource-docs/MXOFv0.0.1/obp
188+
# OBPv4.0.0 /obp/v4.0.0/resource-docs/OBPv4.0.0/obp (previously /obp/v4.0.0/resource-docs/v4.0.0/obp)
189+
# etc.
190+
191+
urlpath = '/resource-docs/{}/swagger'.format(api_version)
172192
if not cache.get(urlpath):
173193
swagger = self.get(urlpath)
174194
cache.set(urlpath, swagger, settings.CACHE_TIMEOUT)

apitester/runtests/forms.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,35 @@
77
import random
88
from .models import TestConfiguration
99

10-
from django.core.validators import RegexValidator
10+
from django.core.validators import RegexValidator, ValidationError
1111

1212

1313
class TestConfigurationForm(forms.ModelForm):
1414
class Meta:
1515
model = TestConfiguration
1616
exclude = ['owner']
1717

18+
19+
20+
def clean_api_version(self):
21+
allowed_api_versions = ['OBPv4.0.0', 'OBPv3.1.0', 'MXOFv0.0.1', 'BGv1.3']
22+
23+
24+
data = self.cleaned_data['api_version']
25+
if data not in allowed_api_versions:
26+
raise ValidationError("The api_version needs to be one of {}".format(allowed_api_versions) )
27+
28+
# Always return a value to use as the new cleaned data, even if
29+
# this method didn't change it.
30+
return data
31+
1832
api_version = forms.CharField(
19-
label='api_verison',
20-
validators=[RegexValidator(r'^\d\.\d\.\d$', 'Please Input correct api_version like 3.1.0')],
33+
label='API Version',
34+
#validators=[validate_api_standard],
2135
widget=forms.TextInput(
2236
attrs={
23-
'value': '3.1.0',
24-
'placeholder': '3.1.0',
37+
'value': 'OBPv4.0.0',
38+
'placeholder': 'OBPv4.0.0',
2539
'class': 'form-control',
2640
}
2741
),
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Generated by Django 2.0.7 on 2020-09-11 12:36
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('runtests', '0008_auto_20181227_1738'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='profileoperation',
15+
name='method',
16+
field=models.CharField(blank=True, help_text='method', max_length=255, verbose_name='method'),
17+
),
18+
migrations.AddField(
19+
model_name='profileoperation',
20+
name='save_time',
21+
field=models.CharField(blank=True, help_text='save_time', max_length=255, verbose_name='save_time'),
22+
),
23+
migrations.AlterField(
24+
model_name='testconfiguration',
25+
name='name',
26+
field=models.CharField(help_text='Name of the configuration', max_length=255, unique=True, verbose_name='Name'),
27+
),
28+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 2.0.7 on 2020-09-14 09:10
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('runtests', '0009_auto_20200911_1436'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='testconfiguration',
15+
name='resource_doc_params',
16+
field=models.CharField(blank=True, help_text='Resource Doc Parameters to filter the APIs returned', max_length=255, null=True, verbose_name='Params'),
17+
),
18+
]

apitester/runtests/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ class TestConfiguration(models.Model):
2323
blank=False,
2424
null=False,
2525
)
26+
27+
resource_doc_params = models.CharField(
28+
max_length=255,
29+
verbose_name='Params',
30+
help_text='Resource Doc Parameters to filter the APIs returned',
31+
blank=True,
32+
null=True,
33+
)
2634
owner = models.ForeignKey(
2735
settings.AUTH_USER_MODEL,
2836
verbose_name='Owner',

apitester/runtests/templates/runtests/testconfiguration_form.html

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,34 @@ <h1>Edit test profile</h1>
1010
{% csrf_token %}
1111
{% if form.non_field_errors %}<div class="alert alert-danger">{{ form.non_field_errors }}</div>{% endif %}
1212

13-
<div class="form-group">
14-
{{ form.name.errors }}
15-
<label for="name">{{ form.name.label_tag }}</label>
16-
{{ form.name }}
17-
</div>
1813

19-
<div class="form-group">
20-
{{ form.api_version.errors }}
21-
<label for="api_version">{{ form.api_version.label_tag }}</label>
22-
{{ form.api_version }}
14+
<div class="row">
15+
<div class="col-xs-12 col-sm-4">
16+
<div class="form-group">
17+
{{ form.name.errors }}
18+
<label for="name">{{ form.name.label_tag }}</label>
19+
{{ form.name }}
20+
</div>
21+
</div>
22+
23+
<div class="col-xs-12 col-sm-4">
24+
<div class="form-group">
25+
{{ form.api_version.errors }}
26+
<label for="api_version">{{ form.api_version.label_tag }}</label>
27+
{{ form.api_version }}
28+
</div>
29+
</div>
30+
31+
<div class="col-xs-12 col-sm-4">
32+
<div class="form-group">
33+
{{ form.resource_doc_params.errors }}
34+
<label for="resource_doc_params">{{ form.resource_doc_params.label_tag }}</label>
35+
{{ form.resource_doc_params }}
36+
</div>
37+
</div>
2338
</div>
2439

40+
2541
<div class="row">
2642
<div class="col-xs-12 col-sm-4">
2743
<div class="form-group">

apitester/runtests/views.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
from django.conf import settings
1212
from django.contrib import messages
1313
from django.contrib.auth.mixins import LoginRequiredMixin
14-
from django.core.exceptions import PermissionDenied
15-
from django.http import JsonResponse
14+
from django.core.exceptions import PermissionDenied
15+
from django.http import JsonResponse, HttpResponse
1616
from django.urls import reverse_lazy, reverse
1717
from django.views.generic import TemplateView
1818
from django.views.generic.edit import CreateView, UpdateView, DeleteView
@@ -22,6 +22,8 @@
2222
from .forms import TestConfigurationForm
2323
from .models import TestConfiguration, ProfileOperation
2424

25+
26+
2527
LOGGER = logging.getLogger(__name__)
2628
# TODO: These have to map to attributes of models.TestConfiguration
2729
URLPATH_DEFAULT = [
@@ -352,8 +354,26 @@ def get_success_url(self):
352354
testconfig = self.get_testconfigs(self.object.pk)['selected']
353355
self.api = API(self.request.session.get('obp'))
354356
api_version = testconfig.api_version
357+
print ("api_version is {}".format(api_version))
355358
swagger = self.api.get_swagger(api_version)
356-
for path, data in swagger['paths'].items():
359+
print("the swagger is {}".format(swagger))
360+
361+
362+
# Within successful response we expect there to be paths
363+
try:
364+
swagger_paths_items = swagger['paths'].items()
365+
except KeyError as err:
366+
# We probably can extract the reason from the response("swagger")
367+
response_code = swagger['code']
368+
message = swagger['message']
369+
# TODO Return this information calmly rather than as an exception.
370+
raise Exception(str(response_code) + " " + str(message))
371+
372+
#return JsonResponse({'code': str(response_code), 'message': str(message)}, safe=True)
373+
#return reverse('runtests-index-testconfig', kwargs={})
374+
375+
# Continue extracting the endpoints from the swagger json
376+
for path, data in swagger_paths_items:
357377
for method, content in data.items():
358378
urlpath = path
359379
remark = content['summary']

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Django==1.11.7
22
Django==2.0.7
3-
psycopg2==2.7.3.1
3+
psycopg2==2.8.6
44
oauthlib==2.0.0
55
requests==2.11.1
66
requests-oauthlib==0.6.2

0 commit comments

Comments
 (0)