Example #1
0
def list_of_import_in_database(request):
    """
    controler of the template account that allow the user to see which calculation he contribute
    :param request: variable wich contains the value of the page
    :return: template html
    """

    if not request.user.is_admin:  # security to redirect user that aren't admin
        return HttpResponseRedirect(reverse('accueil'))

    query_form = QueryForm(request.GET or None)
    page = request.GET.get('page', 1)
    try:  # get all imported  file
        list_imported_file = ImportFile.objects.all()
        paginator = Paginator(list_imported_file.order_by("id_file"), 10)
    except Exception as error:
        print(error)
    try:
        history = paginator.page(page)
    except PageNotAnInteger:
        history = paginator.page(1)
    except EmptyPage:
        history = paginator.page(paginator.num_pages)
    if request.GET and 'button-search' in request.GET:
        if query_form.is_valid():
            return HttpResponseRedirect(reverse('query'))

    return render(request, 'admin_qcpia/admin_list_on_import_in_database.html',
                  {
                      'query_form': query_form,
                      "history": history
                  })
Example #2
0
def user_history_import(request):
    """
    controler of the template account that allow the user to see which calculation he contribute
    :param request: variable wich contains the value of the page
    :return: template html
    """

    query_form = QueryForm(request.GET or None)
    page = request.GET.get('page', 1)

    try:  # get all imported  file
        list_imported_file = ImportFile.objects.filter(id_user=request.user.id)
        paginator = Paginator(list_imported_file.order_by("id_file"), 10)
    except Exception as error:
        print(error)
    try:
        history = paginator.page(page)
    except PageNotAnInteger:
        history = paginator.page(1)
    except EmptyPage:
        history = paginator.page(paginator.num_pages)
    if request.GET and 'button-search' in request.GET:
        if query_form.is_valid():
            return HttpResponseRedirect('query')

    return render(request, 'user_qcpia/user_history_import.html', {'query_form': query_form, "history": history})
def edit_rule_admin(request):
    """
    controler of the template account that allow the to edit import rule
    :param request: variable wich contains the value of the page
    :return: template html
    """
    if not request.user.is_admin:  # security to redirect user that aren't admin
        return HttpResponseRedirect(reverse('accueil'))
    query_form = QueryForm(request.GET or None)
    page = request.GET.get('page', 1)
    paginator = None
    try:  # get all imported  file
        list_of_rules = ImportRule.objects.all()
        paginator = Paginator(list_of_rules.order_by("id_rule"), 10)
    except Exception as error:
        print(error)
    try:
        rules = paginator.page(page)
    except PageNotAnInteger:
        rules = paginator.page(1)
    except EmptyPage:
        rules = paginator.page(paginator.num_pages)
    if request.GET and 'button-search' in request.GET:
        if query_form.is_valid():
            return HttpResponseRedirect(reverse('query'))

    return render(request, 'admin_qcpia/admin_edit_rule_import.html', {'query_form': query_form,
                                                                       'rules': rules})
def accueil(request):
    """
    controler of the template accueil.html
    :param request: variable wich contains the value of the page
    :return: template html
    """
    query_form = QueryForm(request.GET or None)
    if query_form.is_valid():
        return HttpResponseRedirect(reverse('query'))
    return render(request, 'common_qcpia/accueil.html', {'query_form': query_form})
Example #5
0
def auth(request):
    """
    controler that allow the user to login or register on the web site
    :param request: request variable
    :return: a view with both form (login and register)
    """

    query_form = QueryForm(request.GET or None)
    error_login = False
    error_register = False
    if query_form.is_valid():
        return HttpResponseRedirect('query')
    if request.method == 'POST' and 'btn-login' in request.POST:
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            email = login_form.cleaned_data["email"]
            password = login_form.cleaned_data["password"]
            user = authenticate(
                email=email, password=password
            )  # Nous vérifions si les données sont correctes
            if user:  # Si l'objet renvoyé n'est pas None
                login(request, user)  # nous connectons l'utilisateur
                return HttpResponseRedirect('dashboard/history')
            else:  # sinon une erreur sera affichée
                error_login = True
    else:
        login_form = LoginForm()

    if request.method == 'POST' and 'btn-register' in request.POST:
        register_form = SignUpForm(request.POST)
        if register_form.is_valid():
            user = register_form.save()
            login(request, user)
            return HttpResponseRedirect(reverse('accueil'))

    else:
        register_form = SignUpForm()

    return render(
        request, 'user_qcpia/auth.html', {
            'query_form': query_form,
            'register_form': register_form,
            'login_form': login_form,
            'error_login': error_login,
            'error_register': error_register
        })
