Source code for flexget.plugins.cli.win32_service
import argparse
import os
import socket
import sys
from loguru import logger
import flexget
from flexget import options
from flexget.event import event
from flexget.terminal import console
logger = logger.bind(name='win32_service')
try:
import servicemanager
import win32event
import win32service
import win32serviceutil
class AppServerSvc(win32serviceutil.ServiceFramework):
_svc_name_ = 'FlexGet'
_svc_display_name_ = 'FlexGet Daemon'
_svc_description_ = 'Runs FlexGet tasks according to defined schedules'
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
socket.setdefaulttimeout(60)
self.manager = None
def SvcStop(self): # noqa: N802
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
from flexget.manager import manager
manager.shutdown(finish_queue=False)
self.ReportServiceStatus(win32service.SERVICE_STOPPED)
def SvcDoRun(self): # noqa: N802
servicemanager.LogMsg(
servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, ''),
)
flexget.main(['daemon', 'start'])
except ImportError:
pass
[docs]
def do_cli(manager, options):
import win32file
import win32serviceutil
# We are in a virtualenv, there is some special setup
if hasattr(sys, 'real_prefix') and not os.path.exists(os.path.join(sys.prefix, 'python.exe')):
console('Creating a hard link to virtualenv python.exe in root of virtualenv')
win32file.CreateHardLink(
os.path.join(sys.prefix, 'python.exe'),
os.path.join(sys.prefix, 'Scripts', 'python.exe'),
)
argv = options.args
if options.help:
argv = []
# Hack sys.argv a bit so that we get a better usage message
sys.argv[0] = 'flexget service'
win32serviceutil.HandleCommandLine(AppServerSvc, argv=['flexget service', *argv])
[docs]
@event('options.register')
def register_parser_arguments():
if not sys.platform.startswith('win'):
return
# Still not fully working. Hidden for now.
parser = options.register_command(
'service',
do_cli, # help='set up or control a windows service for the daemon',
add_help=False,
)
parser.add_argument('--help', '-h', action='store_true')
parser.add_argument('args', nargs=argparse.REMAINDER)