У меня есть несколько функций для операций с БД по SSH.
Функции эти выглядят следующим образом:
from sshtunnel import SSHTunnelForwarder
from pymongo import MongoClient
def get_users_mongo(user):
server = SSHTunnelForwarder(
'192.168.20.10',
ssh_username='username',
ssh_password='password',
remote_bind_address=('127.0.0.1', 27017))
server.start()
client = MongoClient('127.0.0.1', server.local_bind_port)
db = client['database']
col = db['collection']
x = col.find_one({'login': user})
del client, db, col
server.stop()
return x
Общая часть в этих функциях - SSH соединение. Мне хочется вынести эту часть кода в декоратор.
Я попробовал реализовать это так:
def connect_to_mongo(func):
def inner(user):
server = SSHTunnelForwarder(
'192.168.20.10',
ssh_username='username',
ssh_password='password',
remote_bind_address=('127.0.0.1', 27017))
server.start()
func(user)
server.stop()
return inner
@connect_to_mongo
def get_users_mongo(user):
client = MongoClient('127.0.0.1', server.local_bind_port)
db = client['database']
col = db['collection']
x = col.find_one({'login': user})
del client, db, col
return x
Можно ли как-то передать server.local_bind_port из декоратора в функцию, не меняя при этом саму функцию?
То есть, чтобы функция get_users_mongo() принимала один позиционный аргумент, а не, например, **kwargs.