Skip to content

Commit 88bfd1b

Browse files
d33bsMattsonCam
andauthored
Initialize demo with Isilon storage solution (#1)
* initialize files for work * linting * observe performance * linting and docs * changes based on feedback Co-Authored-By: Cameron Mattson <[email protected]> --------- Co-authored-by: Cameron Mattson <[email protected]>
1 parent af87a1b commit 88bfd1b

12 files changed

+3302
-3
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,6 @@ cython_debug/
169169

170170
# PyPI configuration file
171171
.pypirc
172+
173+
# data ignores
174+
src/demo/data/

.pre-commit-config.yaml

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# See https://pre-commit.com for more information
2+
# See https://pre-commit.com/hooks.html for more hooks
3+
default_language_version:
4+
python: python3.11
5+
repos:
6+
- repo: https://github.com/pre-commit/pre-commit-hooks
7+
rev: v5.0.0
8+
hooks:
9+
- id: trailing-whitespace
10+
- id: end-of-file-fixer
11+
- id: check-yaml
12+
- id: check-added-large-files
13+
- id: detect-private-key
14+
- repo: https://github.com/tox-dev/pyproject-fmt
15+
rev: "v2.5.0"
16+
hooks:
17+
- id: pyproject-fmt
18+
- repo: https://github.com/citation-file-format/cffconvert
19+
rev: 5295f87c0e261da61a7b919fc754e3a77edd98a7
20+
hooks:
21+
- id: validate-cff
22+
- repo: https://github.com/codespell-project/codespell
23+
rev: v2.3.0
24+
hooks:
25+
- id: codespell
26+
exclude: |
27+
(?x)^(
28+
.*\.ipynb |
29+
justfile |
30+
.*\.cff
31+
)$
32+
- repo: https://github.com/executablebooks/mdformat
33+
rev: 0.7.21
34+
hooks:
35+
- id: mdformat
36+
additional_dependencies:
37+
- mdformat-gfm
38+
- repo: https://github.com/adrienverge/yamllint
39+
rev: v1.35.1
40+
hooks:
41+
- id: yamllint
42+
exclude: pre-commit-config.yaml
43+
- repo: https://github.com/astral-sh/ruff-pre-commit
44+
rev: "v0.9.2"
45+
hooks:
46+
- id: ruff-format
47+
- id: ruff
48+
- repo: https://github.com/rhysd/actionlint
49+
rev: v1.7.6
50+
hooks:
51+
- id: actionlint
52+
- repo: https://gitlab.com/vojko.pribudic.foss/pre-commit-update
53+
rev: v0.6.0
54+
hooks:
55+
- id: pre-commit-update
56+
args: ["--keep", "mdformat", "--keep", "pre-commit-update", "--keep", "cffconvert"]

CITATION.cff

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# This CITATION.cff file was generated with cffinit.
2+
# Visit https://bit.ly/cffinit to generate yours today!
3+
---
4+
cff-version: 1.2.0
5+
title: demo-uca-isilon-python
6+
message: >-
7+
If you use this software, please cite it using the
8+
metadata from this file.s
9+
type: software
10+
authors:
11+
- given-names: Dave
12+
family-names: Bunten
13+
orcid: 'https://orcid.org/0000-0001-6041-3665'
14+
repository-code: 'https://github.com/WayScience/demo-uca-isilon-python'
15+
abstract: >-
16+
Demonstrating capabilities with the University of Colorado Anschutz
17+
(UCA) Isilon storage solution using Python.
18+
keywords:
19+
- python
20+
- storage
21+
- isilon
22+
- demonstration
23+
license: BSD-3-Clause
24+
references:
25+
- title: >-
26+
Plate 2 (Cell Painting images from Plate 2 for NF1_cellpainting_data project)
27+
type: data
28+
url: https://figshare.com/articles/dataset/Plate_2/22233700
29+
notes: >-
30+
Image data for related NF1_cellpainting_data parquet sqlite.
31+
authors:
32+
- family-names: Tomkinson
33+
given-names: Jenna
34+
- family-names: Mattson-Hoss
35+
given-names: Michelle
36+
- family-names: Sarnoff
37+
given-names: Herb
38+
- family-names: Way
39+
given-names: Gregory
40+
date-published: "2023-04-12"
41+
identifiers:
42+
- type: doi
43+
value: 10.6084/m9.figshare.22233700.v4

CODE_OF_CONDUCT.md

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socioeconomic status,
9+
nationality, personal appearance, race, caste, color, religion, or sexual
10+
identity and orientation.
11+
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
14+
15+
## Our Standards
16+
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
19+
20+
- Demonstrating empathy and kindness toward other people
21+
- Being respectful of differing opinions, viewpoints, and experiences
22+
- Giving and gracefully accepting constructive feedback
23+
- Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
- Focusing on what is best not just for us as individuals, but for the overall
26+
community
27+
28+
Examples of unacceptable behavior include:
29+
30+
- The use of sexualized language or imagery, and sexual attention or advances of
31+
any kind
32+
- Trolling, insulting or derogatory comments, and personal or political attacks
33+
- Public or private harassment
34+
- Publishing others' private information, such as a physical or email address,
35+
without their explicit permission
36+
- Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement Responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
Community leaders have the right and responsibility to remove, edit, or reject
47+
comments, commits, code, wiki edits, issues, and other contributions that are
48+
not aligned to this Code of Conduct, and will communicate reasons for moderation
49+
decisions when appropriate.
50+
51+
## Scope
52+
53+
This Code of Conduct applies within all community spaces, and also applies when
54+
an individual is officially representing the community in public spaces.
55+
Examples of representing our community include using an official email address,
56+
posting via an official social media account, or acting as an appointed
57+
representative at an online or offline event.
58+
59+
## Enforcement
60+
61+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
62+
reported to community leaders responsible for enforcement.
63+
Please reach out to the maintainers of this repository by using their GitHub profile email address contact information to privately notify us of any incidents of this nature.
64+
All complaints will be reviewed and investigated promptly and fairly.
65+
66+
All community leaders are obligated to respect the privacy and security of the
67+
reporter of any incident.
68+
69+
## Enforcement Guidelines
70+
71+
Community leaders will follow these Community Impact Guidelines in determining
72+
the consequences for any action they deem in violation of this Code of Conduct:
73+
74+
### 1. Correction
75+
76+
**Community Impact**: Use of inappropriate language or other behavior deemed
77+
unprofessional or unwelcome in the community.
78+
79+
**Consequence**: A private, written warning from community leaders, providing
80+
clarity around the nature of the violation and an explanation of why the
81+
behavior was inappropriate. A public apology may be requested.
82+
83+
### 2. Warning
84+
85+
**Community Impact**: A violation through a single incident or series of
86+
actions.
87+
88+
**Consequence**: A warning with consequences for continued behavior. No
89+
interaction with the people involved, including unsolicited interaction with
90+
those enforcing the Code of Conduct, for a specified period of time. This
91+
includes avoiding interactions in community spaces as well as external channels
92+
like social media. Violating these terms may lead to a temporary or permanent
93+
ban.
94+
95+
### 3. Temporary Ban
96+
97+
**Community Impact**: A serious violation of community standards, including
98+
sustained inappropriate behavior.
99+
100+
**Consequence**: A temporary ban from any sort of interaction or public
101+
communication with the community for a specified period of time. No public or
102+
private interaction with the people involved, including unsolicited interaction
103+
with those enforcing the Code of Conduct, is allowed during this period.
104+
Violating these terms may lead to a permanent ban.
105+
106+
### 4. Permanent Ban
107+
108+
**Community Impact**: Demonstrating a pattern of violation of community
109+
standards, including sustained inappropriate behavior, harassment of an
110+
individual, or aggression toward or disparagement of classes of individuals.
111+
112+
**Consequence**: A permanent ban from any sort of public interaction within the
113+
community.
114+
115+
## Attribution
116+
117+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118+
version 2.1, available at
119+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
120+
121+
Community Impact Guidelines were inspired by
122+
[Mozilla's code of conduct enforcement ladder][mozilla coc].
123+
124+
For answers to common questions about this code of conduct, see the FAQ at
125+
[https://www.contributor-covenant.org/faq][faq]. Translations are available at
126+
[https://www.contributor-covenant.org/translations][translations].
127+
128+
[faq]: https://www.contributor-covenant.org/faq
129+
[homepage]: https://www.contributor-covenant.org
130+
[mozilla coc]: https://github.com/mozilla/diversity
131+
[translations]: https://www.contributor-covenant.org/translations
132+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html

LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
BSD 3-Clause License
22

3-
Copyright (c) 2025, The Way Lab
3+
Copyright (c) 2024, The Way Lab
44

55
Redistribution and use in source and binary forms, with or without
66
modification, are permitted provided that the following conditions are met:

README.md

+31-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,31 @@
1-
# demo-uca-isilon-python
2-
Demonstrating capabilities with the University of Colorado Anschutz (UCA) Isilon storage solution using Python.
1+
# University of Colorado Anschutz Isilon with Python Demonstration
2+
3+
This repository demonstrates using the [University of Colorado Anschutz Isilon](https://www.cuanschutz.edu/offices/office-of-information-technology/tools-services/storage-servers-and-backups) storage solution with Python.
4+
We seek to understand how this works and how it performs more generally.
5+
6+
Our approach here focuses on mounting the Isilon path to a local directory on a machine, then performing work using that mounted directory.
7+
8+
## Development
9+
10+
1. [Install `uv`](https://docs.astral.sh/uv/getting-started/installation/).
11+
1. [Install `just`](https://github.com/casey/just?tab=readme-ov-file#installation).
12+
1. Install package locally (e.g. `uv pip install -e "."`).
13+
1. Run various other tasks using [just](https://github.com/casey/just) (e.g. `just tiff_to_omezarr`)
14+
15+
## Tasks
16+
17+
[Just](https://github.com/casey/just) tasks may be run to help generate results without needing to run individual files or perform additional discovery within this project.
18+
You can show all available tasks with `just` (which lists all tasks).
19+
20+
Examples:
21+
22+
```bash
23+
just run-isilon-demo
24+
```
25+
26+
## Isilon notes
27+
28+
- Isilon requires you to have access through the UCA VPN or local campus network.
29+
- Isilon may be mounted on MacOS using `mount_smbfs`.
30+
- Using a mount path without a username or password specified will attempt to mount the directory using your MacOS user which is currently logged in (which may differ from your UCA account credentials).
31+
- Isilon may be mounted on Linux using `mount -t cifs`.

justfile

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# justfile for common project commands
2+
# see here for more information: https://github.com/casey/just
3+
4+
# find system default shell
5+
hashbang := if os() == 'macos' {
6+
'/usr/bin/env zsh'
7+
} else {
8+
'/usr/bin/env bash'
9+
}
10+
11+
# cifs / samba command based on operating system
12+
cifs_or_samba_mount_command := if os() == 'macos' {
13+
'mount_smbfs //data.ucdenver.pvt/dept/SOM/SOMDean/Testing/DBMITest ~/mnt/isilon'
14+
} else {
15+
'sudo mount -t cifs //data.ucdenver.pvt/dept/SOM/SOMDean/Testing/DBMITest -o username='
16+
}
17+
18+
# show a list of just commands for this project
19+
default:
20+
@just --list
21+
22+
# install the project for development purposes
23+
@setup:
24+
#!{{hashbang}}
25+
uv pip install '.'
26+
27+
# mount a uca cifs / samba
28+
@mount-isilon:
29+
#!{{hashbang}}
30+
if mount | grep "/mnt/isilon"; then
31+
echo "The isilon fileshare is already mounted."
32+
else
33+
# create a mount destination
34+
mkdir -p ~/mnt/isilon
35+
# run the mount command
36+
{{cifs_or_samba_mount_command}}
37+
fi
38+
39+
# run isilon demo
40+
@run-isilon-demo:
41+
#!{{hashbang}}
42+
43+
# mount isilon
44+
just mount-isilon
45+
46+
# prepare the data
47+
uv run python src/demo/prepare_files.py
48+
49+
# run the test, storing the results in a notebook
50+
uv run papermill src/demo/demo.ipynb src/demo/demo.ipynb
51+
52+
# share a friendly message
53+
echo "Demo completed. The results are stored in src/demo/demo.ipynb."

0 commit comments

Comments
 (0)