示例#1
0
class Index(TemplateView):
    template_name = 'zsearch/index.html'

    # Le serveur orthanc
    orthanc_server = get_orthanc_server()
    o = ORTC(
        orthanc_server['host'],
        orthanc_server['port'],
        orthanc_server['user'],
        orthanc_server['password'],
    )

    def get(self, request, *args, **kwargs):
        return self.render_to_response({
            'patientform':
            PatientForm(prefix='patientform_pre'),
            'studyform':
            StudyForm(prefix='studyform_pre')
        })

    # Si c'est POST alors on fait des trucs
    def post(self, request, *args, **kwargs):

        patientform = _get_form(request, PatientForm, 'patientform_pre')
        studyform = _get_form(request, StudyForm, 'studyform_pre')

        return self.render_to_response({
            'patientform': patientform,
            'studyform': studyform
        })
示例#2
0
class SerieDownload(LoginRequiredMixin, TemplateView):

    template_name = 'view/serie_download.html'

    # Le serveur orthanc
    orthanc_server = get_orthanc_server()
    o = ORTC(orthanc_server['host'],
             orthanc_server['port'],
             orthanc_server['user'],
             orthanc_server['password'],
    )
    
    # Ajout les infos au contexte
    def get_context_data(self, **kwargs):
        
        # Appel de l'implémentation de base pour obtenir un contexte                                
        context = super().get_context_data(**kwargs)

        # Authentification
        if self.request.user.is_authenticated:
            django_user = User.objects.get(username=self.request.user.username)
            context['django_user'] = django_user
        else:
            context['django_user'] = None

        # Récupère la série et enrichit le contexte
        if 'serie_id' in self.kwargs:
            serie_id = self.kwargs['serie_id']
            serie = self.o.GetSerie(serie_id)
        else:
            serie_id = None
            serie = None
        context['serie'] = serie        

        # Récupère l'étude et enrichit le contexte
        if serie:
            study = self.o.GetStudy(serie['ParentStudy'])
        else:
            study = None
        context['study'] = study

        # Récupère le patient et enrichit le contexte
        if study:
            context['patient'] = self.o.GetPatient(study['ParentPatient'])
        else:
            context['patient'] = None

        # Récupère la provenance de l'url et enrichit le contexte
        if 'ref' in self.kwargs:
            context['ref'] = self.kwargs['ref']
        else:
            context['ref'] = None

        # Télécharge l'étude
        if serie_id is not None:
            self.o.DownloadSerie(serie_id, django_user)
        
        # Retourne le contexte
        return context
示例#3
0
class Patient(ListView):

    template_name = 'view/patient.html'
    context_object_name = 'studies'

    # Le serveur orthanc
    orthanc_server = get_orthanc_server()
    o = ORTC(orthanc_server['host'],
             orthanc_server['port'],
             orthanc_server['user'],
             orthanc_server['password'],
    )
    
    # Surcharge queryset parce que l'on ne positionne pas de modèle
    # et que l'on veut juste bénéficier des facilités de gestion et d'affichage
    # offertes par la classe ListView sur un jeu de données
    # issues non pas de la base mais de requêtes REST
    def get_queryset(self):

        # Récupère les études
        if 'patient_id' in self.kwargs:
            studies = self.o.GetPatientStudies(self.kwargs['patient_id'])
        else:
            studies = None

        # Pagination si l'on trouve des études
        if studies:
            self.paginate_by = params['paginate_by']
        
        # Retourne ses études
        return studies

    # Enrichit le contexte
    def get_context_data(self, **kwargs):
        
        # Appel de l'implémentation de base pour obtenir un contexte                                
        context = super().get_context_data(**kwargs)

        # Récupère le patient et enrichit le contexte
        if 'patient_id' in self.kwargs:
            context['patient'] = self.o.GetPatient(self.kwargs['patient_id'])
        else:
            context['patient'] = None

        # Récupère la provenance de l'url et enrichit le contexte
        if 'ref' in self.kwargs:
            context['ref'] = self.kwargs['ref']
        else:
            context['ref'] = None            
        
        # Retourne le contexte
        return context