def admin_edit_user(request, id):
    """
    controler to edit all user profile
    :param request: environement variable of http request
    :param id: id of the user
    :return: http response
    """
    if not request.user.is_admin:  # security to redirect user that aren't admin
        return HttpResponseRedirect(reverse('accueil'))

    current_user = Utilisateur.objects.get(id=id)
    if request.method == 'POST':
        if 'btn-admin-update-profil' in request.POST:
            form_edit_utilisateur = AdminEditUtilisateur(data=request.POST,
                                                         user=current_user,
                                                         instance=current_user)
            if form_edit_utilisateur.is_valid():
                form_edit_utilisateur.save()
        if 'btn-admin-update-password' in request.POST:
            form_change_password = ChangePassword(data=request.POST,
                                                  instance=current_user)
            if form_change_password.is_valid():
                form_change_password.save()

    form_edit_utilisateur = AdminEditUtilisateur(data=request.POST,
                                                 user=current_user,
                                                 instance=current_user)
    form_change_password = ChangePassword(data=request.POST,
                                          instance=current_user)
    query_form = QueryForm(request.GET or None)
    if query_form.is_valid():
        return HttpResponseRedirect(reverse('query'))

    return render(
        request, 'admin_qcpia/admin_edit_user_profile.html', {
            'query_form': query_form,
            'form_edit_utilisateur': form_edit_utilisateur,
            'form_change_password': form_change_password,
            'id_user': id
        })
Example #7
0
def details(request):
    """
    function that return the json of a molecule
    :param request: request environment variable
    :param id: id of the json that we want to show
    :return: html template
    """
    query_form = QueryForm(request.GET or None)
    site_url = settings.SITE_ROOT_URL
    data_dir = settings.DATA_DIR_URL
    return render(request, 'query_qcpia/details.html', {
                                                        'query_form': query_form,
                                                        'site_url': site_url,
                                                        'data_dir': data_dir
                                                    })
Example #8
0
def account(request):
    """
    controler of the template account that allow to edit the user profile
    :param request: variable wich contains the value of the page
    :return: template html
    """

    if request.method == 'POST' and 'btn-register' in request.POST:
        form_edit_utilisateur = EditUtilisateur(data=request.POST,
                                                user=request.user,
                                                instance=request.user)
        if form_edit_utilisateur.is_valid():
            form_edit_utilisateur.save()
    else:
        form_edit_utilisateur = EditUtilisateur(data=request.POST,
                                                user=request.user)
    query_form = QueryForm(request.GET or None)
    if query_form.is_valid():
        return HttpResponseRedirect(reverse('query'))

    if request.method == 'POST' and 'btn-password' in request.POST:

        form_edit_password = PasswordChangeForm(data=request.POST,
                                                user=request.user)

        if form_edit_password.is_valid():
            user = form_edit_password.save()
            update_session_auth_hash(request, user)  # Important!
    else:
        form_edit_password = PasswordChangeForm(request.user)
    query_form = QueryForm(request.GET or None)
    if query_form.is_valid():
        return HttpResponseRedirect(reverse('query'))

    return render(
        request, 'user_qcpia/account.html', {
            'query_form': query_form,
            'form_edit_password': form_edit_password,
            'form_edit_utilisateur': form_edit_utilisateur
        })
