it is new copo web after refactoring
10K+
The Collaborative OPen Omics (COPO) project is an open-source web-based platform that enables scientists to describe their research objects (e.g. raw or processed data, assemblies, reads, samples and images) using community-sanctioned metadata sets and vocabularies.
As a metadata broker, COPO encourages scientists to submit metadata that complies with the Findable, Accessible, Interoperable and Reusable (FAIR) principles. These research objects are then shared with the wider scientific community via public repositories. The COPO project is based at the Earlham Institute in Norwich, England, United Kingdom.
This repository builds on the work of the COPO GitHub repository (now archived), which laid the foundation for the current implementation.
| Category | Tools / Libraries | Purpose / Usage |
|---|---|---|
| Backend Development | Python, Django | Core application logic and web framework |
| Scripting & Automation | Python, Bash | Automation, setup scripts, and server-side utilities |
| Web framework | Django (5.x), Django REST Framework | Back-end web development, RESTful API design |
| Task queue & scheduling | Celery, Redis, aioredis | Background task processing, caching, async queues |
| Database | PostgreSQL, MongoDB | Persistent data storage and querying |
| Deployment & serving | Docker, Docker Swarm, Gunicorn, Nginx | Production-ready app serving and containerisation |
| Frontend technologies | JavaScript (server-side), jQuery | Dynamic client-side behaviour and lightweight interactivity |
| Testing & QA | pytest, Selenium, CircleCI, Django Test Framework | Automated testing and browser interaction validation |
| DevOps / CI/CD | GitHub Actions (CI/CD), Git | Version control and automated deployment pipelines |
| Data handling | Pandas, NumPy, openpyxl / XlsxWriter | Data manipulation and scientific computing |
| File storage | Django Storages, S3, MinIO, ECS (deprecated) | Cloud-based file storage and management |
| Document generation | Sphinx, ReadTheDocs | Auto-generated user documentation |
| HTML parsing / Scraping | BeautifulSoup, bs4 | HTML content parsing, web scraping |
| User authentication | django-allauth | OAuth, OpenID, and account authentication |
| Real-time features | Channels, Daphne | WebSocket support and async communication |
| Styling & forms | django-crispy-forms, crispy-bootstrap5 | Form rendering and UI styling |
The frontend uses multiple UI frameworks (Bootstrap 3, Semantic UI, Ace, DataTables, Select2, etc.). A single override stylesheet unifies their appearance.
static/copo/css/copo_modern_scheme.cssThis is a drop-in cosmetic override loaded as the last stylesheet in <head>. It does not add structural or layout styles — it re-themes every UI framework to produce one consistent look. Removing it should leave the app functional but unstyled.
What belongs here:
:root[data-theme="dark"]What does NOT belong here:
style.css or a component-specific stylesheet)Dark theme: The [data-theme="dark"] block redefines CSS variables and adds targeted overrides for elements that use hardcoded colours. When adding a new themed rule, prefer using existing --co-* variables so the dark theme inherits it automatically. Only add a [data-theme="dark"] override when a variable alone isn't sufficient.
Component buttons (Samples, Reads, Assembly, etc.) are configured in the database via the Component model and populated by the setup_profile_types management command.
Component| Field | Purpose | Example |
|---|---|---|
widget_icon | Semantic UI icon name (legacy fallback) | lab, dna, barcode |
widget_icon_class | Font Awesome class | fa fa-vial, fa fa-microscope |
material_icon | Google Material Symbols name (preferred) | labs, genetics, barcode |
widget_colour | Semantic UI colour class for the button | olive, orange, red |
button_label | Short label shown on the button | Samples, Reads, Barcoding |
The frontend (generic_handlers.js → setComponentIcon() / createComponentAnchor()) checks materialIcon first. If set, it renders a Material Symbol. Otherwise, it falls back to the Semantic UI icon (semanticIcon).
src/apps/copo_core/management/commands/setup_profile_types.pycreate_component() call with the new material_icon, widget_icon_class, or button_labelpython manage.py setup_profile_types on the target instanceThe material_icon field was added in migration 0027_add_material_icon_to_component. Instances that have not yet run setup_profile_types will have material_icon = NULL, which is safe — the frontend falls back to the Semantic UI icon. Once the command is run, Material Icons take effect.
| File | Purpose |
|---|---|
style.css | Legacy base styles — structural layout, component positioning |
*_style.css / *.css (component-specific) | Styles scoped to individual features (e.g. browse_style.css, copo_wizard.css) |
Content type
Image
Digest
sha256:8b9ea4cd1…
Size
1.1 GB
Last updated
1 day ago
docker pull copo/copo-new-web