173 lines
8.3 KiB
HTML
173 lines
8.3 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Conda Environments - {{ t.app_title }}{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container-fluid mt-4">
|
|
<!-- Header -->
|
|
<div class="row mb-4">
|
|
<div class="col-md-8">
|
|
<nav aria-label="breadcrumb">
|
|
<ol class="breadcrumb">
|
|
<li class="breadcrumb-item">
|
|
<a href="{{ url_for('dashboard') }}">
|
|
<i class="bi bi-house"></i>
|
|
</a>
|
|
</li>
|
|
<li class="breadcrumb-item">
|
|
<a href="{{ url_for('admin_users') }}">Administration</a>
|
|
</li>
|
|
<li class="breadcrumb-item active">Conda Environments</li>
|
|
</ol>
|
|
</nav>
|
|
<div class="d-flex align-items-center">
|
|
<h1 class="h3 mb-0">
|
|
<i class="bi bi-cpu text-primary"></i>
|
|
Conda Environments
|
|
</h1>
|
|
</div>
|
|
<p class="text-muted mb-0">Manage conda environments for script execution</p>
|
|
</div>
|
|
<div class="col-md-4 text-end">
|
|
{% if conda_available %}
|
|
<form method="POST" action="{{ url_for('admin_conda_refresh') }}" style="display: inline;">
|
|
<button type="submit" class="btn btn-primary">
|
|
<i class="bi bi-arrow-clockwise"></i>
|
|
Refresh Environments
|
|
</button>
|
|
</form>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Content -->
|
|
<div class="row">
|
|
<div class="col-12">
|
|
{% if not conda_available %}
|
|
<div class="alert alert-warning" role="alert">
|
|
<h4 class="alert-heading">
|
|
<i class="bi bi-exclamation-triangle"></i>
|
|
Conda Not Available
|
|
</h4>
|
|
<p>Conda is not installed or not found on this system. Please install Miniconda or Anaconda to manage Python environments.</p>
|
|
<hr>
|
|
<p class="mb-0">
|
|
<strong>Installation options:</strong><br>
|
|
• <a href="https://docs.conda.io/en/latest/miniconda.html" target="_blank">Miniconda</a> (minimal installer)<br>
|
|
• <a href="https://www.anaconda.com/products/distribution" target="_blank">Anaconda</a> (full distribution)
|
|
</p>
|
|
</div>
|
|
{% else %}
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="card-title mb-0">
|
|
<i class="bi bi-list-ul"></i>
|
|
Available Environments
|
|
<span class="badge bg-primary ms-2">{{ environments|length }}</span>
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
{% if environments %}
|
|
<div class="table-responsive">
|
|
<table class="table table-striped table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>ID</th>
|
|
<th>Environment Name</th>
|
|
<th>Python Version</th>
|
|
<th>Path</th>
|
|
<th>Status</th>
|
|
<th>Last Verified</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for env in environments %}
|
|
<tr>
|
|
<td>{{ env.id }}</td>
|
|
<td>
|
|
<strong>{{ env.name }}</strong>
|
|
{% if env.name == 'base' %}
|
|
<span class="badge bg-success ms-1">Default</span>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if env.python_version %}
|
|
<span class="badge bg-info">{{ env.python_version }}</span>
|
|
{% else %}
|
|
<span class="text-muted">Unknown</span>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
<small class="text-muted font-monospace">{{ env.path }}</small>
|
|
</td>
|
|
<td>
|
|
{% if env.is_available %}
|
|
<span class="badge bg-success">
|
|
<i class="bi bi-check-circle"></i>
|
|
Available
|
|
</span>
|
|
{% else %}
|
|
<span class="badge bg-danger">
|
|
<i class="bi bi-x-circle"></i>
|
|
Unavailable
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if env.last_verified %}
|
|
<small class="text-muted">{{ env.last_verified.strftime('%Y-%m-%d %H:%M') }}</small>
|
|
{% else %}
|
|
<small class="text-muted">Never</small>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% else %}
|
|
<div class="text-center py-4">
|
|
<i class="bi bi-inbox display-4 text-muted"></i>
|
|
<h5 class="mt-3 text-muted">No environments found</h5>
|
|
<p class="text-muted">Click "Refresh Environments" to scan for available conda environments.</p>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Environment Usage Information -->
|
|
<div class="card mt-4">
|
|
<div class="card-header">
|
|
<h5 class="card-title mb-0">
|
|
<i class="bi bi-info-circle"></i>
|
|
Environment Assignment
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<h6>How to assign environments to script groups:</h6>
|
|
<ol class="small">
|
|
<li>Environments are assigned at the script group level</li>
|
|
<li>Each script group can use a different conda environment</li>
|
|
<li>If no environment is assigned, the 'base' environment is used</li>
|
|
<li>Scripts automatically run in their assigned environment</li>
|
|
</ol>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<h6>Environment requirements:</h6>
|
|
<ul class="small">
|
|
<li>Python 3.7+ is recommended</li>
|
|
<li>Required packages should be installed in each environment</li>
|
|
<li>Environments must be accessible from the current user</li>
|
|
<li>Environment paths should not contain spaces</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %} |