Exemplo n.º 1
0
 def get_fuzzy_tenants_by_tenant_alias(self, tenant_alias):
     tenant_alias_map = list(Tenants.objects.values("tenant_alias"))
     tenant_alias_list = map(lambda x: x.get("tenant_alias", "").lower(), tenant_alias_map)
     find_tenant_alias = list(fuzzyfinder(tenant_alias.lower(), tenant_alias_list))
     tenant_query = Q(tenant_alias__in=find_tenant_alias)
     tenant_list = Tenants.objects.filter(tenant_query)
     return tenant_list
Exemplo n.º 2
0
 def get_fuzzy_tenants_by_tenant_name(self, tenant_name):
     tenant_name_map = list(Tenants.objects.values("tenant_name"))
     tenant_name_list = map(lambda x: x.get("tenant_name", "").lower(), tenant_name_map)
     find_tenant_name = list(fuzzyfinder(tenant_name.lower(), tenant_name_list))
     tenant_query = Q(tenant_name__in=find_tenant_name)
     tenant_list = Tenants.objects.filter(tenant_query)
     return tenant_list
Exemplo n.º 3
0
 def get_fuzzy_labels(self, label_alias):
     label_alias_map = list(Labels.objects.values("label_alias"))
     label_alias_list = map(lambda x: x.get("label_alias", "").lower(), label_alias_map)
     find_label_alias = list(fuzzyfinder(label_alias.lower(), label_alias_list))
     label_query = Q(label_alias__in=find_label_alias)
     label_list = Labels.objects.filter(label_query)
     return label_list
Exemplo n.º 4
0
    def get_completions(self, document, complete_event):
        """
        Get command completion
        :param document:
        :param complete_event:
        :return:
        """
        # fix input
        cmd = next(csv.reader([" ".join(document.text.split())], delimiter=' '))

        # get current word
        word_before_cursor = document.get_word_before_cursor(WORD=True)

        # suggest keywords
        suggestions = list()
        if self.need_param(cmd=cmd, word_before_cursor=word_before_cursor):
            param = self.get_param(cmd=cmd, word_before_cursor=word_before_cursor)
            if self.thread_state in [StateEnum.START, StateEnum.CONTINUE]:
                if param in ['--project-name', '--dataset-name', '--remote-path']:
                    thread = threading.Thread(target=self.get_param_suggestions,
                                              kwargs={"param": param,
                                                      'word_before_cursor': word_before_cursor,
                                                      'cmd': cmd})
                    thread.daemon = True
                    thread.start()

                else:
                    self.get_param_suggestions(param=param, word_before_cursor=word_before_cursor, cmd=cmd)
            if self.thread_state in [StateEnum.DONE, StateEnum.CONTINUE]:
                suggestions = self.param_suggestions
        elif len(cmd) == 0:
            suggestions = list(self.keywords.keys())
        elif len(cmd) == 1:
            self.thread_state = StateEnum.START
            if cmd[0] not in self.keywords.keys() and cmd[0] != '':
                if not word_before_cursor == '':
                    suggestions = list(self.keywords.keys())
            elif cmd[0] == '':
                suggestions = list(self.keywords.keys())
            elif isinstance(self.keywords[cmd[0]], list):
                suggestions = self.keywords[cmd[0]]
            elif isinstance(self.keywords[cmd[0]], dict):
                suggestions = list(self.keywords[cmd[0]].keys())
        elif len(cmd) >= 2:
            self.thread_state = StateEnum.START
            if cmd[0] not in self.keywords.keys():
                suggestions = list()
            elif isinstance(self.keywords[cmd[0]], list):
                suggestions = self.keywords[cmd[0]]
            elif isinstance(self.keywords[cmd[0]], dict):
                if cmd[1] in self.keywords[cmd[0]].keys():
                    suggestions = self.keywords[cmd[0]][cmd[1]]
                else:
                    suggestions = list(self.keywords[cmd[0]].keys())

        matches = fuzzyfinder(word_before_cursor, suggestions)
        for match in matches:
            yield Completion(match, start_position=-len(word_before_cursor))
Exemplo n.º 5
0
 def fuzzy_query_enterprise_by_enterprise_name(self, enterprise_name):
     enter_name_map = list(
         TenantEnterprise.objects.values("enterprise_name"))
     enter_name_list = map(lambda x: x.get("enterprise_name", "").lower(),
                           enter_name_map)
     find_enter_name = list(
         fuzzyfinder(enterprise_name.lower(), enter_name_list))
     tenant_query = Q(enterprise_name__in=find_enter_name)
     tenant_list = TenantEnterprise.objects.filter(tenant_query)
     return tenant_list
