この方法で実装しました。
フィードバック歓迎
from django.conf import settings
import psutil
import humanfriendly
from djangotools.utils import testutils
class Check(testutils.Check):
@testutils.skip_if_not_prod
def test_min_cpu_count(self):
min_cpu_count=getattr(settings, 'MIN_CPU_COUNT', None)
self.assertIsNotNone(min_cpu_count, 'settings.MIN_CPU_COUNT not set. Please supply a value.')
self.assertLessEqual(min_cpu_count, psutil.cpu_count())
@testutils.skip_if_not_prod
def test_min_physical_memory(self):
min_physical_memory_orig=getattr(settings, 'MIN_PHYSICAL_MEMORY', None)
self.assertIsNotNone(min_physical_memory_orig, "settings.MIN_PHYSICAL_MEMORY not set. Please supply a value. Example: MIN_PHYSICAL_MEMORY='4G'")
min_physical_memory_bytes=humanfriendly.parse_size(min_physical_memory_orig)
self.longMessage=False
self.assertLessEqual(min_physical_memory_bytes, psutil.virtual_memory().total, 'settings.MIN_PHYSICAL_MEMORY=%r is not satisfied. Total virtual memory of current hardware: %r' % (
min_physical_memory_orig, humanfriendly.format_size(psutil.virtual_memory().total)))
あなたが任意のPythonコードを実行することができるので、 'このようなチェックを実行することが可能であるべきsetup.py'([CPUの(http://stackoverflow.com/a/1006337/ 3005167)、[RAM](http://stackoverflow.com/a/22103295/3005167))があり、条件が満たされていない場合はすぐに破棄されます。そのような機能がdistutilsに組み込まれているかどうかはわかりませんが、そうは思わないでしょう。 – kazemakase
@kazemakaseはい、setup.pyでチェックを実行できます。しかし、私はそれを分割するのが好きです:私のプログラムは制約を定義し、他の部分はテストを担当します。 「unittest」が私の頭に浮かびますが、ここでは単体テストではなく、システムテストです。 – guettli