Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
edbbe09
Valley updates (#1)
paysni Aug 17, 2023
bc1a8d1
Merge branch 'atlas-bi:main' into main
paysni Aug 17, 2023
4c27124
Infor connection add (#2)
paysni Aug 24, 2023
9a4cefc
Infor connection add (#3)
paysni Sep 18, 2023
6e01283
Merge remote-tracking branch 'Atlas-source/main'
paysni Sep 20, 2023
62d7af1
fix differences between this and main
paysni Sep 23, 2023
650ecff
More changes to match source
paysni Sep 23, 2023
02f5ffd
smtp fixes
paysni Sep 23, 2023
d0ba434
added Path. Didn't work without it.
paysni Sep 23, 2023
98eac66
typo in app.get
paysni Sep 23, 2023
e8621cb
Update Pyodbc and rollup versions
paysni Nov 7, 2023
22b28f8
Remove auto checkbox to take ownership (#5)
paysni Feb 13, 2024
8a2da15
Scheduler updates (#6)
paysni Mar 7, 2024
b0672cf
General Fixes (#7)
paysni Jul 24, 2024
973010d
Multiple Bug fixes and code cleanup (#8)
paysni Aug 13, 2024
4fc9198
Tasks sequence update (#9)
paysni Aug 21, 2024
9edae10
Add Office365 to the package_map for imports (#10)
paysni Aug 23, 2024
30945f7
Job hanging fix (#11)
paysni Sep 16, 2024
e0d7750
Cron schedule fix (#12)
marnye Feb 19, 2025
4004dc9
Update packages and fix DST interval (#13)
paysni Mar 25, 2025
dff6430
Merge branch 'atlas-bi:main' into main
paysni Mar 25, 2025
d07292b
Quote char fix (#14)
paysni Mar 26, 2025
c60916a
Updated the reference from i.fas to span.fas to match the prior PR.
marnye May 27, 2025
160f3cf
Merge pull request #15 from ValleyMedicalCenter/HiddenTaskParameter
marnye May 27, 2025
f2f594e
Give option to not back up files (#16)
paysni May 29, 2025
001f38a
Update destination details to not show information if file type is No…
paysni May 29, 2025
dffb17d
Smb conversions (#18)
paysni Aug 6, 2025
2986f13
Smb Connection Fixes (#19)
paysni Aug 7, 2025
2671a5c
Smb updates bug fixes 2 (#20)
paysni Aug 7, 2025
56830e2
Add Subfolders optional for SMB (#21)
paysni Aug 12, 2025
89a05b7
fix(em_smb.py): fix potential issue if connection path is None (#22)
paysni Aug 12, 2025
9662efc
Formatting fix (#23)
paysni Aug 12, 2025
ac67835
Initial Commit
echeshier Sep 4, 2025
7d4a7a4
Updating the encoding to UTF-8 not sure how it was UTF-16
echeshier Sep 4, 2025
1db2ad8
Adding save button to the top thingy
echeshier Sep 4, 2025
cbc5a3a
cleaning up buttons
echeshier Sep 4, 2025
0d7697d
Trying to center it better still
echeshier Sep 4, 2025
cd69650
buttons again
echeshier Sep 4, 2025
cd94c5e
best practices
echeshier Sep 8, 2025
2771e50
formatting
echeshier Sep 8, 2025
8e5c271
adding back the sensitive value to task.js
echeshier Sep 8, 2025
ff01877
trying another fix
echeshier Sep 8, 2025
497f3be
reverting back to an older version with just the sticky header update…
echeshier Sep 8, 2025
21f90d3
Merge pull request #24 from ValleyMedicalCenter/feature/task-edit-sav…
echeshier Sep 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ branch = True
[report]
omit =
*/confi_text.py
*/smb_fix.py
*/flask_simpleldap.py
*/seed.py
*/tests/*
Expand Down
8 changes: 0 additions & 8 deletions .eslintignore

This file was deleted.

16 changes: 0 additions & 16 deletions .eslintrc.js

This file was deleted.

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -339,3 +339,4 @@ $RECYCLE.BIN/
*.lnk

# End of https://www.toptal.com/developers/gitignore/api/node,python,macos,windows,git
Install.sh
14 changes: 5 additions & 9 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ exclude: >

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v5.0.0
hooks:
- id: pretty-format-json
args: [--autofix]
Expand All @@ -30,26 +30,22 @@ repos:
- id: check-yaml
- id: end-of-file-fixer
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
rev: 6.0.1
hooks:
- id: isort
exclude: migrations* | docs*
additional_dependencies: [toml]
- repo: https://github.com/psf/black
rev: 23.9.1
rev: 25.1.0
hooks:
- id: black
language_version: python3.9
language_version: python3.12
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: v2.10.0
rev: v2.14.0
hooks:
- id: pretty-format-toml
args: [--autofix]
- id: pretty-format-ini
args: [--autofix]
- id: pretty-format-yaml
args: [--autofix, --indent, '2']
- repo: https://github.com/Riverside-Healthcare/djLint
rev: v1.33.0
hooks:
- id: djlint-jinja
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ node_modules/*
.mypy_cache
.pytest_cache
.tox
/web/templates/sections/py_dates.*

/web/static/lib/*
!/web/static/lib/table/
Expand Down
3 changes: 2 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
"trailingComma": "all",
"bracketSpacing": true,
"arrowParens": "always",
"semi": true
"semi": true,
"plugins": ["prettier-plugin-jinja-template"]
}
2 changes: 1 addition & 1 deletion .version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.12.3
3.5.3
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# needs a DATABASE_URL and REDIS_URL to be set

# setup python
FROM python:3.11-alpine3.15 as python_install
FROM python:3.12.11-alpine3.22 as python_install

ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
Expand All @@ -22,7 +22,7 @@ RUN wget -O - https://install.python-poetry.org | python3 - \
&& poetry install --no-root --only main

# build assets
FROM python:3.11-alpine3.15 as assets
FROM python:3.12.11-alpine3.22 as assets

ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
Expand Down Expand Up @@ -51,7 +51,7 @@ RUN cp web/model.py scheduler/ && cp web/model.py runner/ \
&& flask cli reset_db && flask db upgrade && flask cli seed && flask cli seed_demo

# final app
FROM python:3.11-alpine3.15
FROM python:3.12.11-alpine3.22

ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
Expand Down
4 changes: 2 additions & 2 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module.exports = function (api) {
api.cache(true);
export default function (api) {
api.cache(false);
const presets = [['@babel/preset-env']];
const plugins = [];
return {
Expand Down
12 changes: 7 additions & 5 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"""All prod configuration set here. For dev there are overrides below."""

# pylint: disable=too-few-public-methods
# ruff: noqa: RUF012

ALLOWED_HOSTS = ["*", "localhost"]

Expand Down Expand Up @@ -244,7 +245,7 @@
"""

DEVOPS_URL = "https://dev.azure.com/orgname/"
DEVOPS_TOKEN = r"token"
DEVOPS_TOKEN = r"token" # noqa: S105

"""
Default SQL Connection Settings
Expand All @@ -260,7 +261,6 @@

SMB_USERNAME = "username"
SMB_PASSWORD = "password" # noqa: S105
SMB_SERVER_IP = "10.0.0.0"
SMB_SERVER_NAME = "servername"
SMB_DEFAULT_SHARE = "BackupShare"

Expand Down Expand Up @@ -324,6 +324,8 @@


class DemoConfig(Config):
"""Configuration for a demo."""

DEBUG = False
DEMO = True
AUTH_METHOD = "DEV"
Expand All @@ -348,8 +350,8 @@
# pylint: disable=too-few-public-methods
SQLALCHEMY_DATABASE_URI = os.environ.get(
"DATABASE_URL",
"postgresql+psycopg2://postgres@localhost/atlas_hub_scrap_test"
"postgresql+psycopg2://postgres@localhost/atlas_hub_scrap_test",

Check failure

Code scanning / SonarCloud

A secure password should be used when connecting to a database High

Add password protection to this database. See more on SonarQube Cloud
# "sqlite:///../test.sqlite",
).replace("postgres://", "postgresql://")

SQLALCHEMY_ENGINE_OPTIONS: dict = {}
Expand All @@ -371,9 +373,9 @@

# docker run -p 22:22 -d emberstack/sftp --name sftp
SFTP_SERVER_USER = "demo"
SFTP_SERVER_PASS = "demo"
SFTP_SERVER_PASS = "demo" # noqa: S105

# docker run -d --name ftpd_server -p 21:21 onekilo79/ftpd_test
# docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e FTP_USER_NAME=demo -e FTP_USER_PASS=demo -e FTP_USER_HOME=/home/demo -e "PUBLICHOST=localhost" -e "ADDED_FLAGS=-d -d" stilliard/pure-ftpd
FTP_SERVER_USER = "demo"
FTP_SERVER_PASS = "demo"
FTP_SERVER_PASS = "demo" # noqa: S105
39 changes: 39 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import globals from "globals";
import path from "node:path";
import { fileURLToPath } from "node:url";
import js from "@eslint/js";
import { FlatCompat } from "@eslint/eslintrc";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});

export default [{
ignores: [
"web/static/**/*.min.*",
"node_modules/*",
"**/.mypy_cache",
"**/.pytest_cache",
"**/.tox",
"web/static/lib/*",
"web/static/fonts/*",
"web/static/css/*",
],
}, ...compat.extends("eslint:recommended"), {
languageOptions: {
globals: {
...globals.browser,
CodeMirror: "readonly",
flatpickr: "readonly",
},

ecmaVersion: 12,
sourceType: "script",
},

rules: {},
}];
96 changes: 70 additions & 26 deletions gulpfile.mjs
Original file line number Diff line number Diff line change
@@ -1,56 +1,100 @@
import gulp from 'gulp';
import pkg from 'gulp';
const { src, dest, task, parallel,series } = pkg;
import autoprefexer from 'gulp-autoprefixer';
import * as dartSass from 'sass';
import gulpSass from 'gulp-sass';
const sass = gulpSass(dartSass);

import postcss from 'gulp-postcss';
import replace from 'gulp-replace';
import fontawesomeSubset from 'fontawesome-subset';
import {fontawesomeSubset} from 'fontawesome-subset';
import {deleteSync} from 'del';
import purgecss from 'gulp-purgecss';
import cssnano from 'gulp-cssnano';
import cssnano from 'cssnano';

gulp.task('font:inter', function() {
return gulp.src('node_modules/@fontsource/inter/**/*').pipe(replace(/\.\/files\//g, '/static/fonts/inter/files/')).pipe(gulp.dest('web/static/fonts/inter'))
task('font:inter', function() {
return src('node_modules/@fontsource-variable/inter/**/*', { removeBOM: false })
.pipe(replace(/\.\/files\//g, '/static/fonts/inter/files/'))
.pipe(dest('web/static/fonts/inter'))
});

gulp.task('font:rasa', function() {
return gulp.src('node_modules/@fontsource/rasa/**/*').pipe(replace(/\.\/files\//g, '/static/fonts/rasa/files/')).pipe(gulp.dest('web/static/fonts/rasa'))
task('font:rasa', function() {
return src('node_modules/@fontsource-variable/rasa/**/*', { removeBOM: false })
.pipe(replace(/\.\/files\//g, '/static/fonts/rasa/files/'))
.pipe(dest('web/static/fonts/rasa'))
});


gulp.task('fontawesome', function(done) {
task('fontawesome', function(done) {
deleteSync('web/static/fonts/fontawesome/webfonts', {force:true});
fontawesomeSubset.fontawesomeSubset({
fontawesomeSubset({
regular:['circle-play', 'circle-question'],
solid: ['triangle-exclamation', 'angle-down', 'circle-pause', 'right-to-bracket', 'users','eye', 'eye-slash', 'arrow-up-right-from-square', 'calendar', 'circle-stop','circle-question', 'circle-notch','circle-xmark', 'circle-check', 'angle-right', 'file-arrow-down', 'circle-info', 'magnifying-glass', 'pen-to-square', 'trash', 'delete-left', 'sort', 'terminal', 'list', 'ban', 'toggle-on', 'toggle-off', 'plus', 'rotate', 'download', 'copy', 'check']
solid: ['triangle-exclamation'
, 'angle-down'
, 'circle-pause'
, 'right-to-bracket'
, 'users'
, 'eye'
, 'eye-slash'
, 'arrow-up-right-from-square'
, 'calendar'
, 'circle-stop'
, 'circle-question'
, 'circle-notch'
, 'circle-xmark'
, 'circle-check'
, 'angle-right'
, 'file-arrow-down'
, 'circle-info'
, 'magnifying-glass'
, 'pen-to-square'
, 'trash'
, 'delete-left'
, 'sort'
, 'terminal'
, 'list'
, 'ban'
, 'toggle-on'
, 'toggle-off'
, 'plus'
, 'rotate'
, 'download'
, 'copy'
, 'check']
}, 'web/static/fonts/fontawesome/webfonts')

done();
});

gulp.task('sass', function() {
return gulp.src("web/static/assets/**/*.scss")
task('sass', function() {
const plugins = [
cssnano({
preset: ['default', { discardComments: false }],
}),
];
return src("web/static/assets/**/*.scss")
.pipe(sass().on('error', sass.logError))
.pipe(postcss(plugins))
.pipe(
purgecss({
content: ['web/static/lib/**/*.js', 'web/static/js/**/*.js', 'web/templates/**/*.html.j2', 'runner/templates/**/*.html.j2', 'scheduler/templates/**/*.html.j2'],
safelist: ['has-text-success', 'mr-3', 'has-text-warning'],
whitelist: ['has-text-success', 'mr-3', 'has-text-warning']
content: ['web/static/lib/**/*.js'
, 'web/static/js/**/*.js'
, 'web/templates/**/*.html.j2'
, 'runner/templates/**/*.html.j2'
, 'scheduler/templates/**/*.html.j2'
, 'web/web/*.py'],
safelist: [],
whitelist: []
})
)
.pipe(autoprefexer({
overrideBrowserslist: ['last 2 versions']
}))
.pipe(cssnano())
.pipe(gulp.dest('web/static/css/'))
.pipe(autoprefexer())
.pipe(dest('web/static/css/'))
});

gulp.task('build', gulp.parallel('font:inter','font:rasa', gulp.series('fontawesome','sass')));
task('build', parallel('font:inter','font:rasa', series('fontawesome','sass')));

gulp.task('watch', gulp.series('build', function (cb) {
gulp.watch('web/static/assets/**/*.scss', gulp.series('sass'));
gulp.watch('web/fonts/fontawesome/**/*.scss', gulp.series('fontawesome','sass'));
gulp.watch('web/**/*.html*', gulp.series('fontawesome', 'sass'));
task('watch', series('build', function (cb) {
watch('web/static/assets/**/*.scss', series('sass'));
watch('web/fonts/fontawesome/**/*.scss', series('fontawesome','sass'));
watch('web/**/*.html*', series('fontawesome', 'sass'));
cb();
}));
14 changes: 7 additions & 7 deletions migrations/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,29 @@
def get_engine():
try:
# this works with Flask-SQLAlchemy<3 and Alchemical
return current_app.extensions['migrate'].db.get_engine()
return current_app.extensions["migrate"].db.get_engine()
except TypeError:
# this works with Flask-SQLAlchemy>=3
return current_app.extensions['migrate'].db.engine
return current_app.extensions["migrate"].db.engine


def get_engine_url():
try:
return get_engine().url.render_as_string(hide_password=False).replace(
'%', '%%')
"%", "%%")
except AttributeError:
return str(get_engine().url).replace('%', '%%')
return str(get_engine().url).replace("%", "%%")

config.set_main_option('sqlalchemy.url', get_engine_url())
target_db = current_app.extensions['migrate'].db
config.set_main_option("sqlalchemy.url", get_engine_url())
target_db = current_app.extensions["migrate"].db

# other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.

def get_metadata():
if hasattr(target_db, 'metadatas'):
if hasattr(target_db, "metadatas"):
return target_db.metadatas[None]
return target_db.metadata

Expand Down
Loading