Example #9
0
def import_view(request):
    """
    controler of the template account that allow the user to import file
    :param request: variable wich contains the value of the page
    :return: template html
    """
    path_prefix = 'media/'
    number_of_stand_by_import = 0
    query_form = QueryForm(request.GET or None)
    if query_form.is_valid():
        return HttpResponseRedirect(reverse('query'))

    if request.user.is_authenticated:
        number_of_stand_by_import = len(
            list(
                ImportFile.objects.filter(id_user=request.user.id).filter(
                    status="stand-by")))

    if request.method == 'POST' and 'btn_upload' in request.POST:
        if not request.FILES['file']:
            myfile = request.POST.get('file')
        else:
            myfile = request.FILES['file']  # work for dropzone only
        # todo add json transform
        content = ContentFile(myfile.read())
        #dirpath = tempfile.mkdtemp(prefix="/var/www/html/media/to_import/tmp/")
        dirpath = tempfile.mkdtemp(
            prefix=os.path.join(MEDIA_ROOT, "to_import/tmp/"))
        filepath = os.path.join(dirpath, "file.log")
        default_storage.save(filepath, content)
        file_list, json_list = process_logfile(
            filepath, log_storage_path=os.path.dirname(dirpath))

        for i, json_file in enumerate(json_list):
            temps = ImportFile.objects.create(
                path_file=path_prefix,
                log_path_file=path_prefix,
                id_user=request.user)  # register in database
            file_log = open(file_list[i], 'r')
            file_log_content = file_log.read()
            file_log.close()
            log_final_path = store_in_temp(id_calcul=str(temps.id_file),
                                           file=file_log_content,
                                           type='log')
            final_path = store_in_temp(id_calcul=str(temps.id_file),
                                       file=json_file,
                                       type="json")
            temps.path_file = final_path
            temps.log_path_file = log_final_path
            temps.save()

            # adding an import  for this day to the user*
            if request.user.is_authenticated:
                if request.user.last_date_upload != datetime.datetime.today().date() \
                        or request.user.last_date_upload is None:
                    request.user.last_date_upload = datetime.datetime.today()
                    request.user.number_of_upload_this_day = 1
                    request.user.save()
                else:
                    request.user.number_of_upload_this_day += 1
                    request.user.save()
                request.user.refresh_from_db()
            else:
                #   user == anonymous
                pass
            code_return_pol = register_soft_job_type_and_version(
                settings.BASE_DIR + settings.MEDIA_URL + final_path)
            if code_return_pol == 0:
                temps.status = "error can't define policy"
                temps.save()
            # we do nothing in case of 1 because it's define by default
            elif 3 in code_return_pol:
                os.remove(temps.path_file)
                temps.status = "import not supported yet"
                temps.save()

            elif 2 in code_return_pol:
                #  automatic import
                try:
                    path = "media/" + temps.path_file
                    update_status_in_db(result_of_import=import_file(
                        path=file_list[i],
                        json_file=json_file,
                        id_user=temps.id_user.id),
                                        import_object=temps)
                except Exception as error:
                    print(error)
                    temps.status = 'import failed'
                    temps.save()

        shutil.rmtree(dirpath)
    return render(
        request, 'user_qcpia/user_import.html', {
            'query_form': query_form,
            'number_of_stand_by_import': number_of_stand_by_import
        })
