def _parse_sites(self, sheet): """ Sub method of _parse_sheet() that parses only the 'sites' sheet Parameters ---------- sheet: GSpread worksheet sheet containing metadata about sites """ records = sheet.get_all_records() for r in records: if r['Key'] == '': continue new_site = Site(hp=self, key=r['Key'], size=r['House size'], inhabitants=r['Number of inhabitants'], postcode=r['postcode'], construction_year=r['construction year'], k_level=r['K-level'], e_level=r['E-level'], epc_cert=r['EPC certificate']) self.sites.append(new_site) print('{} Sites created'.format(len(self.sites)))
def place_site(self, new_site_type, level, player_table, required_zone_types=None): def is_valid_site_hex(curr_hex): if curr_hex.active_group != None: return False if curr_hex.hex_type.name not in new_site_type.legal_terrain: return False if curr_hex.has_site(): return False if required_zone_types != None and self.get_zone( curr_hex.x, curr_hex.y).zone_type.name not in required_zone_types: return False neighbors = self.get_neighbors(curr_hex.x, curr_hex.y) return not any([neighbor.has_site() for neighbor in neighbors]) site_hex = self.get_random_hex(is_valid_site_hex) if site_hex == None: return None site_hex.site = Site(site_hex, new_site_type, level, player_table[new_site_type.owner_name]) site_hex.site.initialize() return site_hex
def load_sites(self): """ Sets self.sites as a dict of site objects, keyed by site name """ sites = userapi.sites(self.session) self.sites = {} self.sitemap = {} for uuid, properties in sites.iteritems(): settings = siteapi.settings(self.session, uuid) settings['uuid'] = uuid name = settings['name'] self.sites[name] = Site(self.session, settings) self.sitemap[uuid] = name
def get_sum_by_site(cls, page=1, limit=10): sites = Site.get_pagination(page, limit) total = Site.objects.count() items = [] for site in sites: q = cls.objects.filter(site_id=site.id).values_list( 'dataA', 'dataB') # the results are a collection of tupples [(d1, d2), (d3, d4) ... (dn, dm)] # so we should be able to use the transpose to get [(d1, d3, ..., dn), (d2, d4, ..., dm)] # then sum each group dataA, dataB = map(sum, zip(*list(q))) items.append(cls(site=site, dataA=dataA, dataB=dataB)) return items, total
def get_avg_sql_by_site(cls, page=1, limit=10): table_name = cls.objects.model._meta.db_table ids = Site.get_ids(page, limit) total = Site.objects.count() query = ' SELECT' \ ' 0 AS id,' \ ' `site_id`,' \ ' AVG(`dataA`) AS dataA,' \ ' AVG(`dataB`) AS dataB' \ ' FROM' \ ' `{}`' \ ' WHERE `site_id` IN({})' \ ' GROUP BY `site_id`' \ ' ORDER BY `site_id` DESC' query = query.format(table_name, ",".join(map(str, ids))) return list(cls.objects.raw(query)), total
def __init__(self, siteId, name, baseUrl): Site.__init__(self, siteId, name, baseUrl)