Coverage for src/backend/InvenTree/plugin/samples/machines/sample_printer.py: 0%

33 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 17:47 +0000

1"""Sample plugin for registering custom machines.""" 

2 

3import time 

4 

5from django.db import models 

6 

7import structlog 

8 

9from machine.machine_type import BaseDriver 

10from plugin import InvenTreePlugin 

11from plugin.machine import BaseMachineType 

12from plugin.machine.machine_types import LabelPrinterBaseDriver, LabelPrinterMachine 

13from plugin.mixins import MachineDriverMixin, SettingsMixin 

14from report.models import LabelTemplate 

15 

16logger = structlog.get_logger('inventree') 

17 

18 

19class SamplePrinterDriver(LabelPrinterBaseDriver): 

20 """Sample printer driver.""" 

21 

22 SLUG = 'sample-printer-driver' 

23 NAME = 'Sample Label Printer Driver' 

24 DESCRIPTION = 'Sample label printing driver for InvenTree' 

25 

26 MACHINE_SETTINGS = { 

27 'CONNECTION': { 

28 'name': 'Connection String', 

29 'description': 'Custom string for connecting to the printer', 

30 'default': '123-xx123:8000', 

31 }, 

32 'DELAY': { 

33 'name': 'Print Delay', 

34 'description': 'Delay (in seconds) before printing', 

35 'default': 0, 

36 'units': 'seconds', 

37 'validator': int, 

38 }, 

39 } 

40 

41 def init_machine(self, machine: BaseMachineType) -> None: 

42 """Machine initialization hook.""" 

43 machine.set_properties([ 

44 {'key': 'Model', 'value': 'Sample Printer 3000'}, 

45 {'key': 'Battery', 'value': 42, 'type': 'progress'}, 

46 ]) 

47 

48 def print_label( 

49 self, 

50 machine: LabelPrinterMachine, 

51 label: LabelTemplate, 

52 item: models.Model, 

53 **kwargs, 

54 ) -> None: 

55 """Send the label to the printer.""" 

56 print_delay = machine.get_setting('DELAY', 'D') 

57 

58 print('MOCK LABEL PRINTING:') 

59 

60 if print_delay > 0: 

61 print(f' - Delaying for {print_delay} seconds...') 

62 time.sleep(print_delay) 

63 

64 print('- machine:', machine) 

65 print('- label:', label) 

66 print('- item:', item) 

67 

68 

69class SamplePrinterMachine(MachineDriverMixin, SettingsMixin, InvenTreePlugin): 

70 """A very simple example of a 'printer' machine plugin. 

71 

72 This plugin class simply prints a message to the logger. 

73 """ 

74 

75 NAME = 'SamplePrinterMachine' 

76 SLUG = 'sample-printer-machine-plugin' 

77 TITLE = 'Sample dummy plugin for printing labels' 

78 

79 VERSION = '0.1' 

80 

81 def get_machine_drivers(self) -> list[BaseDriver]: 

82 """Return a list of drivers registered by this plugin.""" 

83 return [SamplePrinterDriver]