Skip to content

Commit

Permalink
Fix Python 3.13
Browse files Browse the repository at this point in the history
  • Loading branch information
nagareproject committed May 31, 2024
1 parent 55bf8f8 commit 7c260ba
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 27 deletions.
4 changes: 2 additions & 2 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@

tests:
script:
- pip3 install ruff .
- pip3 install ruff
- ruff format --check src
- ruff src
- ruff check src
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: check-json
Expand All @@ -11,7 +11,7 @@ repos:

- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: "v0.2.2"
rev: "v0.4.6"
hooks:
- id: ruff
- id: ruff-format
15 changes: 8 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
DOC_OUTPUT_DIR ?= doc/_build

.PHONY: doc tests

clean:
@rm -rf build dist
@rm -rf build dist .ruff_cache
@rm -rf src/*.egg-info
@find src \( -name '*.py[co]' -o -name '__pycache__' \) -delete
@rm -rf doc/_build/*

upgrade-precommit:
python -m pre_commit autoupdate

install-dev: clean
python -m pip install -e '.[dev']
git init
python -m pre_commit install
python -m pre_commit autoupdate
$(MAKE) upgrade-precommit

tests:
python -m pytest

qa:
python -m ruff src
python -m ruff check src
python -m ruff format --check src

qa-fix:
python -m ruff --fix src
python -m ruff check --fix src
python -m ruff format src

doc:
python -m sphinx.cmd.build -b html doc ${DOC_OUTPUT_DIR}
python -m sphinx.cmd.build -b html doc doc/_build

wheel:
python -m pip wheel -w dist --no-deps .
7 changes: 6 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ description = 'Reloader service'
authors = [{ name = 'Net-ng' }, { email = '[email protected]' }]
license = { file = 'LICENSE.txt' }
requires-python = '>=3.7'
dependencies = ['watchdog', 'webob', 'nagare-server']
dependencies = [
'watchdog',
'webob',
"legacy-cgi ; python_full_version>='3.13.0a1'",
'nagare-server'
]

[project.readme]
file = 'README.rst'
Expand Down
75 changes: 60 additions & 15 deletions src/nagare/services/reloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ def execute_callback(self, action, event, *args, **kw):
self._services(self.reload_document)


class DirsObserver(ObserverBase):
class _DirsObserver(ObserverBase):
def __init__(self, default_action=lambda dirname, path, event: None, services_service=None):
services_service(super(DirsObserver, self).__init__, default_action)
services_service(super(_DirsObserver, self).__init__, default_action)
self._actions = []

def schedule(self, dirname, action=None, recursive=False, **kw):
Expand All @@ -65,7 +65,7 @@ def schedule(self, dirname, action=None, recursive=False, **kw):
self._actions.append((dirname, recursive, action, kw))
self._actions.sort(key=lambda a: len(a[0]), reverse=True)

super(DirsObserver, self).schedule(self, dirname, recursive)
super(_DirsObserver, self).schedule(self, dirname, recursive)

return True

Expand All @@ -83,9 +83,32 @@ def dispatch(self, event):
break


class FilesObserver(ObserverBase):
class DirsObserver(object):
def __init__(self, default_action=lambda dirname, path, event: None):
self.default_action = default_action
self.watched_dirs = []
self.dirs_observer = None

def schedule(self, dirname, action=None, recursive=False, **kw):
if self.dirs_observer is None:
self.watched_dirs.append((dirname, action, recursive, kw))
else:
print('********************* DIR', dirname)
self.dirs_observer.schedule(dirname, action, recursive, **kw)

def start(self, services_service):
self.dirs_observer = services_service(_DirsObserver, self.default_action)

for dirname, action, recursive, kw in self.watched_dirs:
self.dirs_observer.schedule(dirname, action, recursive, **kw)

self.watched_dirs = []
self.dirs_observer.start()


class _FilesObserver(ObserverBase):
def __init__(self, default_action=lambda path: None, files_mtime_check=False, services_service=None):
services_service(super(FilesObserver, self).__init__, default_action)
services_service(super(_FilesObserver, self).__init__, default_action)

self._files_mtime_check = files_mtime_check
self._dirs = defaultdict(dict)
Expand All @@ -101,7 +124,7 @@ def schedule(self, filename, action=None, **kw):
basename = os.path.basename(filename)
self._dirs[dirname][basename] = [os.stat(filename).st_mtime, action, kw]

super(FilesObserver, self).schedule(self, filename if gevent else dirname)
super(_FilesObserver, self).schedule(self, filename if gevent else dirname)

return True

Expand All @@ -126,6 +149,30 @@ def dispatch(self, event):
self.execute_callback(action, event, filename, **kw)


class FilesObserver(object):
def __init__(self, default_action=lambda path: None, files_mtime_check=False):
self.default_action = default_action
self.files_mtime_check = files_mtime_check
self.watched_files = []
self.files_observer = None

def schedule(self, filename, action=None, **kw):
if self.files_observer is None:
self.watched_files.append((filename, action, kw))
else:
print('********************* FILE', filename)
self.files_observer.schedule(filename, action, **kw)

def start(self, services_service):
self.files_observer = services_service(_FilesObserver, self.default_action, self.files_mtime_check)

for filename, action, kw in self.watched_files:
self.files_observer.schedule(filename, action, **kw)

self.watched_files = []
self.files_observer.start()


class Reloader(plugin.Plugin):
"""Reload on source changes."""

Expand Down Expand Up @@ -173,8 +220,8 @@ def __init__(
self.live = live
self.animation = animation

self.dirs_observer = services_service(DirsObserver, self.default_dir_action)
self.files_observer = services_service(FilesObserver, self.default_file_action, files_mtime_check)
self.dirs_observer = DirsObserver(self.default_dir_action)
self.files_observer = FilesObserver(self.default_file_action, files_mtime_check)

self.websockets = set()
self.reload = lambda self, path: None
Expand Down Expand Up @@ -228,12 +275,10 @@ def monitor(self, reload_action, services_service):
return exit_code

def watch_dir(self, dirname, action=None, recursive=False, **kw):
if not self.dirs_observer.schedule(dirname, action, recursive, **kw):
self.logger.warn("Directory `{}` doesn't exist".format(dirname))
self.dirs_observer.schedule(dirname, action, recursive, **kw)

def watch_file(self, filename, action=None, **kw):
if not self.files_observer.schedule(filename, action, **kw):
self.logger.warn("File `{}` doesn't exist".format(filename))
self.files_observer.schedule(filename, action, **kw)

def default_file_action(self, event, path, only_on_modified=False, services_service=None):
if (self.reload is not None) and (
Expand Down Expand Up @@ -294,11 +339,11 @@ def reload_asset(self, path):
def reload_document(self):
self.reload_asset('')

def start(self, reload_action, statics_service=None):
def start(self, reload_action, services_service, statics_service=None):
self.reload = reload_action

self.dirs_observer.start()
self.files_observer.start()
services_service(self.dirs_observer.start)
services_service(self.files_observer.start)

self.version = random.randint(10000000, 99999999) # noqa: S311

Expand Down

0 comments on commit 7c260ba

Please sign in to comment.