Added fixes to foreignkeys select in webmodel and added filesize.py module

This commit is contained in:
Antonio de la Rosa 2016-08-23 05:25:51 +02:00
parent 617a9fb87b
commit dfe0ee6550
2 changed files with 34 additions and 6 deletions

View file

@ -0,0 +1,14 @@
#!/usr/bin/python3
# Code based in http://stackoverflow.com/questions/5194057/better-way-to-convert-file-sizes-in-python
import math
def filesize(size):
if (size == 0):
return '0B'
size_name = ("b", "Kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb", "Yb")
i = int(math.floor(math.log(size,1024)))
p = math.pow(1024,i)
s = round(size/p,2)
return '%s %s' % (s,size_name[i])

View file

@ -54,6 +54,8 @@ class WebModel:
cached=self.global_cached cached=self.global_cached
cached_runquery=self.global_cached
#The name of the table #The name of the table
self.name=type(self).__name__.lower() self.name=type(self).__name__.lower()
@ -346,6 +348,8 @@ class WebModel:
fields = list(set(keys) & set(arr_select)) fields = list(set(keys) & set(arr_select))
#Creating the fields #Creating the fields
arr_repeat_field={}
new_fields=OrderedDict() new_fields=OrderedDict()
for field in fields: for field in fields:
@ -353,28 +357,38 @@ class WebModel:
if type(self.fields[field]).__name__=="ForeignKeyField" and raw_query==False: if type(self.fields[field]).__name__=="ForeignKeyField" and raw_query==False:
table_name=self.fields[field].table_name if self.fields[field].table_name in arr_repeat_field:
arr_repeat_field[self.fields[field].table_name]+=1
else:
arr_repeat_field[self.fields[field].table_name]=0
table_name=self.fields[field].table_name+'` as `'+self.fields[field].table_name+str(arr_repeat_field[self.fields[field].table_name])
final_table_name=self.fields[field].table_name+str(arr_repeat_field[self.fields[field].table_name])
# The name with its alias of this related table model
tables_to_select.append('`'+table_name+'`') tables_to_select.append('`'+table_name+'`')
# Add field from related table # Add field from related table
# as "+table_name+"_"+self.fields[field].named_field # as "+table_name+"_"+self.fields[field].named_field
extra_fields.append("`"+table_name+"`.`"+self.fields[field].named_field+"` as "+field) extra_fields.append("`"+final_table_name+"`.`"+self.fields[field].named_field+"` as "+field)
# Add a condition to sql query for join the two tables. # Add a condition to sql query for join the two tables.
conditions[0]+=" AND `"+table_name+"`.`"+self.fields[field].identifier_field+"`=`"+self.name+"`.`"+field+"`" conditions[0]+=" AND `"+final_table_name+"`.`"+self.fields[field].identifier_field+"`=`"+self.name+"`.`"+field+"`"
# Add extra fields from related table from select_fields ForeignKeyField class member # Add extra fields from related table from select_fields ForeignKeyField class member
for extra_field in self.fields[field].select_fields: for extra_field in self.fields[field].select_fields:
self.fields[table_name+'_'+extra_field]=self.fields[field].related_model.fields[extra_field] self.fields[field+'_'+extra_field]=self.fields[field].related_model.fields[extra_field]
self.fields_to_clean.append(table_name+'_'+extra_field) self.fields_to_clean.append(field+'_'+extra_field)
# Check if extra_field is ForeignKeyField, if yes, call this function recursively. # Check if extra_field is ForeignKeyField, if yes, call this function recursively.
extra_fields.append("`"+table_name+"`.`"+extra_field+"` as `"+table_name+"_"+extra_field+"`") extra_fields.append("`"+final_table_name+"`.`"+extra_field+"` as `"+field+"_"+extra_field+"`")
else: else:
# Add normal field to sql query # Add normal field to sql query