Exemple #1
0
def import_own_files(
    files: Mapping[str, TemporaryUploadedFile], *, qs: QuerySet, voice: str
) -> Generator[Mapping[Optional[str], Optional[str]], None, None]:
    """ Import own file """
    audio_list = [qs_object['name'] for qs_object in qs.values('name')]
    converter = SoxTransformerMixin()
    safe_extensions = ['.mp3', '.wav', '.raw']
    for file_name, file_ in files.items():
        file_name, extension = os.path.splitext(file_name)
        if extension not in safe_extensions:
            yield {'error': f'{file_name}{extension}', 'success': None}
        if file_name not in audio_list:
            yield {'error': file_name, 'success': None}
        else:
            if extension == '.mp3':  # SoX do not nothing about mp3 o_O
                file_ = convert_from_mp3(file_)

            audio_record: AudioRecord = qs.get(name__exact=file_name)
            wav_file = converter.convert_audio_type_format(
                user_file=file_.file, extension_to='wav', normalise=True)
            audio_record.source = Source.objects.get(name='Voice actor')
            audio_record.voice = voice
            audio_record.emote = 'Живые эмоции'
            audio_record.playing_speed = Decimal(1.0)
            with wav_file as converted_:
                content = converted_.read()
                audio_record.audio.save(f'{file_name}_{datetime.now()}.wav',
                                        ContentFile(content))
                audio_record.default_audio.save(
                    f'{file_name}_{datetime.now()}-default.wav',
                    ContentFile(content))
            yield {'error': None, 'success': file_name}
Exemple #2
0
def get_cursor(
    queryset: QuerySet,
    after_uuid: uuid.UUID = None,
    before_uuid: uuid.UUID = None,
    default_order: str = None,
) -> typing.Tuple[typing.Any, str]:
    cursor_obj = None
    if after_uuid is not None:
        with contextlib.suppress(ObjectDoesNotExist):
            cursor_obj = queryset.get(uuid=after_uuid)
            order = 'after'
    elif before_uuid is not None:
        with contextlib.suppress(ObjectDoesNotExist):
            cursor_obj = queryset.get(uuid=before_uuid)
            order = 'before'
    if cursor_obj is None:
        order = default_order or ''
    return cursor_obj, order
Exemple #3
0
def retry_get(qs: QuerySet, **kwargs):
    for delay in (0.5, 1, 2, 4, None):
        try:
            return qs.get(**kwargs)
        except qs.model.DoesNotExist:
            if delay:
                time.sleep(delay)
            else:
                raise
Exemple #4
0
 def get_deleted(self, *args, **kwargs):
     kwargs = self.model.resolve_subfield_filters(**kwargs)
     assert kwargs["id"], "get_deleted() 호출 시에는 id 값을 넘겨야 합니다."
     qs = DjangoQuerySet(self.model)
     qs = qs.filter(status=Status.DELETED)
     qs = self.process_queryset(qs)
     instance = qs.get(*args, **kwargs)
     if instance.status != Status.DELETED:
         raise instance.__class__.DoesNotExist
     instance._old_status = Status.DELETED
     return instance
Exemple #5
0
def get_excess_users_in_g_suite(
    g_suite_users: List[Dict[str, str]], ow4_users: QuerySet
) -> List[Dict[str, str]]:
    """
    Finds excess users from lists of G Suite users and OW4 users.
    :param g_suite_users: The members of a G Suite group.
    :param ow4_users: The members of an OW4 group.
    :return: A list of excess users.
    """
    excess_users = []

    for user in g_suite_users:
        try:
            ow4_users.get(online_mail=user.get("email").split("@")[0])
        except User.DoesNotExist:
            excess_users.append(user)

    logger.debug(f"Excess users in G Suite: {excess_users}")

    return excess_users
    def filter_transfers_by_transfer_set_index(self, transfers: QuerySet):
        # If this context has no transfer, or its transfer has no id, do nothing as there's no index to filter with
        if self.transfer is None:
            return transfers

        if self.transfer.id is None:
            return transfers

        # Find transfer in set, where index field is added
        try:
            transfer = transfers.get(id=self.transfer.id)
        except Transfer.DoesNotExist:
            return transfers

        return transfers.filter(index__lte=transfer.index)
