-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #7 from danielfromearth/develop
Update main
- Loading branch information
Showing
16 changed files
with
539 additions
and
228 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
[flake8] | ||
ignore = E501, E302 | ||
exclude = | ||
# No need to traverse our git directory | ||
.git, | ||
# There's no value in checking cache directories | ||
__pycache__, | ||
# The conf file is mostly autogenerated, ignore it | ||
docs/source/conf.py, | ||
# This contains our built documentation | ||
build, | ||
max-complexity = 12 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
name: Lint and Test | ||
|
||
# Controls when the workflow will run | ||
on: | ||
# Triggers the workflow on push events | ||
push: | ||
branches: [ develop, release/**, main, feature/**, issue/**, issues/** ] | ||
|
||
# Allows you to run this workflow manually from the Actions tab | ||
workflow_dispatch: | ||
|
||
jobs: | ||
build-linux: | ||
name: Lint and Test | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.10' | ||
|
||
- name: Install Poetry | ||
uses: abatilo/[email protected] | ||
with: | ||
poetry-version: 1.3.2 | ||
|
||
- name: Get version | ||
id: get-version | ||
run: | | ||
echo "current_version=$(poetry version | awk '{print $2}')" >> $GITHUB_OUTPUT | ||
echo "pyproject_name=$(poetry version | awk '{print $1}')" >> $GITHUB_ENV | ||
- name: Bump pre-alpha version | ||
# If triggered by push to a feature branch | ||
if: | | ||
${{ startsWith(github.ref, 'refs/heads/issue') }} || | ||
${{ startsWith(github.ref, 'refs/heads/dependabot/') }} || | ||
${{ startsWith(github.ref, 'refs/heads/feature/') }} | ||
run: | | ||
new_ver="${{ steps.get-version.outputs.current_version }}+$(git rev-parse --short ${GITHUB_SHA})" | ||
poetry version $new_ver | ||
echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV | ||
- name: Bump alpha version | ||
# If triggered by push to the develop branch | ||
if: ${{ github.ref == 'refs/heads/develop' }} | ||
run: | | ||
poetry version prerelease | ||
echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV | ||
echo "venue=sit" >> $GITHUB_ENV | ||
- name: Bump rc version | ||
# If triggered by push to a release branch | ||
if: ${{ startsWith(github.ref, 'refs/heads/release/') }} | ||
env: | ||
# True if the version already has a 'rc' pre-release identifier | ||
BUMP_RC: ${{ contains(steps.get-version.outputs.current_version, 'rc') }} | ||
run: | | ||
if [ "$BUMP_RC" = true ]; then | ||
poetry version prerelease | ||
else | ||
poetry version ${GITHUB_REF#refs/heads/release/}rc1 | ||
fi | ||
echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV | ||
echo "venue=uat" >> $GITHUB_ENV | ||
- name: Release version | ||
# If triggered by push to the main branch | ||
if: ${{ startsWith(github.ref, 'refs/heads/main') }} | ||
env: | ||
CURRENT_VERSION: ${{ steps.get-version.outputs.current_version }} | ||
# Remove rc* from end of version string | ||
# The ${string%%substring} syntax below deletes the longest match of $substring from back of $string. | ||
run: | | ||
poetry version ${CURRENT_VERSION%%rc*} | ||
echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV | ||
echo "venue=ops" >> $GITHUB_ENV | ||
- name: Install bumblebee | ||
run: poetry install | ||
|
||
- name: Lint | ||
run: | | ||
poetry run pylint concatenator | ||
poetry run flake8 concatenator | ||
- name: Test with pytest | ||
run: | | ||
poetry run pytest | ||
# - name: Commit Version Bump | ||
# # If building develop, a release branch, or main then we commit the version bump back to the repo | ||
# if: | | ||
# github.ref == 'refs/heads/develop' || | ||
# github.ref == 'refs/heads/main' || | ||
# startsWith(github.ref, 'refs/heads/release') | ||
# run: | | ||
# git config --global user.name 'bumblebee bot' | ||
# git config --global user.email '[email protected]' | ||
# git commit -am "/version ${{ env.software_version }}" | ||
# git push | ||
# | ||
# - name: Push Tag | ||
# if: | | ||
# github.ref == 'refs/heads/develop' || | ||
# github.ref == 'refs/heads/main' || | ||
# startsWith(github.ref, 'refs/heads/release') | ||
# run: | | ||
# git config user.name "${GITHUB_ACTOR}" | ||
# git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" | ||
# git tag -a "${{ env.software_version }}" -m "Version ${{ env.software_version }}" | ||
# git push origin "${{ env.software_version }}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
name: Receive PR | ||
|
||
# read-only repo token | ||
# no access to secrets | ||
on: | ||
pull_request: | ||
# Sequence of patterns matched against refs/heads | ||
branches: | ||
- feature/** | ||
- issue/** | ||
- issues/** | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.10' | ||
|
||
- name: Install Poetry | ||
uses: abatilo/[email protected] | ||
with: | ||
poetry-version: 1.3.2 | ||
|
||
- name: Install bumblebee | ||
run: poetry install | ||
|
||
- name: Lint | ||
run: | | ||
poetry run pylint concatenator | ||
poetry run flake8 concatenator | ||
- name: Test with pytest | ||
run: | | ||
poetry run pytest |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
"""Convenience variables used across the package.""" | ||
|
||
GROUP_DELIM = '__' | ||
COORD_DELIM = " " |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
""" | ||
attribute_handling.py | ||
Functions for converting "coordinates" in netCDF variable attributes | ||
between paths that reference a group hierarchy and flattened paths. | ||
""" | ||
import re | ||
|
||
import netCDF4 | ||
|
||
from concatenator import COORD_DELIM, GROUP_DELIM | ||
|
||
|
||
def regroup_coordinate_attribute(attribute_string: str) -> str: | ||
""" | ||
Examples | ||
-------- | ||
>>> coord_att = "__Time_and_Position__time __Time_and_Position__instrument_fov_latitude __Time_and_Position__instrument_fov_longitude" | ||
>>> _flatten_coordinate_attribute(coord_att) | ||
Time_and_Position/time Time_and_Position/instrument_fov_latitude Time_and_Position/instrument_fov_longitude | ||
Parameters | ||
---------- | ||
attribute_string : str | ||
Returns | ||
------- | ||
str | ||
""" | ||
# Use the separator that's in the attribute string only if all separators in the string are the same. | ||
# Otherwise, we will use our own default separator. | ||
whitespaces = re.findall(r'\s+', attribute_string) | ||
if len(set(whitespaces)) <= 1: | ||
new_sep = whitespaces[0] | ||
else: | ||
new_sep = COORD_DELIM | ||
|
||
return new_sep.join( | ||
'/'.join(c.split(GROUP_DELIM))[1:] | ||
for c | ||
in attribute_string.split() # split on any whitespace | ||
) | ||
|
||
|
||
def flatten_coordinate_attribute_paths(dataset: netCDF4.Dataset, | ||
var: netCDF4.Variable, | ||
variable_name: str) -> None: | ||
"""Flatten the paths of variables referenced in the coordinates attribute.""" | ||
if 'coordinates' in var.ncattrs(): | ||
coord_att = var.getncattr('coordinates') | ||
|
||
new_coord_att = _flatten_coordinate_attribute(coord_att) | ||
|
||
dataset.variables[variable_name].setncattr('coordinates', new_coord_att) | ||
|
||
|
||
def _flatten_coordinate_attribute(attribute_string: str) -> str: | ||
"""Converts attributes that specify group membership via "/" to use new group delimiter, even for the root level. | ||
Examples | ||
-------- | ||
>>> coord_att = "Time_and_Position/time Time_and_Position/instrument_fov_latitude Time_and_Position/instrument_fov_longitude" | ||
>>> _flatten_coordinate_attribute(coord_att) | ||
__Time_and_Position__time __Time_and_Position__instrument_fov_latitude __Time_and_Position__instrument_fov_longitude | ||
Parameters | ||
---------- | ||
attribute_string : str | ||
Returns | ||
------- | ||
str | ||
""" | ||
# Use the separator that's in the attribute string only if all separators in the string are the same. | ||
# Otherwise, we will use our own default separator. | ||
whitespaces = re.findall(r'\s+', attribute_string) | ||
if len(set(whitespaces)) <= 1: | ||
new_sep = whitespaces[0] | ||
else: | ||
new_sep = COORD_DELIM | ||
|
||
# A new string is constructed. | ||
return new_sep.join( | ||
f'{GROUP_DELIM}{c.replace("/", GROUP_DELIM)}' | ||
for c | ||
in attribute_string.split() # split on any whitespace | ||
) |
Oops, something went wrong.