Skip to content

Commit

Permalink
0.3.0: Bump pymongo and python support (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
cognifloyd authored Oct 20, 2024
2 parents bbcf667 + 6397f43 commit 882a952
Show file tree
Hide file tree
Showing 10 changed files with 133 additions and 69 deletions.
84 changes: 84 additions & 0 deletions .github/workflows/tox.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Tox CI

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.8"

- name: Install tox
run: pip install --user tox

- name: Lint
run: tox -e lint

test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11"]
services:
mongo:
image: mongo:7.0
ports:
- 27017:27017
steps:
- name: Checkout repo
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install tox
run: pip install --user tox

- name: Select tox env
id: tox-env
run: echo tox-env=py${{ matrix.python-version }} | tr -d '.' >> ${GITHUB_OUTPUT}

- name: Test
run: tox -e ${{ steps.tox-env.outputs.tox-env }}

set_merge_ok:
name: Set Merge OK
if: always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled')
needs:
- lint
- test
outputs:
merge_ok: ${{ steps.set_merge_ok.outputs.merge_ok }}
runs-on: ubuntu-latest
steps:
- id: set_merge_ok
run: echo 'merge_ok=true' >> ${GITHUB_OUTPUT}

merge_ok:
name: Merge OK
if: always()
needs:
- set_merge_ok
runs-on: ubuntu-latest
steps:
- run: |
merge_ok="${{ needs.set_merge_ok.outputs.merge_ok }}"
if [[ "${merge_ok}" == "true" ]]; then
echo "Merge OK"
exit 0
else
echo "Merge NOT OK"
exit 1
fi
32 changes: 0 additions & 32 deletions .travis.yml

This file was deleted.

7 changes: 1 addition & 6 deletions lint-configs/python/.pylintrc
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
[MESSAGES CONTROL]
# C0111 Missing docstring
# I0011 Warning locally suppressed using disable-msg
# I0012 Warning locally suppressed using disable-msg
# W0704 Except doesn't do anything Used when an except clause does nothing but "pass" and there is no "else" clause
# W0142 Used * or * magic* Used when a function or method is called using *args or **kwargs to dispatch arguments.
# W0212 Access to a protected member %s of a client class
# W0232 Class has no __init__ method Used when a class has no __init__ method, neither its parent classes.
# W0613 Unused argument %r Used when a function or method argument is not used.
# W0702 No exception's type specified Used when an except clause doesn't specify exceptions type to catch.
# R0201 Method could be a function
# W0614 Unused import XYZ from wildcard import
# R0914 Too many local variables
# R0912 Too many branches
# R0915 Too many statements
# R0913 Too many arguments
# R0904 Too many public methods
# E0211: Method has no argument
disable=C0103,C0111,I0011,I0012,W0704,W0142,W0212,W0232,W0613,W0702,R0201,W0614,R0914,R0912,R0915,R0913,R0904,R0801
disable=C0103,C0111,I0011,W0212,W0613,W0702,W0614,R0914,R0912,R0915,R0913,R0904,R0801

[TYPECHECK]
# Note: This modules are manipulated during the runtime so we can't detect all the properties during
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
pymongo>=2.8.1,<3.0
pymongo>=4.0.0,<4.7
12 changes: 9 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,15 @@
version = parse_version_string(INIT_FILE)
install_reqs, dep_links = fetch_requirements(REQUIREMENTS_FILE)

with open("README.md", "r") as fh:
long_description = fh.read()

setup(
name='st2-auth-backend-mongodb',
version=version,
description='StackStorm authentication backend which reads credentials from a MongoDB collection.',
long_description=long_description,
long_description_content_type="text/markdown",
author='StackStorm, Inc.',
author_email='[email protected]',
url='https://github.com/StackStorm/st2-auth-backend-mongodb',
Expand All @@ -42,20 +47,21 @@
'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Intended Audience :: Developers',
'Environment :: Console',
],
python_requires='>=3.8',
platforms=['Any'],
scripts=[],
provides=['st2auth_mongodb_backend'],
packages=find_packages(),
include_package_data=True,
install_requires=install_reqs,
dependency_links=dep_links,
test_suite='tests',
entry_points={
'st2auth.backends.backend': [
'mongodb = st2auth_mongodb_backend.mongodb:MongoDBAuthenticationBackend',
Expand Down
2 changes: 1 addition & 1 deletion st2auth_mongodb_backend/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@
'MongoDBAuthenticationBackend'
]

__version__ = '0.2.0'
__version__ = '0.3.0'
20 changes: 14 additions & 6 deletions st2auth_mongodb_backend/mongodb.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class MongoDBAuthenticationBackend(object):

_collection_name = 'users'
_indexes = [
('username', pymongo.ASCENDING)
pymongo.IndexModel([('username', pymongo.ASCENDING)], unique=True)
]
_hash_function = hashlib.sha256

Expand All @@ -53,12 +53,17 @@ def __init__(self, db_host='localhost', db_port=27017, db_name='st2auth', db_use
self._db_port = db_port
self._db_username = db_username
self._db_password = db_password
self._db_indexes_created = False

self._client = MongoClient(host=self._db_host, port=self._db_port, tz_aware=True)
self._db = self._client[db_name]

kwargs = {}
if self._db_username:
self._db.authenticate(name=self._db_username, password=self._db_password)
kwargs["username"] = self._db_username
kwargs["password"] = self._db_password

self._client = MongoClient(
host=self._db_host, port=self._db_port, tz_aware=True, **kwargs
)
self._db = self._client[db_name]

self._collection = self._db[self._collection_name]
self._ensure_indexes()
Expand Down Expand Up @@ -87,4 +92,7 @@ def get_user(self, username):
pass

def _ensure_indexes(self):
self._collection.ensure_index(self._indexes, unique=True)
if self._db_indexes_created:
return
self._collection.create_indexes(self._indexes)
self._db_indexes_created = True
10 changes: 5 additions & 5 deletions test-requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
mock==3.0.5
nose>=1.3.7
flake8==7.0.0
mock==5.1.0
pep8==1.7.1
pylint==1.9.4
st2flake8==0.1.0
unittest2
pylint~=3.1.0
pytest
st2flake8
13 changes: 6 additions & 7 deletions tests/unit/test_mongodb_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@

import sys

import unittest2
import unittest

from st2auth_mongodb_backend.mongodb import MongoDBAuthenticationBackend


class MongoDBAuthenticationBackendTestCase(unittest2.TestCase):
class MongoDBAuthenticationBackendTestCase(unittest.TestCase):
hash_function = MongoDBAuthenticationBackend._hash_function
fixtures = [
{
Expand All @@ -34,15 +34,14 @@ def setUp(self):
self._backend = MongoDBAuthenticationBackend(db_name='st2authtest')

# Clear database
self._backend._collection.remove()
self._backend._collection.delete_many({})

# Add fixtures
for fixture in self.fixtures:
self._backend._collection.insert(fixture)
self._backend._collection.insert_many(self.fixtures)

def tearDown(self):
# Clear database
self._backend._collection.remove()
self._backend._collection.delete_many({})

def test_authenticate(self):
# Inexistent user
Expand All @@ -55,4 +54,4 @@ def test_authenticate(self):
self.assertTrue(self._backend.authenticate(username='test1', password='testpassword'))

if __name__ == '__main__':
sys.exit(unittest2.main())
sys.exit(unittest.main())
20 changes: 12 additions & 8 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
[tox]
envlist = py27,py36,lint
envlist = py38,py39,py310,py311,lint

[testenv]
deps = -r{toxinidir}/test-requirements.txt
commands = pytest

[testenv:py27]
basepython = python2.7
commands = python setup.py test
[testenv:py38]
basepython = python3.8

[testenv:py36]
basepython = python3.6
commands = python setup.py test
[testenv:py39]
basepython = python3.9

[testenv:py310]
basepython = python3.10

[testenv:py311]
basepython = python3.11

[testenv:lint]
deps = -r{toxinidir}/test-requirements.txt
commands = flake8 --config ./lint-configs/python/.flake8 st2auth_mongodb_backend/
pylint -E --rcfile=./lint-configs/python/.pylintrc st2auth_mongodb_backend/

0 comments on commit 882a952

Please sign in to comment.