From be7e6fe12dbca2815a338922c647fec5f6fad044 Mon Sep 17 00:00:00 2001 From: Salvo 'LtWorf' Tomaselli Date: Tue, 14 Jul 2015 15:39:35 +0200 Subject: [PATCH] Classes have now names that begin with uppercase This is more Pythonic and makes the code more readable. Backwards compatibility is provided by giving an alias with the previous name of the class. It will not be broken until the next major release. --- relational/maintenance.py | 2 +- relational/parser.py | 8 +++----- relational/relation.py | 34 +++++++++++++++++++--------------- relational/rtypes.py | 9 ++++++--- relational_gui/guihandler.py | 4 ++-- 5 files changed, 31 insertions(+), 26 deletions(-) diff --git a/relational/maintenance.py b/relational/maintenance.py index 719afbc..2adfa9d 100644 --- a/relational/maintenance.py +++ b/relational/maintenance.py @@ -60,7 +60,7 @@ def check_latest_version(): return s.decode().strip() -class user_interface (object): +class UserInterface (object): '''It is used to provide services to the user interfaces, in order to reduce the amount of duplicated code present in different user interfaces. diff --git a/relational/parser.py b/relational/parser.py index 12882cc..f007cb9 100644 --- a/relational/parser.py +++ b/relational/parser.py @@ -99,7 +99,7 @@ class CallableString(str): return eval(self, context) -class node (object): +class Node (object): '''This class is a node of a relational expression. Leaves are relations and internal nodes are operations. @@ -416,7 +416,5 @@ if __name__ == "__main__": e = input("Expression: ") print (parse(e)) - # b=u"σ age>1 and skill=='C' (peopleᐅᐊskills)" - # print b[0] - # parse(b) - pass +#Backwards compatibility +node = Node diff --git a/relational/relation.py b/relational/relation.py index 3fe56b2..62595b9 100644 --- a/relational/relation.py +++ b/relational/relation.py @@ -26,7 +26,7 @@ from collections import deque from relational.rtypes import * -class relation (object): +class Relation (object): ''' This object defines a relation (as a group of consistent tuples) and operations. @@ -57,11 +57,11 @@ class relation (object): if len(filename) == 0: # Empty relation self.content = set() - self.header = header([]) + self.header = Header([]) return with open(filename) as fp: reader = csv.reader(fp) # Creating a csv reader - self.header = header(next(reader)) # read 1st line + self.header = Header(next(reader)) # read 1st line self.content = set() attributes = len(self.header) @@ -121,7 +121,7 @@ class relation (object): Selection, expr must be a valid Python expression; can contain field names. ''' newt = relation() - newt.header = header(self.header) + newt.header = Header(self.header) for i in self.content: # Fills the attributes dictionary with the values of the tuple attributes = {attr: i[j].autocast() @@ -148,7 +148,7 @@ class relation (object): 'Unable to perform product on relations with colliding attributes' ) newt = relation() - newt.header = header(self.header + other.header) + newt.header = Header(self.header + other.header) for i in self.content: for j in other.content: @@ -178,7 +178,7 @@ class relation (object): newt = relation() # Create the header h = (self.header[i] for i in ids) - newt.header = header(h) + newt.header = Header(h) # Create the body for i in self.content: @@ -213,7 +213,7 @@ class relation (object): ''' other = self._rearrange(other) # Rearranges attributes' order newt = relation() - newt.header = header(self.header) + newt.header = Header(self.header) newt.content = self.content.intersection(other.content) return newt @@ -224,7 +224,7 @@ class relation (object): ''' other = self._rearrange(other) # Rearranges attributes' order newt = relation() - newt.header = header(self.header) + newt.header = Header(self.header) newt.content = self.content.difference(other.content) return newt @@ -261,7 +261,7 @@ class relation (object): ''' other = self._rearrange(other) # Rearranges attributes' order newt = relation() - newt.header = header(self.header) + newt.header = Header(self.header) newt.content = self.content.union(other.content) return newt @@ -298,7 +298,7 @@ class relation (object): # Creating the header with all the fields, done like that because order is # needed h = (i for i in other.header if i not in shared) - newt.header = header(chain(self.header, h)) + newt.header = Header(chain(self.header, h)) # Shared ids of self sid = self.header.getAttributesId(shared) @@ -342,7 +342,7 @@ class relation (object): # Creating the header with all the fields, done like that because order is # needed h = (i for i in other.header if i not in shared) - newt.header = header(chain(self.header, h)) + newt.header = Header(chain(self.header, h)) # Shared ids of self sid = self.header.getAttributesId(shared) @@ -484,14 +484,14 @@ class relation (object): return len(self.content) - l -class header(tuple): +class Header(tuple): '''This class defines the header of a relation. It is used within relations to know if requested operations are accepted''' # Since relations are mutalbe we explicitly block hashing them def __new__(cls, fields): - return super(header, cls).__new__(cls, tuple(fields)) + return super(Header, cls).__new__(cls, tuple(fields)) def __init__(self, *args, **kwargs): '''Accepts a list with attributes' names. Names MUST be unique''' @@ -504,7 +504,7 @@ class header(tuple): raise Exception('Attribute names must be unique') def __repr__(self): - return "header(%s)" % super(header, self).__repr__() + return "Header(%s)" % super(Header, self).__repr__() def rename(self, params): '''Returns a new header, with renamed fields. @@ -520,7 +520,7 @@ class header(tuple): attrs[id_] = new except: raise Exception('Field not found: %s' % old) - return header(attrs) + return Header(attrs) def sharedAttributes(self, other): '''Returns how many attributes this header has in common with a given one''' @@ -537,3 +537,7 @@ class header(tuple): def getAttributesId(self, param): '''Returns a list with numeric index corresponding to field's name''' return [self.index(i) for i in param] + +#Backwards compatibility +relation = Relation +header = Header diff --git a/relational/rtypes.py b/relational/rtypes.py index 2166de1..ad804cb 100644 --- a/relational/rtypes.py +++ b/relational/rtypes.py @@ -26,7 +26,7 @@ import re RELATION_NAME_REGEXP = r'^[_a-zA-Z]+[_a-zA-Z0-9]*$' -class rstring (str): +class Rstring (str): '''String subclass with some custom methods''' @@ -112,7 +112,7 @@ class rstring (str): return self._date -class rdate (object): +class Rdate (object): '''Represents a date''' @@ -158,8 +158,11 @@ class rdate (object): def __sub__(self, other): return (self.intdate - other.intdate).days - def is_valid_relation_name(name): '''Checks if a name is valid for a relation. Returns boolean''' return re.match(RELATION_NAME_REGEXP, name) != None + +#Backwards compatibility +rdate = Rdate +rstring = Rstring diff --git a/relational_gui/guihandler.py b/relational_gui/guihandler.py index 652e48d..65e2121 100644 --- a/relational_gui/guihandler.py +++ b/relational_gui/guihandler.py @@ -18,7 +18,7 @@ from PyQt5 import QtCore, QtWidgets, QtWidgets from relational import relation, parser, optimizer, rtypes -from relational.maintenance import user_interface +from relational.maintenance import UserInterface from relational_gui import about from relational_gui import survey @@ -36,7 +36,7 @@ class relForm(QtWidgets.QMainWindow): self.selectedRelation = None self.ui = ui self.qcounter = 1 # Query counter - self.user_interface = user_interface() + self.user_interface = UserInterface() self.settings = QtCore.QSettings()