From 07b064c6c0f3f9b724153dfb5d50486eb9e8a377 Mon Sep 17 00:00:00 2001 From: boke0 Date: Tue, 9 Mar 2021 00:07:33 +0900 Subject: [PATCH] [update] --- izanami/controller.py | 238 +++++++++++++++++++------- izanami/model.py | 8 + izanami/templates/merge/retrieve.html | 8 +- izanami/templates/settings.html | 2 +- poetry.lock | 86 +++++++++- pyproject.toml | 2 +- 6 files changed, 268 insertions(+), 76 deletions(-) diff --git a/izanami/controller.py b/izanami/controller.py index 441424d..2523500 100644 --- a/izanami/controller.py +++ b/izanami/controller.py @@ -11,7 +11,6 @@ import shutil import yaml import traceback -from io import StringIO from unidiff import PatchSet @@ -22,6 +21,7 @@ def handle(self, request): return Response.render(template, { 'repos': repos }) + def create(self, request): template = self.view.get_template("repo/create.html") nodes = [ @@ -38,12 +38,12 @@ def create(self, request): if not (self.app.project_dir / 'git_template').is_dir: git.Repo.init( self.app.project_dir / 'git_template', - bare = True + bare=True ) git.Repo.init( self.app.project_dir / ('repos/' + repo.name + '.git'), - bare = True, - template = self.app.project_dir / 'git_template' + bare=True, + template=self.app.project_dir / 'git_template' ) return Response.redirect(self.app.convert_url('/'+repo.name)) except Exception as err: @@ -61,8 +61,15 @@ def create(self, request): def update(self, request): template = self.view.get_template("repo/update.html") - repo = Repo.retrieve(name = request.params['repo']) - if isinstance(repo.owner.object, Group) and not InnerPermission.is_accepted('update_repository', repo.owner.object, request.user): + repo = Repo.retrieve(name=request.params['repo']) + if ( + repo.owner != request.user and + not InnerPermission.is_accepted( + 'update_repository', + repo.owner.object, + request.user + ) + ): return Response.redirect(self.app.convert_url('/')) try: if request.method == 'POST': @@ -87,14 +94,23 @@ def update(self, request): def delete(self, request): template = self.view.get_template("repo/delete.html") - repo = Repo.retrieve(name = request.params['repo']) - if isinstance(repo.owner.object, Group) and not InnerPermission.is_accepted('delete_repository', repo.owner.object, request.user): + repo = Repo.retrieve(name=request.params['repo']) + if ( + repo.owner != request.user and + not InnerPermission.is_accepted( + 'delete_repository', + repo.owner.object, + request.user + ) + ): return Response.redirect(self.app.convert_url('/')) try: if request.method == 'POST': if not request.user.password_check(request.post()['password']): - raise AuthorizationError('wrong password') - shutil.rmtree(self.app.project_dir / ('repos/' + repo.name + '.git')) + raise Exception('wrong password') + shutil.rmtree( + self.app.project_dir / ('repos/' + repo.name + '.git') + ) repo.delete() return Response.redirect(self.app.convert_url('/')) except Exception as err: @@ -109,13 +125,18 @@ def delete(self, request): def retrieve(self, request): template = self.view.get_template("repo/retrieve.html") - repo = Repo.retrieve(name = request.params['repo']) - query = request.query + repo = Repo.retrieve(name=request.params['repo']) current_head = request.params.get('head', 'master') entity = git.Repo( self.app.project_dir / 'repos/{}.git'.format(repo.name), ) - head = getattr(entity.heads, current_head) if hasattr(entity.heads, current_head) else None + head = getattr( + entity.heads, + current_head + ) if hasattr( + entity.heads, + current_head + ) else None commit = None tree = None readme = None @@ -138,13 +159,19 @@ def retrieve(self, request): def blob(self, request): template = self.view.get_template("repo/blob.html") - repo = Repo.retrieve(name = request.params['repo']) + repo = Repo.retrieve(name=request.params['repo']) query = request.query branch = query.get('branch', 'master') entity = git.Repo( self.app.project_dir / 'repos/{}.git'.format(repo.name), ) - head = getattr(entity.heads, branch) if hasattr(entity.heads, branch) else None + head = getattr( + entity.heads, + branch + ) if hasattr( + entity.heads, + branch + ) else None tree = head.commit.tree or None content = None for obj in tree: @@ -162,17 +189,17 @@ def blob(self, request): def commit(self, request): template = self.view.get_template("repo/commit.html") - repo = Repo.retrieve(name = request.params['repo']) - query = request.query + repo = Repo.retrieve(name=request.params['repo']) entity = repo.entity commit = entity.commit(request.params['commit']) - diff_str = entity.git.diff(str(commit) + '~1', commit, ignore_blank_lines=True, ignore_space_at_eol=True) if len(commit.parents) > 0 else None + diff_str = entity.git.diff( + str(commit) + '~1', commit, + ignore_blank_lines=True, + ignore_space_at_eol=True + ) if len(commit.parents) > 0 else None diff = None if diff_str: diff = PatchSet(diff_str) - for patch in diff: - for hunk in patch: - print(dir(hunk)) return Response.render(template, { 'repo': repo, 'entity': entity, @@ -182,10 +209,11 @@ def commit(self, request): def log(self, request): template = self.view.get_template("repo/log.html") - repo = Repo.retrieve(name = request.params['repo']) + repo = Repo.retrieve(name=request.params['repo']) current_head = request.params.get('head', 'master') - query = request.query - commits = repo.entity.iter_commits(current_head) if hasattr(repo.entity.heads, current_head) else None + commits = repo.entity.iter_commits( + current_head + ) if hasattr(repo.entity.heads, current_head) else None return Response.render(template, { 'repo': repo, 'entity': repo.entity, @@ -193,10 +221,11 @@ def log(self, request): 'commits': commits }) + class HookController(Controller): def handle(self, request): template = self.view.get_template('hook/list.html') - repo = Repo.retrieve(name = request.params['repo']) + repo = Repo.retrieve(name=request.params['repo']) hooks = list() for hook in glob.glob(str(self.app.project_dir / 'repos/{}.git/hooks'.format(repo.name)) + '/*'): hooks.append(os.path.basename(hook)) @@ -204,9 +233,10 @@ def handle(self, request): 'repo': repo, 'hooks': hooks }) + def retrieve(self, request): template = self.view.get_template('hook/retrieve.html') - repo = Repo.retrieve(name = request.params['repo']) + repo = Repo.retrieve(name=request.params['repo']) with open(self.app.project_dir / 'repos/{}.git/hooks/{}'.format(repo.name, request.params['hook'])) as f: code = f.read() return Response.render(template, { @@ -214,37 +244,88 @@ def retrieve(self, request): 'name': request.params['hook'], 'code': code }) + def create(self, request): template = self.view.get_template('hook/create.html') - repo = Repo.retrieve(name = request.params['repo']) - if isinstance(repo.owner.object, Group) and not InnerPermission.is_accepted('update_repository', repo.owner.object, request.user): - return Response.redirect(self.app.convert_url('/' + request.params['repo'] + '/hook')) + repo = Repo.retrieve(name=request.params['repo']) + if ( + repo.owner != request.user and + not InnerPermission.is_accepted( + 'update_repository', + repo.owner, + request.user + ) + ): + return Response.redirect( + self.app.convert_url('/' + request.params['repo'] + '/hook') + ) error = '' if request.method == 'POST': form = HookCreateForm(request.post()) - with open(self.app.project_dir / 'repos/{}.git/hooks/{}'.format(repo.name, form['name']), 'w') as f: + with open( + self.app.project_dir / 'repos/{}.git/hooks/{}'.format( + repo.name, + form['name'] + ), + 'w' + ) as f: f.write(form['code']) - return Response.redirect(self.app.convert_url('/{}/hook/{}'.format(repo.name, form['name']))) + return Response.redirect( + self.app.convert_url( + '/{}/hook/{}'.format(repo.name, form['name']) + ) + ) return Response.render(template, { 'repo': repo, 'error': error }) + def update(self, request): template = self.view.get_template('hook/update.html') - repo = Repo.retrieve(name = request.params['repo']) - if isinstance(repo.owner.object, Group) and not InnerPermission.is_accepted('update_repository', repo.owner.object, request.user): - return Response.redirect(self.app.convert_url('/' + request.params['repo'] + '/hook')) + repo = Repo.retrieve(name=request.params['repo']) + if ( + repo.owner.object != request.user and + not InnerPermission.is_accepted( + 'update_repository', + repo.owner, + request.user + ) + ): + return Response.redirect( + self.app.convert_url('/' + request.params['repo'] + '/hook') + ) error = '' if request.method == 'POST': form = HookCreateForm(request.post()) shutil.move( - self.app.project_dir / 'repos/{}.git/hooks/{}'.format(repo.name, request.params['hook']), - self.app.project_dir / 'repos/{}.git/hooks/{}'.format(repo.name, form['name']) + self.app.project_dir / 'repos/{}.git/hooks/{}'.format( + repo.name, + request.params['hook'] + ), + self.app.project_dir / 'repos/{}.git/hooks/{}'.format( + repo.name, + form['name'] + ) ) - with open(self.app.project_dir / 'repos/{}.git/hooks/{}'.format(repo.name, form['name']), 'w') as f: + with open( + self.app.project_dir / 'repos/{}.git/hooks/{}'.format( + repo.name, + form['name'] + ), + 'w' + ) as f: f.write(form['code']) - return Response.redirect(self.app.convert_url('/{}/hook/{}'.format(repo.name, form['name']))) - with open(self.app.project_dir / 'repos/{}.git/hooks/{}'.format(repo.name, request.params['hook'])) as f: + return Response.redirect( + self.app.convert_url( + '/{}/hook/{}'.format(repo.name, form['name']) + ) + ) + with open( + self.app.project_dir / 'repos/{}.git/hooks/{}'.format( + repo.name, + request.params['hook'] + ) + ) as f: code = f.read() return Response.render(template, { 'repo': repo, @@ -252,25 +333,43 @@ def update(self, request): 'code': code, 'error': error }) + def delete(self, request): template = self.view.get_template('hook/delete.html') - repo = Repo.retrieve(name = request.params['repo']) - if isinstance(repo.owner.object, Group) and not InnerPermission.is_accepted('update_repository', repo.owner.object, request.user): - return Response.redirect(self.app.convert_url('/' + request.params['repo'] + '/hook')) + repo = Repo.retrieve(name=request.params['repo']) + if ( + isinstance(repo.owner.object, Group) and + not InnerPermission.is_accepted( + 'update_repository', + repo.owner.object, + request.user + ) + ): + return Response.redirect( + self.app.convert_url('/' + request.params['repo'] + '/hook') + ) error = '' if request.method == 'POST': - os.remove(self.app.project_dir / 'repos/{}.git/hooks/{}'.format(repo.name, request.params['hook'])) - return Response.redirect(self.app.convert_url('/{}/hook'.format(repo.name))) + os.remove( + self.app.project_dir / 'repos/{}.git/hooks/{}'.format( + repo.name, + request.params['hook'] + ) + ) + return Response.redirect( + self.app.convert_url('/{}/hook'.format(repo.name)) + ) return Response.render(template, { 'repo': repo, 'name': request.params['hook'], 'error': error }) + class MergeController(Controller): def handle(self, request): template = self.view.get_template('merge/list.html') - repo = Repo.retrieve(name = request.params['repo']) + repo = Repo.retrieve(name=request.params['repo']) merges = Merge.query.filter(Merge.repo == repo).all() return Response.render(template, { "repo": repo, @@ -279,7 +378,7 @@ def handle(self, request): def create(self, request): template = self.view.get_template('merge/create.html') - repo = Repo.retrieve(name = request.params['repo']) + repo = Repo.retrieve(name=request.params['repo']) error = "" if request.method == "POST": try: @@ -292,7 +391,11 @@ def create(self, request): merge.repo = repo merge.user = request.user merge.create() - return Response.redirect(self.app.convert_url('/' + repo.name + '/merge/' + merge._id)) + return Response.redirect( + self.app.convert_url( + '/' + repo.name + '/merge/' + merge._id + ) + ) except Exception as err: error = str(err) return Response.render(template, { @@ -303,7 +406,7 @@ def create(self, request): def retrieve(self, request): template = self.view.get_template('merge/retrieve.html') - repo = Repo.retrieve(name = request.params['repo']) + repo = Repo.retrieve(name=request.params['repo']) merge = Merge.retrieve(request.params['merge']) if request.method == 'POST': post = request.post() @@ -319,11 +422,16 @@ def retrieve(self, request): "merge": merge }) + class ProxyController(Controller): def handle(self, request): - repo = Repo.retrieve(name = request.params['repo'][:-4]) + repo = Repo.retrieve(name=request.params['repo'][:-4]) if repo.owner.object._id != request.user._id and (isinstance(repo.owner, Group) and not repo.owner.object.is_in(request.user)): - return Response(status=401, reason='Unauthorized', text='You are not the owner of the repository.') + return Response( + status=401, + reason='Unauthorized', + text='You are not the owner of the repository.' + ) environ = dict(request.environ) environ['REQUEST_METHOD'] = request.method environ['PATH_INFO'] = self.app.revert_url(environ['PATH_INFO']) @@ -332,16 +440,20 @@ def handle(self, request): reason, headers, body - ) = gitHttpBackend.wsgi_to_git_http_backend(environ, self.app.project_dir / 'repos') + ) = gitHttpBackend.wsgi_to_git_http_backend( + environ, + self.app.project_dir / 'repos' + ) content_type = headers['Content-Type'] return Response( - body = body, - status = status, - reason = reason, - headers = headers, - content_type = content_type + body=body, + status=status, + reason=reason, + headers=headers, + content_type=content_type ) + class SettingController(Controller): def handle(self, request): if not is_admin(request.user): @@ -350,9 +462,15 @@ def handle(self, request): if request.method == "POST": try: form = SettingsForm(request.post()) - for permission_screen_name, permission_roles in form['permission'].items(): - permission = InnerPermission.retrieve(screen_name = permission_screen_name) - permission.roles = [InnerRole.retrieve(screen_name = role) for role in permission_roles] + for screen_name, permission_roles in form['permission'].items(): + permission = InnerPermission.retrieve( + screen_name=screen_name + ) + permission.roles = [ + InnerRole.retrieve(screen_name=role) + for role + in permission_roles + ] permission.update() error = "変更を保存しました" except Exception as err: @@ -363,5 +481,3 @@ def handle(self, request): "permissions": InnerPermission.list(), "error": error }) - - diff --git a/izanami/model.py b/izanami/model.py index d467909..a8554a1 100644 --- a/izanami/model.py +++ b/izanami/model.py @@ -57,6 +57,14 @@ def merge(self): self.repo.merge(self.base, self.compare) self.on("merge")() + @property + def diff(self): + entity = self.repo.entity + diff_str = entity.git.diff(self.base, self.compare, ignore_blank_lines=True, ignore_space_at_eol=True) if len(commit.parents) > 0 else None + diff = PatchSet(diff_str) + return diff + + Merge.listen("merge") InnerPermission = inner_permission(db, [ diff --git a/izanami/templates/merge/retrieve.html b/izanami/templates/merge/retrieve.html index 06cb71c..e70faf1 100644 --- a/izanami/templates/merge/retrieve.html +++ b/izanami/templates/merge/retrieve.html @@ -14,17 +14,17 @@ フック -
- {{ lists.userItem(merge.user) }} -

{{ merge.base }}{{ merge.compare }}

{{ merge.title }}

+
+ {{ lists.userItem(merge.user, small=True) }} +
{{ merge.body|markdown }}
- {% if permission('merge', request.user) %} + {% if repo.owner.object == request.user or permission('merge', repo.owner, request.user) %}
{{ forms.csrf(request) }} diff --git a/izanami/templates/settings.html b/izanami/templates/settings.html index 3d2beec..ad97766 100644 --- a/izanami/templates/settings.html +++ b/izanami/templates/settings.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block content %}
-

設定

+

グループ内権限設定

diff --git a/poetry.lock b/poetry.lock index 14d4203..b5790ec 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,6 +33,7 @@ python-versions = ">=3.6" [package.dependencies] appdirs = "*" click = ">=7.1.2" +dataclasses = {version = ">=0.6", markers = "python_version < \"3.7\""} mypy-extensions = ">=0.4.3" pathspec = ">=0.6,<1" regex = ">=2020.1.8" @@ -98,9 +99,17 @@ sdist = ["setuptools-rust (>=0.11.4)"] ssh = ["bcrypt (>=3.1.5)"] test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] +[[package]] +name = "dataclasses" +version = "0.8" +description = "A backport of the dataclasses module for Python 3.6" +category = "dev" +optional = false +python-versions = ">=3.6, <3.7" + [[package]] name = "defusedxml" -version = "0.7.0" +version = "0.7.1" description = "XML bomb protection for Python stdlib modules" category = "main" optional = false @@ -161,6 +170,7 @@ optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.6.0a1,<2.7.0" pyflakes = ">=2.2.0,<2.3.0" @@ -249,6 +259,22 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "importlib-metadata" +version = "3.7.2" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + [[package]] name = "importlib-resources" version = "5.1.2" @@ -257,6 +283,9 @@ category = "main" optional = false python-versions = ">=3.6" +[package.dependencies] +zipp = {version = ">=0.4", markers = "python_version < \"3.8\""} + [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "pytest-black (>=0.3.7)", "pytest-mypy"] @@ -321,6 +350,9 @@ category = "main" optional = false python-versions = ">=3.6" +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + [package.extras] testing = ["coverage", "pyyaml"] @@ -342,7 +374,7 @@ python-versions = "*" [[package]] name = "mitama" -version = "4.5.8" +version = "4.5.12" description = "" category = "main" optional = false @@ -363,6 +395,7 @@ python-magic = ">=0.4.22,<0.5.0" pywebpush = ">=1.11.0,<2.0.0" SQLAlchemy = ">=1.3.23,<2.0.0" tzlocal = ">=2.1,<3.0" +uWSGI = ">=2.0.19,<3.0.0" watchdog = ">=2.0.1,<3.0.0" [[package]] @@ -688,7 +721,7 @@ python-versions = "*" name = "typing-extensions" version = "3.7.4.3" description = "Backported and Experimental Type Hints for Python 3.5+" -category = "dev" +category = "main" optional = false python-versions = "*" @@ -732,6 +765,14 @@ brotli = ["brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[[package]] +name = "uwsgi" +version = "2.0.19.1" +description = "The uWSGI server" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "watchdog" version = "2.0.2" @@ -770,6 +811,18 @@ codegen = ["elementpath (>=2.1.2,<3.0.0)", "jinja2"] dev = ["tox", "coverage", "lxml", "elementpath (>=2.1.2,<3.0.0)", "memory-profiler", "sphinx", "sphinx-rtd-theme", "jinja2"] docs = ["elementpath (>=2.1.2,<3.0.0)", "sphinx", "sphinx-rtd-theme", "jinja2"] +[[package]] +name = "zipp" +version = "3.4.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + [[package]] name = "zope.event" version = "4.5.0" @@ -797,8 +850,8 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "1.1" -python-versions = "^3.9" -content-hash = "375dca9bd667e5b3476360204c5ea8809b5b59d11d6d39fb2f25ebf8889c24e6" +python-versions = "^3.6" +content-hash = "c29358ed4b1f2286fc1faeff4faa2fb3098151bb31d1217cf574f5b0fe3178aa" [metadata.files] appdirs = [ @@ -877,9 +930,13 @@ cryptography = [ {file = "cryptography-3.4.6-cp36-abi3-win_amd64.whl", hash = "sha256:66b57a9ca4b3221d51b237094b0303843b914b7d5afd4349970bb26518e350b0"}, {file = "cryptography-3.4.6.tar.gz", hash = "sha256:2d32223e5b0ee02943f32b19245b61a62db83a882f0e76cc564e1cec60d48f87"}, ] +dataclasses = [ + {file = "dataclasses-0.8-py3-none-any.whl", hash = "sha256:0201d89fa866f68c8ebd9d08ee6ff50c0b255f8ec63a71c16fda7af82bb887bf"}, + {file = "dataclasses-0.8.tar.gz", hash = "sha256:8479067f342acf957dc82ec415d355ab5edb7e7646b90dc6e2fd1d96ad084c97"}, +] defusedxml = [ - {file = "defusedxml-0.7.0-py2.py3-none-any.whl", hash = "sha256:a290cad10346ed366c8a0133d868eaf6585ec6afdd0c511286cdb11f5fc3d285"}, - {file = "defusedxml-0.7.0.tar.gz", hash = "sha256:86b15d9e3c639de79f4cb38aeffea3281f62aff78dde7d798e1352c63bfa6ea0"}, + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] docker = [ {file = "docker-4.4.4-py2.py3-none-any.whl", hash = "sha256:f3607d5695be025fa405a12aca2e5df702a57db63790c73b927eb6a94aac60af"}, @@ -991,6 +1048,10 @@ idna = [ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] +importlib-metadata = [ + {file = "importlib_metadata-3.7.2-py3-none-any.whl", hash = "sha256:407d13f55dc6f2a844e62325d18ad7019a436c4bfcaee34cda35f2be6e7c3e34"}, + {file = "importlib_metadata-3.7.2.tar.gz", hash = "sha256:18d5ff601069f98d5d605b6a4b50c18a34811d655c55548adc833e687289acde"}, +] importlib-resources = [ {file = "importlib_resources-5.1.2-py3-none-any.whl", hash = "sha256:ebab3efe74d83b04d6bf5cd9a17f0c5c93e60fb60f30c90f56265fce4682a469"}, {file = "importlib_resources-5.1.2.tar.gz", hash = "sha256:642586fc4740bd1cad7690f836b3321309402b20b332529f25617ff18e8e1370"}, @@ -1075,8 +1136,8 @@ mccabe = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] mitama = [ - {file = "mitama-4.5.8-py3-none-any.whl", hash = "sha256:2c6765ad296294c2d3a29c305fb9c7bfafc5156c0ac5c90739617161fedef57f"}, - {file = "mitama-4.5.8.tar.gz", hash = "sha256:aab561f6e01bb6c93b6053331a4de22b57fbf0903e8ecdf3b10d28edce429720"}, + {file = "mitama-4.5.12-py3-none-any.whl", hash = "sha256:34e91978132d1190bbc2a908931b824b6c83a8def16f7c96e9382a5805ae4eee"}, + {file = "mitama-4.5.12.tar.gz", hash = "sha256:7417c3185be320d30d9cc49cf48a6a3bf206f195225e56bd9d91d46e4dbe30fc"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, @@ -1419,6 +1480,9 @@ urllib3 = [ {file = "urllib3-1.26.3-py2.py3-none-any.whl", hash = "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80"}, {file = "urllib3-1.26.3.tar.gz", hash = "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73"}, ] +uwsgi = [ + {file = "uWSGI-2.0.19.1.tar.gz", hash = "sha256:faa85e053c0b1be4d5585b0858d3a511d2cd10201802e8676060fd0a109e5869"}, +] watchdog = [ {file = "watchdog-2.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1f518a6940cde8720b8826a705c164e6b9bd6cf8c00f14269ffac51e017e06ec"}, {file = "watchdog-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74528772516228f6a015a647027057939ff0b695a0b864cb3037e8e1aabc7ca0"}, @@ -1446,6 +1510,10 @@ xmlschema = [ {file = "xmlschema-1.5.2-py3-none-any.whl", hash = "sha256:df7bf5d6d23f5f32d50e573f9ad75a2456029009909b63607560916b0584f89e"}, {file = "xmlschema-1.5.2.tar.gz", hash = "sha256:f821ce780f84c7e61ca1ccf32f23aec400446e74fa5cc888450af7604ce2291f"}, ] +zipp = [ + {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"}, + {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"}, +] "zope.event" = [ {file = "zope.event-4.5.0-py2.py3-none-any.whl", hash = "sha256:2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42"}, {file = "zope.event-4.5.0.tar.gz", hash = "sha256:5e76517f5b9b119acf37ca8819781db6c16ea433f7e2062c4afc2b6fbedb1330"}, diff --git a/pyproject.toml b/pyproject.toml index df1e6a7..b3fd300 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ include = [ [tool.poetry.dependencies] python = "^3.6" GitPython = "^3.1.13" -mitama = "^4.3.3" +mitama = "^4.5.12" docker = "^4.4.4" invoke = "^1.5.0" fabric = "^2.6.0"