def add_component(servers=None, type="", name="", vendor="", comments="", hw_id="", driver=None): with db_session: if select(t for t in Type if t.name == type).count() == 0: raise Exception('Unknown component type') if driver is None: raise Exception('Driver is not specified') else: driver = get(d for d in Driver if d.name == driver) component = Component(type=type, name=name, vendor=vendor, comments=comments, driver=driver, hw_id=hw_id) if servers is not None: servers = select(s for s in Server if s.id in servers)[:] for s in servers: component.servers.add(s) return component
def init_position(self, pos, ref): base_class = self.base_class_position or self.__class__ if isinstance(ref, (Entity, EntityProxy)): ref = ref.id elif isinstance(ref, str): ref = UUID(ref) nb = self.get_by_position(ref).count() if pos is not None: if pos >= nb: yield nb else: query = select( p for p in base_class if getattr(p, self.referent_attribute_name).id == ref and p.position >= pos) for s in query: s._position += 1 yield pos else: query = select( s for s in base_class if getattr(s, self.referent_attribute_name).id == ref) new_pos = query.count() yield new_pos flush()
def set_keyword_reminder(user_id, args): with db_session: for w in args: word = list( select(r.keyword for r in Reminder if r.keyword == str(w) and r.tg_user_id == user_id)) if not word: Reminder(keyword=str(w), tg_user_id=user_id) commit() keywords = list( select(r.keyword for r in Reminder if r.tg_user_id == user_id)) return "您的关键词设置成功,当前共有以下关键词:{}".format(keywords)
def user_del_keyword(user_id, args): with db_session: for w in args: word = list( select(r.keyword for r in Reminder if r.keyword == str(w) and r.tg_user_id == user_id)) if not word: continue delete(r for r in Reminder if r.keyword == str(w) and r.tg_user_id == user_id) keywords = list( select(r.keyword for r in Reminder if r.tg_user_id == user_id)) return "您的关键词删除成功,当前共有以下关键词:{}".format(keywords)
def main(query='', port='', tag='', sdt=False, sp=True, sc=True, sb=False, sd=False, st=False, d=False, limit=None): """Display stats or search in db""" from pony.orm.core import select if d: sql_debug(True) if not any((query, port, tag)): from pony.utils.utils import count print('Stats by port') select((p.num, p.tags, count(p)) for p in Port).show() print('Stats for rtsp') select((p.paths.cred.user, p.paths.cred.password, count()) for p in Port if p.num == 554).show() return res = select( (p.created_at, t.ip, p.num, p.comment, p.banner, p.data, p.tags) for t in Host for p in t.ports if ( query in p.comment or query in p.banner or query in p.tags or query in str(p.num) or query in t.ip ) and (tag in p.tags) ).limit(limit) for d, ip, p, c, b, data, t in res: parts = [] if sdt: parts.append(d.strftime('%m-%d %H:%M')) parts.append(ip) if sp: parts.append(p) if sc: parts.append(c) if sb: parts.append(b) if sd: parts.append(data) if st: parts.append(','.join(t)) print(*parts)
def select_fuel_versions(name=None): fuel_versions = select(fv for fv in FuelVersion)[:] if name is not None: fuel_versions = filter(lambda fv: fv.name == name, fuel_versions) return fuel_versions
def select_servers(name=None): servers = select(s for s in Server)[:] if name is not None: servers = filter(lambda s: name in s.name, servers) return servers
def get_by_position(cls, ref_id): base_class = cls.base_class_position or cls if isinstance(ref_id, str): ref_id = UUID(ref_id) return select(p for p in base_class if getattr(p, base_class.referent_attribute_name).id == ref_id).order_by(base_class._position)
def select_types(name=None): types = select(type for type in Type)[:] if name is not None: types = filter(lambda type: type.name, types) return types
def update_server(components=None, name=None, vendor=None, comments=None, specification_url=None, availability=None): server = Server.get(lambda s: s.name == name) if name is None: raise Exception('Server name is not specified') if vendor is not None: server.vendor = vendor if comments is not None: server.comments = comments if specification_url is not None: server.specification_url = \ specification_url if availability is not None: server.availability = availability if components is not None: cmp = select(c for c in Component if c.name in components)[:] for c in cmp: server.components.add(c) c.servers.add(server) return server
def loadData(days): elements = list() with db_session: for m in select( m for m in HumidityMeasure if m.timestamp + timedelta(days=days) >= datetime.now()): elements.append({"value": m.value, "timestamp": str(m.timestamp)}) return elements
def add_fuel_version(name=None, driver_names=None): with db_session: if driver_names is not None: drivers = select(d for d in Driver if d.name in driver_names)[:] fuel_version = FuelVersion(name, drivers=drivers) return fuel_version
def get_keyword_by_user_id(user_id): with db_session: keywords = list( select(r.keyword for r in Reminder if r.tg_user_id == user_id)) if not keywords: return "您当前设置的关键词为空" else: return "您当前设置的关键词有:{}".format(str(keywords))
def add_driver(name, version): with db_session: if select(d for d in Driver if d.name == name and d.version == version).count() > 0: raise Exception('Driver already exists') driver = Driver(name=name, version=version) return driver
def check_keyword_and_sent(bot, update): text = get_update_text(update) if not text: return with db_session: db_keywords = list(select((r.keyword, r.tg_user_id) for r in Reminder)) for word in db_keywords: if word[0] in text: send_keyword_notify(bot, update, word)
def delete_server_from_certification(name, fuel_versions): certifications = select(certification for server in Server for certification in Certification if certification.fuel_version.name in fuel_versions and server.name == name)[:] with db_session: for c in certifications: db.execute("DELETE FROM Certification " "WHERE id='{0}';".format(c.id))
def select_components(types=None, name=None): components = select(c for c in Component)[:] if types is not None: components = filter(lambda c: c.type in types) if name is not None: components = filter(lambda c: name in c.name) return components
def get_stats(): total = UserSetting.select().count() users = select( (u.updated_at, u.points_count, u.username, u.id) for u in UserSetting).order_by(lambda u, p, n, i: desc(u)).limit(10) return ('Total: %s\n\n' % total) + '\n'.join(('`%s %s` %s' % ( upd.replace( tzinfo=tzutc()).astimezone(tzlocal()).strftime('%d.%m.%y %H:%M'), pc, ('@%s' % un) if un else uid, )) for upd, pc, un, uid in users)
def select_driver(name=None, version=None): with db_session: drivers = select(d for d in Driver)[:] if name is not None: drivers = filter(lambda d: d.name == name, drivers) if version is not None: drivers = filter(lambda d: d.version == version, drivers) return drivers
def get_rank(args): with db_session: all_users = list( select((user.tg_user_id, user.tg_user_username) for user in User)) users = {} for u in all_users: users[u[0]] = u[1] all_messages = list( select((msg.tg_user_id, count()) for msg in Message).order_by(lambda: desc(count()))) try: number = abs(int(args[0])) # 如果输入负数,展示绝对值对应的排名 except: number = 10 # 默认展示前10名,如果参数不是数字也只显示前10名 if number == 0: # 输入数字0展示全部排名 number = len(all_messages) rank_text = "" c = 1 for r in all_messages[:number]: rank_text += "*{}. {}* => {}\n".format(c, users[r[0]], r[1]) c += 1 return rank_text
def add_driver_to_fuel(fuel_version, name, version): with db_session: if select(d for d in Driver if d.name == name and d.version == version).count() > 0: raise Exception('Driver already exists') fuel_version = get(fv for fv in FuelVersion if fv.name == fuel_version) if fuel_version is None: raise Exception('Unknown Fuel version') driver = Driver(fuel_version=fuel_version, name=name, version=version) return driver
def after_delete_position(self): base_class = self.base_class_position or self.__class__ n = 0 try: referent = self._positionbackup[0][self._positionbackup[1]] except ObjectNotFound: return # referent deleted, classement n'a plus d'intéret children = select( p for p in base_class if getattr(p, self.referent_attribute_name) == referent).order_by( base_class._position) for s in children: s._position = n n += 1
def add_server(component_names=None, certification_ids=None, name="", vendor="", comments="", specification_url=None, availability=None): with db_session: components = None certifications = None if component_names is not None: components = select(c for c in Component if c.name in component_names)[:] if certification_ids is not None: certifications = select(c for c in Certification if c.id in certification_ids)[:] server = Server(vendor=vendor, name=name, comments=comments) if specification_url is not None: server.specification_url = specification_url if availability is not None: server.availability = availability if components is not None: for c in components: server.components.add(c) if certifications is not None: for c in certifications: server.certifications.add(c) return server
def select_certification(server_name=None, date=None, fuel_versions=None): with db_session: certifications = select(c for c in Certification)[:] if server_name is not None: certifications = filter(lambda c: c.server.name == server_name, certifications) if date is not None: certifications = filter(lambda c: c.date == date, certifications) if fuel_versions is not None: certifications = filter( lambda c: c.fuel_version.name in fuel_versions, certifications) return certifications
def get_word_cloud(): for i in open("/yqbot/app/assets/stopwords.txt").read().split('\n'): stopwords.add(unicodedata.normalize('NFC', i)) with db_session: all_messages = list(select(msg.tg_msg_text for msg in Message)) words = {} for msg in all_messages: if validators.url(msg): continue for w in jieba.cut(msg, cut_all=False): w = unicodedata.normalize('NFC', w) w = w.strip() if not w: continue if w in stopwords: continue if is_emoji(w): continue if w not in words: words[w] = 1 else: words[w] += 1 with open('cut_result.csv', 'w') as cf: writer = csv.DictWriter(cf, ["word", "count"]) writer.writeheader() for w in sorted(words, key=words.get, reverse=True): writer.writerow({"word": w, "count": words[w]}) wd = {} with open("cut_result.csv") as f: reader = csv.DictReader(f) for i in reader: wd[i["word"]] = int(i["count"]) wordcloud = WordCloud( width=1024, height=1024, font_path="/yqbot/app/assets/SourceHanSans-Normal.ttc", color_func=lambda *args, **kwargs: (140, 184, 255)).generate_from_frequencies(wd) image = wordcloud.to_image() return image
def select_certified_components(types=None, fuel_versions=None, server=None, vendor=None, name=None): if fuel_versions == ['None']: components = left_join((component, server, count(certification)) for component in Component for server in component.servers for certification in server.certifications if count(server.certifications) == 0 or count(component.servers) == 0)[:] components = [c[0] for c in components] print components elif fuel_versions is not None and \ len(fuel_versions) > 0: components = left_join( (component, count(server), count(certification)) for component in Component for server in component.servers for certification in server.certifications if count(server.certifications) > 0 and certification.fuel_version.name in fuel_versions)[:] components = [c[0] for c in components] print components else: components = select(c for c in Component)[:] if types is not None and types != ['all']: components = filter(lambda c: c.type in types, components) if vendor is not None: components = filter(lambda c: vendor in c.vendor, components) if name is not None: components = filter(lambda c: name in c.name, components) if server is not None and server != ''\ and server != 'nothing': components = filter(lambda c: name in [s.name for s in c.servers], components) return components
def calc_temps(start_temp, end_temp): """ Oblicza zmianę temperatur """ TEMP_START = start_temp # inner wall temp [C] TEMP_END = end_temp # outer wall temp [C] Q = 750 # initial heat flux # Q = calculate_Q() '''wall_config = [ # material name, thickness ("ISO 140-0.8", 0.065), ("ISO 125-0.5", 0.065), ("Microporous ISO 1200", 0.06), ]''' # TODO: Wczytać te parametry z pliku! read_wall_config = pd.read_excel('wall_config.xlsx') wall_config_material = read_wall_config['material'].tolist() wall_config_thickness = read_wall_config['thickness'].tolist() wall_config = dict(zip(wall_config_material, wall_config_thickness)) # główna funkcja programu with db_session: mat_testowy = select(m for m in Material).first() if mat_testowy is None: raise ValueError("Pusta baza danych!") # TODO: Sprawdzić, czy wszystkie nazwy materiałów z konfiguracji ściany znajdują się w bazie! # tutaj proszę o pomoc w napisaniu tego temp = TEMP_START for name, thickness in wall_config: material = Material.get(name=name) if temp > material.max_temp: raise TooHighTempException(temp, name) layer_coeff = (material.coeff_a * (temp**2) + material.coeff_b * temp + material.coeff_c) print(f"Temperatura na warstwie {name} jest rowna {temp}") temp = temp - ((thickness * Q) / layer_coeff) # TODO: Sprawdzić, czy osiągnięta została temp. końcowa - jesli nie, to błąd itd. if temp > end_temp: print('Wszystko okej, obliczenia wykonane poprawnie') raise ValueError( f"Niepoprawnie przepriwadzone obliczenia temp koncowa {temp}")
def delete_component(name=None, hw_id=None): if name is not None: cmp = select(c for c in Component if c.name == name)[:] else: raise Exception('Specify component name') if hw_id is not None: components = filter(lambda c: c.hw_id == hw_id, cmp) else: components = cmp if len(components) == 0: return "Nothing to delete" if len(components[0].servers) > 0: return "Cannot delete component that is used in servers" else: db.execute("DELETE FROM Component " "WHERE name='{0}';".format(components[0].name)) return "Request for deleting component {0} " \ "has been accepted".format(name)
def update_component(servers=None, type=None, name=None, vendor=None, comments=None, hw_id=None, driver=None): component = get(c for c in Component if c.name == name) if servers: servers = select(s for s in Server if s.name in servers)[:] component.servers.clear() for s in servers: component.servers.add(s) if type is not None and check_type(type): component.type = type if name is not None: component.name = name if vendor is not None: component.vendor = vendor if comments is not None: component.comments = comments if hw_id is not None: component.hw_id = hw_id if driver is not None: driver = Driver.get(lambda d: d.name == driver) if driver is not None: component.driver = driver return component
def select_certified_servers(fuel_versions=None, name=None, vendor=None): if fuel_versions == ['None']: # select all servers that was not certified. servers = left_join((s, count(c)) for s in Server for c in s.certifications if count(c) == 0)[:] servers = [s[0] for s in servers] elif fuel_versions is not None \ and len(fuel_versions) > 0: #select servers whose certifications are in fuel_versions. servers = left_join( (s, count(c)) for s in Server for c in s.certifications if count(c) > 0 and c.fuel_version.name in fuel_versions)[:] servers = [s[0] for s in servers] else: servers = select(s for s in Server)[:] if name is not None: servers = filter(lambda s: name in s.name, servers) if vendor is not None: servers = filter(lambda s: vendor in s.vendor, servers) return servers