Exemple #7
0
 def export_applicants(self, request: HttpRequest, queryset: QuerySet):
     if queryset.count() != 1:
         self.message_user(request,
                           "Please select only one session for export",
                           messages.ERROR)
         return
     session: ApplicationSession = queryset.get()
     csv_resp = HttpResponse(content_type='text/csv')
     csv_resp[
         'Content-Disposition'] = 'attachment; filename="Applicants %s.csv"' % (
             session.move_in_str(), )
     wr = csv.writer(csv_resp)
     fields: List[Field] = Applicant._meta.get_fields(include_parents=False,
                                                      include_hidden=False)
     header = []
     fnames = []
     for f in fields:
         if f.is_relation:
             continue
         header.append(f.verbose_name)
         fnames.append(f.name)
     header.append("Abstain votes")
     header.append("Not suitable votes")  # -2
     header.append("Suitable votes")  # 1
     header.append("Very suitable votes")  # 2
     qs = session.questions()
     for q in qs:
         header.append(q.question_text)
     wr.writerow(header)
     for ap in Applicant.objects.filter(session=session):
         row = []
         for f in fnames:
             row.append(getattr(ap, f))
         for vv in [0, -2, 1, 2]:
             vc = ApplicationVote.objects.filter(applicant=ap,
                                                 points__exact=vv).count()
             row.append(vc)
         for q in qs:
             ans = 'no answer'
             try:
                 ans = ApplicationAnswer.objects.get(applicant=ap,
                                                     question=q).answer
             except:
                 pass
             row.append(ans)
         wr.writerow(row)
     return csv_resp
Exemple #8
0
    def check_responsible_reports(emails: QuerySet,
                                  resps: List[models.ResponsibilityPerson],
                                  num_responsibles: int):
        assert len(resps) == num_responsibles
        assert len(
            emails
        ) == num_responsibles + 1 - 1  # +1 to participant. -1 because 1 does not want email notifications.
        _full_report_hit = False
        _no_full_report_hit = False
        _no_email_hit = False

        for r in resps:
            if not r.send_email_notifications:
                _no_email_hit = True
                continue

            email = emails.get(to_address=r.email)
            url = urlparse(email.context_dict['url']).path
            client1.session.clear()

            res = client1.get(url)
            assert res.status_code == Http.REDIR
            assert res.url == Pages.REPORT_RESPONSIBLE
            res = client1.get(res.url)
            assert res.status_code == Http.OK
            if r.show_full_report:
                _full_report_hit = True
                for p in REPORT_PAGES:
                    res = client1.get(p)
                    assert res.status_code == Http.OK
            else:
                _no_full_report_hit = True
                for p in REPORT_PAGES:
                    res = client1.get(p)
                    assert res.status_code == Http.REDIR
                    assert res.url.startswith(Pages.ADMIN_LOGIN)
        assert _no_full_report_hit and _full_report_hit and _no_email_hit  #  check that test data is comprehensive enough
Exemple #9
0
def get_object_or_404(queryset: QuerySet, *args, **kwargs):
    try:
        return queryset.get(*args, **kwargs)
    except queryset.model.DoesNotExist:
        raise NotFoundError
Exemple #10
0
def ref_rank_filter(ref_rank_set: QuerySet, yoe):
    try:
        ref_rank_name = ref_rank_set.get(yoe=yoe).rank.name
    except ReferenceRank.DoesNotExist:
        return None
    return ref_rank_name
Exemple #11
0
def safe_queryset_get(queryset: QuerySet, **get_kwarg) -> Model or None:
    try:
        return queryset.get(**get_kwarg)
    except ObjectDoesNotExist or MultipleObjectsReturned:
        return None