Skip to content

Commit

Permalink
drf config
Browse files Browse the repository at this point in the history
  • Loading branch information
EduardoHernany committed May 9, 2024
1 parent 61320e8 commit ca22d63
Show file tree
Hide file tree
Showing 11 changed files with 68 additions and 28 deletions.
Binary file modified djangoAPI/__pycache__/urls.cpython-39.pyc
Binary file not shown.
1 change: 1 addition & 0 deletions djangoAPI/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

router = routers.DefaultRouter()
router.register(r'back/VS_doking2', views.VS_ViewSet, basename='admin')
router.register(r'process-plasmodocking', views.ProcessPlasmodockingViewSet)

urlpatterns = [
path('', include(router.urls)),
Expand Down
Binary file modified fiocruz/__pycache__/models.cpython-39.pyc
Binary file not shown.
Binary file modified fiocruz/__pycache__/serializers.cpython-39.pyc
Binary file not shown.
Binary file modified fiocruz/__pycache__/tasks.cpython-39.pyc
Binary file not shown.
Binary file modified fiocruz/__pycache__/views.cpython-39.pyc
Binary file not shown.
9 changes: 1 addition & 8 deletions fiocruz/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ class Process_Plasmodocking(models.Model):
("concluido", "Concluído"),
("error", "Erro"),
]

nome = models.CharField(max_length=200)
user = models.ForeignKey(UserCustom, on_delete=models.CASCADE)
ligante = models.FileField(upload_to=ligante_arquivo, blank=True, null=True)
Expand All @@ -64,10 +63,7 @@ class Process_Plasmodocking(models.Model):
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="em fila")
type = models.CharField(max_length=20, choices=TYPE_CHOICES, default="Falciparum")
redocking = models.BooleanField(default=True)

def formatted_data(self):
return self.data.strftime('%H:%M:%S - %d/%m/%Y')


def __str__(self):
return f"{self.nome} - {self.get_type_display()}"

Expand All @@ -91,9 +87,6 @@ class Macromoleculas_virtaulS(models.Model):

def __str__(self):
return self.nome




#Macromoleculas Sem redocking
def arquivo_macro_SR(instance, filename):
Expand Down
9 changes: 8 additions & 1 deletion fiocruz/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,11 @@ def create(self, validated_data):
)
user.set_password(validated_data['password'])
user.save()
return user
return user

class ProcessPlasmodockingSerializer(serializers.ModelSerializer):
username = serializers.CharField(write_only=True)

class Meta:
model = Process_Plasmodocking
fields = '__all__'
18 changes: 2 additions & 16 deletions fiocruz/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,64 +123,50 @@ def plasmodocking_CR(username, id_processo, email_user):
arquivos_vs = Process_Plasmodocking.objects.get(id=id_processo)
arquivos_vs.status = "processando"
arquivos_vs.save()

#---------------------------------------------------------------------
# criar pastas do usuario
dir_path = os.path.join(settings.MEDIA_ROOT, "plasmodocking", f"user_{username}", arquivos_vs.nome)
diretorio_macromoleculas,diretorio_dlgs,diretorio_gbests,diretorio_lig_split,diretorio_ligantes_pdbqt = criar_diretorios(username, arquivos_vs.nome)

#---------------------------------------------------------------------
#preparação ligante
preparar_ligantes(arquivos_vs,diretorio_lig_split,diretorio_ligantes_pdbqt)
ligantes_pdbqt = listar_arquivos(diretorio_ligantes_pdbqt)

#---------------------------------------------------------------------
#execução do AutodockGPU
if arquivos_vs.type == 'falciparum' :
macromoleculas = Macromoleculas_virtaulS.objects.all()

print("Macromoleculas Falciparum com redocking")
else:
macromoleculas = Macromoleculas_Vivax_CR.objects.all()

print("Macromoleculas Vivax com redocking")

data, tabela_final = [], []

with tqdm(total=len(macromoleculas), desc=f'Plasmodocking usuario {username} processo {arquivos_vs.nome}') as pbar:

for macromolecula in macromoleculas:
print("Macromolecula: "+macromolecula.rec)
receptor_data, data_data = preparar_dados_receptor(macromolecula, ligantes_pdbqt, diretorio_dlgs,diretorio_ligantes_pdbqt,diretorio_macromoleculas,username,arquivos_vs.nome,arquivos_vs.type)
receptor_data, data_data = preparar_dados_receptor(macromolecula, ligantes_pdbqt, diretorio_dlgs,diretorio_ligantes_pdbqt,
diretorio_macromoleculas,username,arquivos_vs.nome,arquivos_vs.type)
data.append(receptor_data)
tabela_final.extend(data_data)
# Atualize a barra de progresso
pbar.update(1)

#fim dos 2 for ligante e receptor
remover_arquivos_xml(diretorio_dlgs, "*.xml")
json_data = json.dumps(data, indent=4)