示例#4
0
class Serie(DetailView):

    template_name = 'view/serie.html'
    context_object_name = 'serie'

    # Le serveur orthanc
    orthanc_server = get_orthanc_server()
    o = ORTC(orthanc_server['host'],
             orthanc_server['port'],
             orthanc_server['user'],
             orthanc_server['password'],
    )
    
    # Surcharge queryset parce que l'on ne positionne pas de modèle
    # et que l'on veut juste bénéficier des facilités de gestion et d'affichage
    # offertes par la classe ListView sur un jeu de données
    # issues non pas de la base mais de requêtes REST
    def get_queryset(self):

        # La série
        serie = None

        # Retourne la série
        return serie

    # Ajout le détail du patient au contexte
    def get_context_data(self, **kwargs):
        
        # Appel de l'implémentation de base pour obtenir un contexte                                
        context = super().get_context_data(**kwargs)

        # Récupère l'étude et enrichit le contexte
        if 'study_id' in self.kwargs:
            study = self.o.GetStudy(self.kwargs['study_id'])
        else:
            study = None
        context['study'] = study        

        # Récupère le patient et enrichit le contexte
        if study:
            context['patient'] = self.o.GetPatient(study['ParentPatient'])
        else:
            context['patient'] = None

        # Récupère la provenance de l'url et enrichit le contexte
        if 'ref' in self.kwargs:
            context['ref'] = self.kwargs['ref']
        else:
            context['ref'] = None
        
        # Retourne le contexte
        return context
示例#5
0
def index(request):

    stats = None
    
    # Récupère les statistiques
    orthanc_server = get_orthanc_server()
    o = ORTC(orthanc_server['host'],
             orthanc_server['port'],
             orthanc_server['user'],
             orthanc_server['password'],
    )
    stats = o.GetStatistics()

    return render(request, 'zstats/index.html', {'orthanc_name': orthanc_server['name'], 'stats': stats,})
示例#6
0
class Studies(ListView):

    template_name = 'view/studies.html'
    context_object_name = 'studies'
    paginate_by = params['paginate_by']

    orthanc_server = get_orthanc_server()
    o = ORTC(
        orthanc_server['host'],
        orthanc_server['port'],
        orthanc_server['user'],
        orthanc_server['password'],
    )

    # Surcharge queryset parce que l'on ne positionne pas de modèle
    # et que l'on veut juste bénéficier des facilités de gestion et d'affichage
    # offertes par la classe ListView sur un jeu de données
    # issues non pas de la base mais de requêtes REST
    def get_queryset(self):

        # Appel de l'implémentation de base pour obtenir un contexte
        request = self.request

        # Récupère les études qui correspondent à la recherche
        if 'studies' not in request.session:
            studies = None
        else:
            studies = request.session['studies']

        # Retourne les études
        return studies

    # Enrichit le contexte
    def get_context_data(self, **kwargs):

        # Appel de l'implémentation de base pour obtenir un contexte
        context = super().get_context_data(**kwargs)

        # Récupère la provenance de l'url
        if 'ref' in self.kwargs:
            context['ref'] = self.kwargs['ref']
        else:
            context['ref'] = None

        # Retourne le contexte
        return context

    # Si c'est POST alors on fait des trucs
    def post(self, request, *args, **kwargs):

        studyform = _get_form(request, StudyForm, 'studyform_pre')

        if studyform.is_bound and studyform.is_valid():
            # Process studyform and render response
            print(studyform.cleaned_data)

            # Lance la recherche
            # Ce qui aura pour effet de positionner le payload
            self.Search(studyform.cleaned_data)

            # Récupère le contexte
            context = super().get_context_data(**kwargs)

            # Positionne la provenance de l'url
            context['ref'] = 'search'

            # Rendu de la page
            return self.render_to_response(context)
        else:
            print('oops')

    # La recherche proprement dite
    def Search(self, cleaned_data):

        # Pour le payload REST
        payload = {}

        # Quel tag est cherché ?
        if cleaned_data['study_tag'] == 'REQPD':
            study_tag = 'RequestedProcedureDescription'
        elif cleaned_data['study_tag'] == 'INAME':
            study_tag = 'InstitutionName'

        # Construction de l'expression de recherche
        query_expression = 'oops'
        if cleaned_data['search_scope'] == 'STARTS':
            query_expression = cleaned_data['study_search_text'] + '*'
        elif cleaned_data['search_scope'] == 'CONTAINS':
            query_expression = '*' + cleaned_data['study_search_text'] + '*'

        # Construit le payload
        payload['Level'] = 'Study'
        payload['Expand'] = True
        payload['Query'] = {}
        payload['Query'][study_tag] = query_expression

        print(payload)

        # Récupère les études
        studies = self.o.Search(payload)

        # On met le payload dans la session
        # Ce qui servira pour la pagination par exemple
        request = self.request
        request.session['studies'] = studies

        # Hyper important
        self.queryset = studies
        self.object_list = self.queryset

        return studies