Running dmypy as a systemd user service

オープン
#16,941 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
python

調査の方向性

dmypy start と dmypy daemon のエントリーポイントから始め、--status-file とデフォルトの .dmypy.json の場所がどのように解決されるかを追跡します。その動作を、提案されている XDG_RUNTIME_DIR または /run/user/$UID/mypy の場所と比較します。systemd のユーザーサービスがラッパーなしで dmypy を実行でき、既存の status-file の動作も引き続き利用できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

feature topic-daemon

Feature

Make dmypy look for either its status file or maybe even the socket in a well-known place.

As this well-known place I propose for Linux systems a directory /run/user/$UID/mypy (or the value of the environment variable XDG_RUNTIME_DIR). The name of status file would encode the path for which dmypy is running.

Pitch

mypy can be run as a daemon, which is currently manually started via dmypy start. It can already run in the foreground via dmypy daemon and I have started to use this to start the mypy daemon on login on my Linux system as a systemd user service as this moves the management of the lifecycle of the daemon to the service manager, that I already have running (as does the vast majority of Linux systems), so that I don't have to think about it anymore.

I do this via this service file in ~/.config/systemd/user/

# mypy@.service
[Unit]
Description=mypy daemon

[Service]
Type=simple
WorkingDirectory=%I
ExecStart=dmypy --status-file %t/mypy/%I.json daemon
RuntimeDirectory=mypy

which is instantiated via systemctl enable mypy@$(systemd-escape /path/to/my/project).service. The specifiers %I and %t expand to /path/to/my/project and the value of XDG_RUNTIME_DIR (by default /run/user/$UID). respectively. I then have a wrapper function for dmypy that sets --status-file to the appropriate value for my project directory (/run/user/$UID/mypy/$(systemd-escape $(git rev-parse --show-toplevel)).json to be specific).

I would like to streamline this setup, so that the wrapper is no longer necessary by having mypy look not only for .dmypy.json by default, but also check for the existence of the status file in the above described well-known location. This would allow e.g. for distributions packaging mypy to ship this or a similar service file to users and automatically restart the daemon on upgrades.

The feature itself is extensible. This directory could be used for the dmypy socket directly instead of giving it a random name in /tmp, but I have not yet looked into why this was designed as it is.

I guess a similar feature could be implemented for launchd on MacOS and on Windows, but I have no knowledge of these systems.

主要言語
Python
スター
20.6k
フォーク
3.3k
平均マージ
1日 18時間
マージ済み PR(30日)
54

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

python/mypy のほかの issue

python/mypy の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。