Exemplo n.º 6
0
 def fuzzy_query_enterprise_by_enterprise_alias(self, enterprise_alias):
     enter_alias_map = list(
         TenantEnterprise.objects.values("enterprise_alias"))
     enter_alias_list = map(lambda x: x.get("enterprise_alias", "").lower(),
                            enter_alias_map)
     find_enter_alias = list(
         fuzzyfinder(enterprise_alias.lower(), enter_alias_list))
     tenant_query = Q(enterprise_alias__in=find_enter_alias)
     tenant_list = TenantEnterprise.objects.filter(tenant_query)
     return tenant_list
Exemplo n.º 7
0
    def get_fuzzy_users(self, user_name, tenant_name):
        # 如果租户名存在
        if tenant_name:
            tenants = Tenants.objects.filter(tenant_name=tenant_name)
            if not tenants:
                raise TenantNotExistError("租户{}不存在".format(tenant_name))
            tenant = tenants[0]
            user_id_list = PermRelTenant.objects.filter(tenant_id=tenant.ID).values_list("user_id", flat=True)
            user_list = Users.objects.filter(user_id__in=user_id_list)
            user_name_list = map(lambda x: x.nick_name.lower(), user_list)

        else:
            user_name_map = list(Users.objects.values("nick_name"))
            user_name_list = map(lambda x: x.get("nick_name").lower(), user_name_map)

        find_user_name = list(fuzzyfinder(user_name.lower(), user_name_list))
        user_query = Q(nick_name__in=find_user_name)
        user_list = Users.objects.filter(user_query)
        return user_list
Exemplo n.º 8
0
    def get_completions(self, document, complete_event):
        word_before_cursor = document.get_word_before_cursor(WORD=True)
        matches = fuzzyfinder(word_before_cursor, GitlabCLIKeywords)

        for m in matches:
            yield Completion(m, start_position=-len(word_before_cursor))
Exemplo n.º 9
0
    def handle(self, *args, **options):
        conference = Conference.objects.get(year=options['year'])

        data = requests.get(options['data_url']).json()

        questions = data['questions']
        categories = data['categories']
        rooms = data['rooms']

        # Sync rooms
        Room.objects.filter(conference=conference).delete()
        Slot.objects.filter(conference=conference).delete()
        all_presentations_this_year = list(
            Presentation.objects.filter(conference=conference).values_list(
                "id", "title"))

        for room in rooms:
            Room.objects.create(pk=room['id'],
                                conference=conference,
                                name=room['name'],
                                sort_order=room['sort'])

        # Make speaker dict
        speakers = {}
        for _ in data['speakers']:
            first_name = _.pop('firstName')
            last_name = _.pop('lastName')
            speakers[f"{first_name} {last_name}"] = _

        for speaker in speakers.values():
            for i, session in enumerate(speaker['sessions']):
                speaker['sessions'][i] = list(
                    filter(lambda _: int(_['id']) == session,
                           data['sessions']))[0]

        #  Attach Speaker obj from DB
        speakers_qs = Speaker.objects.all().prefetch_related(
            Prefetch("presentations",
                     queryset=Presentation.objects.filter(
                         active=True, conference=conference).order_by("type")))

        _cant_find = []
        for speaker in speakers_qs:
            if not any(speaker.presentations.all()):
                continue

            r = list(fuzzyfinder(speaker.full_name, speakers.keys()))
            if not any(r):
                _cant_find.append(speaker)
                continue
            speakers[r[0]]["model_speaker"] = speaker
            speaker = speakers[r[0]]

            for _ in speaker['sessions']:
                r = list(
                    fuzzyfinder(_['title'],
                                list(zip(*all_presentations_this_year))[1]))
                if not any(r):
                    _cant_find.append(_)

                try:
                    presentation = Presentation.objects.get(
                        title__icontains=_['title'])
                except Presentation.DoesNotExist:
                    _cant_find.append(_)
                # TODO NEXT YEAR MAYBE, GET TZ FROM CONFERENCE OBJECT ?!
                Slot.objects.create(from_date=timezone.make_aware(
                    datetime.strptime(_['startsAt'], "%Y-%m-%dT%H:%M:%S")),
                                    to_date=timezone.make_aware(
                                        datetime.strptime(
                                            _['endsAt'], "%Y-%m-%dT%H:%M:%S")),
                                    talk=presentation,
                                    room=Room.objects.get(pk=_['roomId']),
                                    conference=conference)

        if any(_cant_find):
            if options['force']:
                print(_cant_find)
            else:
                raise Exception("Had problems with the following", _cant_find)