You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

49 lines
1.4 KiB

# Copyright 2018 Creu Blanca
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, models, fields
import socket
import logging
class ResRemote(models.Model):
_name = 'res.remote'
_description = 'Remotes'
name = fields.Char(
required=True,
string='Hostname',
index=True,
readonly=True
)
ip = fields.Char(required=True)
in_network = fields.Boolean(
required=True,
help='Shows if the remote can be found through the socket'
)
_sql_constraints = [
('name_unique', 'unique(name)', 'Hostname must be unique')
]
@api.model
def _create_vals(self, addr, hostname):
return {
'name': hostname or addr,
'ip': addr,
'in_network': bool(hostname),
}
@api.model
def _get_remote(self, addr):
try:
hostname, alias, ips = socket.gethostbyaddr(addr)
except socket.herror:
logging.warning('Remote with ip %s could not be found' % addr)
hostname = False
remote = self.search([('name', '=ilike', hostname or addr)])
if not remote:
remote = self.create(self._create_vals(addr, hostname))
if remote.ip != addr:
# IPs can change through time, but hostname should not change
remote.write({'ip': addr})
return remote