Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
24 changes: 7 additions & 17 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,18 @@ jobs:
fail-fast: false
max-parallel: 5
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12-dev']
django-version: ['3.2', '4.2', 'main']
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.15-dev']
django-version: ['5.2', '6.0', 'main']
exclude:
- python-version: '3.10'
django-version: '6.0'
- python-version: '3.11'
django-version: '3.2'
- python-version: '3.12-dev'
django-version: '3.2'

- python-version: '3.11'
django-version: '4.0'
- python-version: '3.12-dev'
django-version: '4.0'

- python-version: '3.12-dev'
django-version: '4.1'
django-version: '6.0'

- python-version: '3.8'
django-version: 'main'
- python-version: '3.9'
django-version: 'main'
- python-version: '3.10'
django-version: 'main'
- python-version: '3.11'
django-version: 'main'

steps:
- uses: actions/checkout@v3
Expand Down
13 changes: 6 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,22 @@ ruff:

example:
DJANGO_SETTINGS_MODULE=example.settings PYTHONPATH=. \
django-admin.py runserver
django-admin runserver

check:
DJANGO_SETTINGS_MODULE=example.settings PYTHONPATH=. \
python -Wd example/manage.py check

generate-mmdb-fixtures:
docker --context=default buildx build -f tests/Dockerfile --tag test-mmdb-maker tests
docker run --rm --volume $$(pwd)/tests:/data test-mmdb-maker
[ -e tests/test_city.mmdb ] || python3 generate_mmdb.py

test: generate-mmdb-fixtures
DJANGO_SETTINGS_MODULE=tests.settings PYTHONPATH=. \
django-admin.py test ${TARGET}
django-admin test ${TARGET}

migrations:
DJANGO_SETTINGS_MODULE=tests.settings PYTHONPATH=. \
django-admin.py makemigrations user_sessions
django-admin makemigrations user_sessions

coverage:
coverage erase
Expand All @@ -34,8 +33,8 @@ coverage:

tx-pull:
tx pull -a
cd user_sessions; django-admin.py compilemessages
cd user_sessions; django-admin compilemessages

tx-push:
cd user_sessions; django-admin.py makemessages -l en
cd user_sessions; django-admin makemessages -l en
tx push -s
63 changes: 32 additions & 31 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,22 @@ requires-python = ">=3.8"
keywords = ["django", "sessions"]
license = {text = "MIT"}
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Framework :: Django",
"Framework :: Django :: 3.2",
"Framework :: Django :: 4.2",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Security",
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Framework :: Django",
"Framework :: Django :: 3.2",
"Framework :: Django :: 4.2",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Security",
]
dependencies = [
"Django>=3.2",
Expand All @@ -43,21 +43,22 @@ issues = "https://github.com/jazzband/django-user-sessions/issues"

[project.optional-dependencies]
dev = [
# Example app
"django-debug-toolbar",
# Testing
"coverage",
"tox",
"tox-pyenv",
"detox",
# Transifex
"transifex-client",
# Documentation
"Sphinx",
"sphinx_rtd_theme",
# Build
"bumpversion",
"twine",
# Example app
"django-debug-toolbar",
# Testing
"coverage",
"tox",
"tox-pyenv",
"detox",
# Transifex
"transifex-client",
# Documentation
"Sphinx",
"sphinx_rtd_theme",
# Build
"bumpversion",
"twine",
"mmdb-writer",
]

[tool.ruff]
Expand Down
9 changes: 0 additions & 9 deletions tests/Dockerfile

This file was deleted.

89 changes: 0 additions & 89 deletions tests/generate_mmdb.pl

This file was deleted.

63 changes: 63 additions & 0 deletions tests/generate_mmdb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
from netaddr import IPSet

from mmdb_writer import MMDBWriter


city_writer = MMDBWriter()

city_writer.insert_network(
IPSet(["44.55.66.77/32"]),
{
"city": {
"names": {
"en": "San Diego",
},
},
"continent": {
"code": "NA",
"names": {
"en": "North America",
},
},
"country": {
"iso_code": "US",
"names": {
"en": "United States",
},
},
"is_in_european_union": False,
"location": {
"latitude": 37.751,
"longitude": -97.822,
"metro_code": "custom metro code",
"time_zone": "America/Los Angeles",
},
"postal": {
"code": "custom postal code",
},
"subdivisions": [
{
"iso_code": "ABC",
"names": {
"en": 'Absolute Basic Class',
},
},
],
},
)

city_writer.to_db_file("tests/test_city.mmdb")

# country_writer = MMDBWriter(
# IPSet(["8.8.8.8/32"]),
# {
# "country": {
# "iso_code": "US",
# "names": {
# "en": "United States",
# },
# },
# },
# )

# country_writer.to_db_file("tests/test_country.mmdb")
15 changes: 5 additions & 10 deletions tests/test_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,37 +25,32 @@ def setUp(self):
self.admin_url = reverse('admin:user_sessions_session_changelist')

def test_list(self):
with self.assertWarnsRegex(UserWarning, r"The address 1\.1\.1\.1 is not in the database"):
response = self.client.get(self.admin_url)
response = self.client.get(self.admin_url)
self.assertContains(response, 'Select session to change')
self.assertContains(response, '127.0.0.1')
self.assertContains(response, '20.13.1.1')
self.assertContains(response, '1.1.1.1')

def test_search(self):
with self.assertWarnsRegex(UserWarning, r"The address 127\.0\.0\.1 is not in the database"):
response = self.client.get(self.admin_url, {'q': 'bouke'})
response = self.client.get(self.admin_url, {'q': 'bouke'})
self.assertContains(response, '127.0.0.1')
self.assertNotContains(response, '20.13.1.1')
self.assertNotContains(response, '1.1.1.1')

def test_mine(self):
my_sessions = f"{self.admin_url}?{urlencode({'owner': 'my'})}"
with self.assertWarnsRegex(UserWarning, r"The address 127\.0\.0\.1 is not in the database"):
response = self.client.get(my_sessions)
response = self.client.get(my_sessions)
self.assertContains(response, '127.0.0.1')
self.assertNotContains(response, '1.1.1.1')

def test_expired(self):
expired = f"{self.admin_url}?{urlencode({'active': '0'})}"
with self.assertWarnsRegex(UserWarning, r"The address 20\.13\.1\.1 is not in the database"):
response = self.client.get(expired)
response = self.client.get(expired)
self.assertContains(response, '20.13.1.1')
self.assertNotContains(response, '1.1.1.1')

def test_unexpired(self):
unexpired = f"{self.admin_url}?{urlencode({'active': '1'})}"
with self.assertWarnsRegex(UserWarning, r"The address 1\.1\.1\.1 is not in the database"):
response = self.client.get(unexpired)
response = self.client.get(unexpired)
self.assertContains(response, '1.1.1.1')
self.assertNotContains(response, '20.13.1.1')
7 changes: 1 addition & 6 deletions tests/test_template_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,7 @@
class LocationTemplateFilterTest(TestCase):
@override_settings(GEOIP_PATH=None)
def test_no_location(self):
with self.assertWarnsRegex(
UserWarning,
r"The address 127\.0\.0\.1 is not in the database",
):
loc = location('127.0.0.1')
self.assertEqual(loc, None)
self.assertIsNone(location('127.0.0.1'))

@skipUnless(geoip, geoip_msg)
def test_city(self):
Expand Down
Loading
Loading