Beispiel #1
0
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
Beispiel #2
0
    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()
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
 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)
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
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
Beispiel #13
0
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))
Beispiel #14
0
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
Beispiel #15
0
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)
Beispiel #16
0
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))
Beispiel #17
0
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
Beispiel #18
0
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)
Beispiel #19
0
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
Beispiel #20
0
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
Beispiel #21
0
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
Beispiel #22
0
 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
Beispiel #23
0
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
Beispiel #24
0
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
Beispiel #25
0
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
Beispiel #26
0
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
Beispiel #27
0
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}")
Beispiel #28
0
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)
Beispiel #29
0
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
Beispiel #30
0
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