Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/python_actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: 3.8
python-version: '3.12'

- name: Install dependencies
run: |
python -m pip install --upgrade wheel setuptools==57 pip
python -m pip install --upgrade wheel pip
pip install -U -r requirements.txt
pip install -U -r dev-requirements.txt

Expand Down
4 changes: 4 additions & 0 deletions biblib/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from flask_discoverer import Discoverer
from flask_mail import Mail
from adsmutils import ADSFlask
from biblib.cli import register_commands

def create_app(**config):
"""
Expand Down Expand Up @@ -70,6 +71,9 @@ def create_app(**config):
methods=['GET']
)

# Register CLI commands
register_commands(app)

return app


Expand Down
38 changes: 25 additions & 13 deletions biblib/manage.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
"""
Alembic migration management file
Legacy manage.py interface - maintains backward compatibility
This file provides the same command interface without Flask-Script dependency
"""
from datetime import datetime
from dateutil.relativedelta import relativedelta
import os
import sys
import argparse
PROJECT_HOME = os.path.abspath(
os.path.join(os.path.dirname(__file__), '..'))
sys.path.append(PROJECT_HOME)
from flask import current_app
from flask_script import Manager, Command, Option
from flask_migrate import Migrate, MigrateCommand
from biblib.models import Base, User, Permissions, Library, Notes
from biblib.app import create_app
from sqlalchemy import create_engine, desc
Expand All @@ -20,7 +20,7 @@
# Load the app with the factory
app = create_app()

class DeleteStaleUsers(Command):
class DeleteStaleUsers:
"""
Compares the users that exist within the API to those within the
microservice and deletes any stale users that no longer exist. The logic
Expand Down Expand Up @@ -65,7 +65,7 @@ def run(app=app):
session.rollback()
current_app.logger.info('Deleted {} stale users: {}'.format(len(removal_list), removal_list))

class DeleteObsoleteVersionsTime(Command):
class DeleteObsoleteVersionsTime:
"""
Clears obsolete library and notes versions older than chosen time.
"""
Expand Down Expand Up @@ -101,7 +101,7 @@ def run(app=app, n_years=None):
.format(error))
session.rollback()

class DeleteObsoleteVersionsNumber(Command):
class DeleteObsoleteVersionsNumber:
"""
Limits number of revisions saved per entity to n_revisions.
"""
Expand Down Expand Up @@ -136,12 +136,24 @@ def run(app=app, n_revisions=None):
DeleteObsoleteVersionsNumber.limit_revisions(session, Notes, n_revisions)



# Setup the command line arguments using Flask-Script
manager = Manager(app)
manager.add_command('syncdb', DeleteStaleUsers())
manager.add_command('clean_versions_time', DeleteObsoleteVersionsTime())
manager.add_command('clean_versions_number', DeleteObsoleteVersionsNumber())
def main():
"""
Command line interface that mimics Flask-Script behavior
"""
parser = argparse.ArgumentParser(description='Biblib Management Commands')
parser.add_argument('command', choices=['syncdb', 'clean_versions_time', 'clean_versions_number'],
help='Command to run')
parser.add_argument('--n_years', type=int, help='Number of years for time-based cleanup')
parser.add_argument('--n_revisions', type=int, help='Number of revisions to keep')

args = parser.parse_args()

if args.command == 'syncdb':
DeleteStaleUsers().run(app=app)
elif args.command == 'clean_versions_time':
DeleteObsoleteVersionsTime().run(app=app, n_years=args.n_years)
elif args.command == 'clean_versions_number':
DeleteObsoleteVersionsNumber().run(app=app, n_revisions=args.n_revisions)

if __name__ == '__main__':
manager.run()
main()
18 changes: 9 additions & 9 deletions dev-requirements.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
Flask-Testing==0.8.1
httpretty==0.9.7
httpretty==1.1.4
testing.postgresql==1.3.0
pytest==6.2.1
pytest==7.4.4
pytest-cache==1.0
pytest-cov==2.10.1
pytest-cov==4.0.0
pytest-pep8==1.0.6
coveralls==2.2.0
fake-factory==0.5.3
factory-boy==2.6.0
freezegun==1.2.2
httmock==1.2.3
mock==1.3.0
coveralls==3.3.1
Faker==22.0.0
factory-boy==3.3.0
freezegun==1.4.0
httmock==1.4.0
mock==5.1.0

21 changes: 11 additions & 10 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
git+https://github.com/adsabs/ADSMicroserviceUtils.git@v1.1.9
Flask-Migrate==2.0.2
Flask-Script==2.0.5
alembic==1.5.3
psycopg2==2.8.6
sqlalchemy-continuum==1.3.12
git+https://github.com/adsabs/ADSMicroserviceUtils.git@v1.4.0
# git+https://github.com/femalves/ADSMicroserviceUtils.git@94dba88
Flask-Migrate==4.0.5
Flask-Script==2.0.6
alembic==1.13.1
psycopg2-binary==2.9.9
sqlalchemy-continuum==1.4.2
Flask-Mail==0.9.1
Flask-Email==1.4.4
Jinja2==2.11.3
markupsafe<=2.0.1
itsdangerous<=2.0.1
werkzeug<=2.0.3
Jinja2==3.1.2
markupsafe==2.1.3
itsdangerous==2.1.2
werkzeug==3.0.1
Loading