Create class in maintenance module to help the UIs
The class has methods commonly used by user interfaces, so that they don't need to be implemented multiple times by different UIs.
This commit is contained in:
parent
8daaf599df
commit
226b340969
@ -22,7 +22,9 @@
|
|||||||
import http.client
|
import http.client
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
|
||||||
from relational import relation
|
from relational.relation import relation
|
||||||
|
from relational import parser
|
||||||
|
from relational.rtypes import is_valid_relation_name
|
||||||
|
|
||||||
|
|
||||||
def send_survey(data):
|
def send_survey(data):
|
||||||
@ -58,23 +60,24 @@ def check_latest_version():
|
|||||||
return s.decode().strip()
|
return s.decode().strip()
|
||||||
|
|
||||||
|
|
||||||
class interface (object):
|
class user_interface (object):
|
||||||
|
|
||||||
'''It is used to provide services to the user interfaces, in order to
|
'''It is used to provide services to the user interfaces, in order to
|
||||||
reduce the amount of duplicated code present in different user interfaces.
|
reduce the amount of duplicated code present in different user interfaces.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.rels = {}
|
self.relations = {}
|
||||||
|
|
||||||
def load(self, filename, name):
|
def load(self, filename, name):
|
||||||
'''Loads a relation from file, and gives it a name to
|
'''Loads a relation from file, and gives it a name to
|
||||||
be used in subsequent queries.'''
|
be used in subsequent queries.'''
|
||||||
pass
|
rel = relation(filename)
|
||||||
|
self.set_relation(name, rel)
|
||||||
|
|
||||||
def unload(self, name):
|
def unload(self, name):
|
||||||
'''Unloads an existing relation.'''
|
'''Unloads an existing relation.'''
|
||||||
pass
|
del self.relations[name]
|
||||||
|
|
||||||
def store(self, filename, name):
|
def store(self, filename, name):
|
||||||
'''Stores a relation to file.'''
|
'''Stores a relation to file.'''
|
||||||
@ -82,14 +85,53 @@ class interface (object):
|
|||||||
|
|
||||||
def get_relation(self, name):
|
def get_relation(self, name):
|
||||||
'''Returns the relation corresponding to name.'''
|
'''Returns the relation corresponding to name.'''
|
||||||
pass
|
return self.relations[name]
|
||||||
|
|
||||||
def set_relation(self, name, rel):
|
def set_relation(self, name, rel):
|
||||||
'''Sets the relation corresponding to name.'''
|
'''Sets the relation corresponding to name.'''
|
||||||
pass
|
if not is_valid_relation_name(name):
|
||||||
|
raise Exception('Invalid name for destination relation')
|
||||||
|
self.relations[name] = rel
|
||||||
|
|
||||||
def execute(self, query, relname='last_'):
|
def execute(self, query, relname='last_'):
|
||||||
'''Executes a query, returns the result and if
|
'''Executes a query, returns the result and if
|
||||||
relname is not None, adds the result to the
|
relname is not None, adds the result to the
|
||||||
dictionary, with the name given in relname.'''
|
dictionary, with the name given in relname.'''
|
||||||
pass
|
if not is_valid_relation_name(relname):
|
||||||
|
raise Exception('Invalid name for destination relation')
|
||||||
|
|
||||||
|
expr = parser.parse(query)
|
||||||
|
result = eval(expr, self.relations)
|
||||||
|
self.relations[relname] = result
|
||||||
|
return result
|
||||||
|
|
||||||
|
def multi_execute(self, query):
|
||||||
|
'''Executes multiple queries, separated by \n
|
||||||
|
|
||||||
|
They can have a syntax of
|
||||||
|
[varname =] query
|
||||||
|
to assign the result to a new relation
|
||||||
|
'''
|
||||||
|
r = relation()
|
||||||
|
queries = query.split('\n')
|
||||||
|
for query in queries:
|
||||||
|
if query.strip() == '':
|
||||||
|
continue
|
||||||
|
parts = query.split('=', 1)
|
||||||
|
parts[0] = parts[0].strip()
|
||||||
|
if len(parts) > 1 and is_valid_relation_name(parts[0]):
|
||||||
|
relname, query = parts
|
||||||
|
else:
|
||||||
|
relname = 'last_'
|
||||||
|
|
||||||
|
try:
|
||||||
|
r = self.execute(query, relname)
|
||||||
|
except Exception as e:
|
||||||
|
raise Exception('Error in query: %s\n%s' % (
|
||||||
|
query,
|
||||||
|
str(e)
|
||||||
|
))
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user