Example #10
0
def list_of_all_user(request):
    """
    controler of the template admin which list all registred user and allow to find one
    :param request: variable wich contains the value of the page
    :return: template html
    """
    if not request.user.is_admin:  # security to redirect user that aren't admin
        return HttpResponseRedirect(reverse('accueil'))

    query_form = QueryForm(request.GET or None)
    page = request.GET.get('page', 1)
    search_user_form = SearchUserForm(request.GET or None)
    media = settings.MEDIA_URL

    try:
        # switch on what we are looking for
        if 'ID' in request.GET.get('typeQuery'):
            list_of_user = Utilisateur.objects.filter(
                id=int(request.GET.get('search')))

        elif 'first_name' in request.GET.get('typeQuery'):
            list_of_user = Utilisateur.objects.filter(
                first_name__icontains=request.GET.get('search'))

        elif 'last_name' in request.GET.get('typeQuery'):
            # here we looking for inchi wich contain a part of what we looking for
            list_of_user = Utilisateur.objects.filter(
                last_name__icontains=request.GET.get('search'))

        elif 'affiliation' in request.GET.get('typeQuery'):
            list_of_user = Utilisateur.objects.filter(
                affiliation__icontains=request.GET.get('search'))

        elif 'mail' in request.GET.get('typeQuery'):
            list_of_user = Utilisateur.objects.filter(
                email__icontains=request.GET.get('search'))
        else:
            list_of_user = Utilisateur.objects.all()
        paginator = Paginator(list_of_user.order_by("id"), 10)
    except Exception as error:
        print(error)
        print("error in database")
        list_of_user = Utilisateur.objects.all()
        paginator = Paginator(list_of_user.order_by("id"), 10)

    try:
        users = paginator.page(page)
    except PageNotAnInteger:
        users = paginator.page(1)
    except EmptyPage:
        users = paginator.page(paginator.num_pages)
    if request.GET and 'button-search' in request.GET:
        if query_form.is_valid():
            return HttpResponseRedirect(reverse('query'))
    return render(
        request, 'admin_qcpia/admin_list_user.html', {
            'query_form': query_form,
            'users': users,
            'search_user_form': search_user_form,
            'media': media
        })
Example #11
0
def query(request):
    """
    controler that make research on different condition
    :param request: environment variable that contains arguement of the research
    :return: template html with dictionnary of value to display
    """
    query_form = QueryForm(request.GET or None)
    results = None
    try:
        page = int(request.GET.get('page'))
    except Exception as error:
        print(error)
        page = 1

    try:
        nbrpp = int(request.GET.get('nbrpp'))  # nombre de résultat par page
    except Exception as error:
        print(error)
        nbrpp = 10

    try:
        # switch on what we are looking for
        if 'CID' in request.GET.get('typeQuery'):
            results = search_cid(cid_value=request.GET.get('search'), nbrpp=nbrpp, page=page)

        if 'IUPAC' in request.GET.get('typeQuery'):
            results = search_iupac(iupac_value=request.GET.get('search'), nbrpp=nbrpp, page=page)

        if 'InChi' in request.GET.get('typeQuery'):
            # here we looking for inchi wich contain a part of what we looking for
            results = search_inchi(inchi_value=request.GET.get('search'), nbrpp=nbrpp, page=page)

        if 'Formula' in request.GET.get('typeQuery'):
            results = search_formula(formula_value=request.GET.get('search'), nbrpp=nbrpp, page=page)

        if 'SMILES' in request.GET.get('typeQuery'):
            results = search_smiles(smiles_value=request.GET.get('search'), nbrpp=nbrpp, page=page)

        if 'id_log' in request.GET.get('typeQuery'):
            # if we want to access to an id we forward it to the details page as a parameter
            url = build_url('details', get={'id': request.GET.get('search')})
            return HttpResponseRedirect(url)
        if 'id_user' in request.GET.get('typeQuery'):
            results = search_id_user(id_user=request.GET.get('search'), nbrpp=nbrpp, page=page)

    except Exception as error:
        print("error :")
        print(error)

    # if we have only one result we display the details of the molecule
    if results is None:
        results = '{"nbresult":0}'
    test_result = json.loads(results)
    if test_result['nbresult'] == 0 or len(test_result) == 1:
        results = '{}'
        test_result = json.loads(results)
    if len(test_result) == 2 and 'id_user' not in request.GET.get('typeQuery'):
        # if we have only one result we forward it to the detail page
        url = build_url('details', get={'id': str(test_result["0"][0]["id_log"])})
        return HttpResponseRedirect(url)

    return render(request, 'query_qcpia/query.html', {'results': test_result, 'query_form': query_form})