sync after creating temp-extensions

main
n0emis 2 years ago
parent d6d664b469
commit 4382942ad8
Signed by: n0emis
GPG Key ID: 00FAF748B777CF10

1
.gitignore vendored

@ -1,2 +1,3 @@
__pycache__ __pycache__
dist/ dist/
.venv

@ -18,15 +18,31 @@ class Dect:
ommsync=True, ommsync=True,
) )
@property
def temp_num_prefix(self):
return next(self.fp.extensions.extensions_by_type("temp")).num
def load_temp_extensions(self):
current_temp_extension = 0
used_temp_extensions = self.c.find_users(lambda u: u.num.startswith(self.temp_num_prefix))
for u in used_temp_extensions:
temp_num = u.num
self.fp.temp_extensions[temp_num] = {
"name": f"Temp {temp_num[4:]}",
"type": "dect",
"trunk": False,
"dialout_allowed": False,
}
def get_temp_number(self): def get_temp_number(self):
temp_num_prefix = next(self.fp.extensions.extensions_by_type("temp")).num
current_temp_extension = 0 current_temp_extension = 0
used_temp_extensions = [u.num[len(temp_num_prefix):] for u in self.c.find_users(lambda u: u.num.startswith(temp_num_prefix))] used_temp_extensions = [num[len(self.temp_num_prefix):] for num, ext in self.fp.temp_extensions.items()]
while "{:0>4}".format(current_temp_extension) in used_temp_extensions: while "{:0>4}".format(current_temp_extension) in used_temp_extensions:
current_temp_extension += 1 current_temp_extension += 1
return "{}{:0>4}".format(temp_num_prefix, current_temp_extension) return "{}{:0>4}".format(self.temp_num_prefix, current_temp_extension)
def get_sip_password_for_number(self, num): def get_sip_password_for_number(self, num):
return num return num
@ -36,10 +52,12 @@ class Dect:
self.c.attach_user_device(u.uid, d.ppn) self.c.attach_user_device(u.uid, d.ppn)
self.c.set_user_relation_fixed(u.uid) self.c.set_user_relation_fixed(u.uid)
self.c.set_user_sipauth(u.uid, num, self.get_sip_password_for_number(num)) self.c.set_user_sipauth(u.uid, num, self.get_sip_password_for_number(num))
return u
def run(self): def run(self):
logger.info("initialising connection to OMM") logger.info("initialising connection to OMM")
self._init_client() self._init_client()
self.load_temp_extensions()
while True: while True:
msg = self.fp.queues["dect"].get() msg = self.fp.queues["dect"].get()
@ -53,6 +71,7 @@ class Dect:
extensions = self.fp.extensions.extensions_by_type("dect") extensions = self.fp.extensions.extensions_by_type("dect")
extensions_by_num = {e.num: e for e in extensions} extensions_by_num = {e.num: e for e in extensions}
extensions_by_ipei = {e._c['dect_ipei']: e for _, e in extensions_by_num.items() if e._c.get('dect_ipei')} extensions_by_ipei = {e._c['dect_ipei']: e for _, e in extensions_by_num.items() if e._c.get('dect_ipei')}
created_tmp_ext = False
users_by_ext = {} users_by_ext = {}
users_by_uid = {} users_by_uid = {}
@ -90,15 +109,30 @@ class Dect:
ui = users_by_uid.get(d.uid) ui = users_by_uid.get(d.uid)
if ui.num != e.num: if ui.num != e.num:
logger.debug(f'User for {d} has wrong number') logger.debug(f'User for {d} has wrong number')
if self.fp.temp_extensions.get(ui.num):
self.fp.temp_extensions.pop(ui.num)
self.c.set_user_num(d.uid, e.num) self.c.set_user_num(d.uid, e.num)
self.c.set_user_sipauth(d.uid, e.num, self.get_sip_password_for_number(e.num)) self.c.set_user_sipauth(d.uid, e.num, self.get_sip_password_for_number(e.num))
self.c.set_user_name(user.uid, e._c['name'])
else: else:
logger.debug(f'Creating and binding user for {d}') logger.debug(f'Creating and binding user for {d}')
self.create_and_bind_user(d, e.num) user = self.create_and_bind_user(d, e.num)
self.c.set_user_name(user.uid, e._c['name'])
elif d.relType == mitel_ommclient2.types.PPRelTypeType("Unbound"): elif d.relType == mitel_ommclient2.types.PPRelTypeType("Unbound"):
temp_num = self.get_temp_number() temp_num = self.get_temp_number()
logger.debug(f'Creating and binding tmp-user for {d}: {temp_num}') logger.debug(f'Creating and binding tmp-user for {d}: {temp_num}')
self.create_and_bind_user(d, temp_num) user = self.create_and_bind_user(d, temp_num)
self.c.set_user_name(user.uid, f"Temp {temp_num[4:]}")
self.fp.temp_extensions[temp_num] = {
"name": f"Temp {temp_num[4:]}",
"type": "dect",
"trunk": False,
"dialout_allowed": False,
}
created_tmp_ext = True
if created_tmp_ext:
self.fp.queues['routing'].put({"type": "sync"})
self.c.connection.close() self.c.connection.close()

@ -17,6 +17,7 @@ logger = logging.getLogger("fieldpoc.fieldpoc")
class FieldPOC: class FieldPOC:
config = None config = None
extensions = None extensions = None
temp_extensions = {}
def __init__(self, config_file_path, extensions_file_path): def __init__(self, config_file_path, extensions_file_path):
logger.info("loading configuration") logger.info("loading configuration")

@ -488,7 +488,9 @@ class Routing:
logger.info("syncing") logger.info("syncing")
state_fieldpoc = BackendNerd() state_fieldpoc = BackendNerd()
state_fieldpoc.load(self.fp.extensions._c) extensions = self.fp.extensions._c.copy()
extensions['extensions'].update(self.fp.temp_extensions)
state_fieldpoc.load(extensions)
state_yate = BackendYwsd() state_yate = BackendYwsd()
state_yate.load("postgresql+psycopg2://{}:{}@{}/{}".format( state_yate.load("postgresql+psycopg2://{}:{}@{}/{}".format(
self.fp.config.database.username, self.fp.config.database.username,

@ -95,7 +95,7 @@
"name": "Temporary Numbers", "name": "Temporary Numbers",
"trunk": false, "trunk": false,
"dialout_allowed": true, "dialout_allowed": true,
"type": "static" "type": "temp"
}, },
"9999": { "9999": {
"name": "DECT Claim Extensions", "name": "DECT Claim Extensions",

Loading…
Cancel
Save