# Especifique o caminho e nome do arquivo onde você deseja salvar o JSON
file_path = os.path.join(settings.MEDIA_ROOT, "plasmodocking", f"user_{username}", arquivos_vs.nome,"dados.json")

with open(file_path, 'w') as json_file:
json_file.write(json_data)

arquivos_vs.status = "concluido"
arquivos_vs.resultado_final = json_data
arquivos_vs.save()

file_path = os.path.join(settings.MEDIA_ROOT, "plasmodocking", f"user_{username}", arquivos_vs.nome)
dfdf = pd.DataFrame(tabela_final)
csv_file_path = os.path.join(file_path, 'dadostab.csv')
dfdf.to_csv(csv_file_path, sep=';', index=False)

#----------------zip file---------------
dir_path = os.path.join(settings.MEDIA_ROOT, "plasmodocking", f"user_{username}")
command = ["zip", "-r", arquivos_vs.nome+"/"+arquivos_vs.nome+".zip", arquivos_vs.nome]
executar_comando(command, dir_path)

##enviar_email.delay(username,arquivos_vs.nome,email_user)
return "task concluida com sucesso"

Expand Down
1 change: 0 additions & 1 deletion fiocruz/templates/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
<img src="https://www.infoescola.com/wp-content/uploads/2020/04/Fiocruz.jpg" alt="Imagem 2" />
<img src=`https://avatars.githubusercontent.com/u/46599724?s=48&v=4` alt="Imagem 3" />
<img src="https://www.rondonia.fiocruz.br/wp-content/uploads/2022/01/MARCA-PAD-01-1-1024x359.png" alt="Imagem 4" />

</div>
</body>
</html>
58 changes: 56 additions & 2 deletions fiocruz/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
from .models import Process_Plasmodocking, Macromoleculas_virtaulS, UserCustom, Macro_Prepare, Macromoleculas_Sem_Redocking
from rest_framework import viewsets, generics
from django.http import FileResponse, HttpResponse, JsonResponse
from .serializers import VS_Serializer, UserCustomSerializer
from .serializers import ProcessPlasmodockingSerializer, VS_Serializer, UserCustomSerializer
from .tasks import plasmodocking_SR, prepare_macro_SemRedocking, prepare_macro_ComRedocking,plasmodocking_CR
from django.conf import settings
from rest_framework.views import APIView
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.response import Response
from rest_framework import status
from django.shortcuts import render

from rest_framework.decorators import action
from .util import (
textfld,
)
Expand Down Expand Up @@ -322,3 +322,57 @@ def view3d(request, username, nome_process, receptor_name, ligante_code):
'ligante_data': ligante_data
}
return render(request, 'view3d.html', context)


class ProcessPlasmodockingViewSet(viewsets.ModelViewSet):
queryset = Process_Plasmodocking.objects.all()
serializer_class = ProcessPlasmodockingSerializer

@action(detail=False, methods=['get'], url_path='by-user')
def by_user(self, request):
username = request.query_params.get('username', None)
if username is not None:
user = UserCustom.objects.get(username=username)
queryset = Process_Plasmodocking.objects.filter(user=user)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response({"detail": "Parâmetro 'username' é necessário."}, status=status.HTTP_400_BAD_REQUEST)

def create(self, request, *args, **kwargs):
data = request.data
username = data.get('username')
nome = data.get('nome')
arquivo = data.get('ligante')
type = data.get('type')
redocking = data.get('redocking', True) # Será passado como booleano

try:
redocking = bool(redocking)
except ValueError:
return Response({'message': 'Valor inválido para redocking.'}, status=status.HTTP_400_BAD_REQUEST)

try:
user = UserCustom.objects.get(username=username)
except UserCustom.DoesNotExist:
return Response({'message': 'Usuário não encontrado'}, status=status.HTTP_404_NOT_FOUND)

if Process_Plasmodocking.objects.filter(user=user, nome=nome).exists():
return Response({'message': 'Um processo com esse nome já existe para este usuário'}, status=status.HTTP_400_BAD_REQUEST)

email_user = user.email

arquivos_vs = Process_Plasmodocking(nome=nome, ligante=arquivo, user=user, type=type, redocking=redocking, status="em fila")
arquivos_vs.save()

if type == 'falciparum' and redocking:
plasmodocking_CR.delay(username, arquivos_vs.id, email_user)
elif type == 'falciparum' and not redocking:
plasmodocking_SR.delay(username, arquivos_vs.id, email_user)
elif type == 'vivax' and redocking:
plasmodocking_CR.delay(username, arquivos_vs.id, email_user)
elif type == 'vivax' and not redocking:
plasmodocking_SR.delay(username, arquivos_vs.id, email_user)

serializer = self.get_serializer(arquivos_vs)
return Response(serializer.data, status=status.HTTP_201_CREATED)

0 comments on commit ca22d63

Please sign in to comment.