From 8698009c3066f6dbd03626c25a7d937e7ced5564 Mon Sep 17 00:00:00 2001 From: Dejan Filipovic Date: Thu, 28 Mar 2019 08:25:07 +0100 Subject: [PATCH] Records entries should not required database requests for domain listing page Create a new class just for storing records entries, without the Setting lookup otherwise for each record it will make 4 SQL queries to retrieve something that is not used. --- app/models.py | 23 +++++++++++++++++++++++ app/views.py | 6 +++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/models.py b/app/models.py index f60f10c..319b40f 100644 --- a/app/models.py +++ b/app/models.py @@ -1377,6 +1377,29 @@ class AccountUser(db.Model): return ''.format(self.account_id, self.user_id) +class RecordEntry(object): + """ + This is not a model, it's just an object + which will store records entries from PowerDNS API + """ + + def __init__(self, name=None, type=None, status=None, ttl=None, data=None, + is_allowed_edit=False): + self.name = name + self.type = type + self.status = status + self.ttl = ttl + self.data = data + self._is_allowed_edit = is_allowed_edit + self._is_allowed_delete = is_allowed_edit and self.type != 'SOA' + + def is_allowed_edit(self): + return self._is_allowed_edit + + def is_allowed_delete(self): + return self._is_allowed_delete + + class Record(object): """ diff --git a/app/views.py b/app/views.py index 74e0ebc..b94cbff 100755 --- a/app/views.py +++ b/app/views.py @@ -18,7 +18,7 @@ from flask import g, request, make_response, jsonify, render_template, session, from flask_login import login_user, logout_user, current_user, login_required from werkzeug import secure_filename -from .models import User, Account, AccountUser, Domain, Record, Role, Server, History, Anonymous, Setting, DomainSetting, DomainTemplate, DomainTemplateRecord +from .models import User, Account, AccountUser, Domain, Record, RecordEntry, Role, Server, History, Anonymous, Setting, DomainSetting, DomainTemplate, DomainTemplateRecord from app import app, login_manager, csrf from app.lib import utils from app.oauth import github_oauth, google_oauth, oidc_oauth @@ -775,7 +775,7 @@ def domain(domain_name): for jr in jrecords: if jr['type'] in records_allow_to_edit: for subrecord in jr['records']: - record = Record(name=jr['name'], type=jr['type'], status='Disabled' if subrecord['disabled'] else 'Active', ttl=jr['ttl'], data=subrecord['content']) + record = RecordEntry(name=jr['name'], type=jr['type'], status='Disabled' if subrecord['disabled'] else 'Active', ttl=jr['ttl'], data=subrecord['content'], is_allowed_edit=True) records.append(record) if not re.search('ip6\.arpa|in-addr\.arpa$', domain_name): editable_records = forward_records_allow_to_edit @@ -785,7 +785,7 @@ def domain(domain_name): else: for jr in jrecords: if jr['type'] in records_allow_to_edit: - record = Record(name=jr['name'], type=jr['type'], status='Disabled' if jr['disabled'] else 'Active', ttl=jr['ttl'], data=jr['content']) + record = RecordEntry(name=jr['name'], type=jr['type'], status='Disabled' if jr['disabled'] else 'Active', ttl=jr['ttl'], data=jr['content'], is_allowed_edit=True) records.append(record) if not re.search('ip6\.arpa|in-addr\.arpa$', domain_name): editable_records = forward_records_allow_to_edit