class RoutingTable(Base): """ Routing table object. """ __tablename__ = 'rt_def' __table_args__ = (Comment('Routing tables'), Index('rt_def_u_name', 'name', unique=True), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_NETS', 'cap_read': 'NETS_LIST', 'cap_create': 'NETS_EDIT', 'cap_edit': 'NETS_EDIT', 'cap_delete': 'NETS_EDIT', 'menu_name': _('Routing Tables'), 'show_in_menu': 'admin', 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('rtid', 'name'), 'grid_hidden': ('rtid', ), 'form_view': ('name', ), 'easy_search': ('name', ), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new routing table')) } }) id = Column('rtid', UInt32(), Sequence('rt_def_rtid_seq'), Comment('Routing table ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column(Unicode(255), Comment('Routing table name'), nullable=False, info={ 'header_string': _('Name'), 'column_flex': 1 }) entries = relationship('RoutingTableEntry', backref=backref('table', innerjoin=True), cascade='all, delete-orphan', passive_deletes=True) def __str__(self): return str(self.name)
class PDNSCryptokey(Base): """ PowerDNS Cryptokey """ __tablename__ = 'pdns_cryptokeys' __table_args__ = ( Comment('PowerDNS Cryptokeys'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', # 'cap_read' : 'DOMAINS_LIST', # 'cap_create' : 'DOMAINS_CREATE', # 'cap_edit' : 'DOMAINS_EDIT', # 'cap_delete' : 'DOMAINS_DELETE', 'menu_name': _('PowerDNS Cryptokeys'), 'show_in_menu': 'modules', 'menu_order': 30, 'default_sort': ({ 'property': 'ip', 'direction': 'ASC' }, ), 'grid_view': ('domain_id', 'flags', 'active', 'content'), 'easy_search': ('domain_id', 'flags', 'active', 'content'), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new cryptokey')) } }) id = Column('id', UInt16(), Comment('Cryptokey ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) domain_id = Column('domain_id', UInt16(), Comment('Domain ID'), ForeignKey('pdns_domains.id', name='pdns_cryptokeys_fk_domain_id'), nullable=False, info={'header_string': _('Domain ID')}) flags = Column('flags', UInt16(), Comment('Flags'), nullable=False, info={'header_string': _('Flags')}) active = Column('active', UInt8(), nullable=True, default=None, info={'header_string': _('Active')}) content = Column('content', UnicodeText(), nullable=False, info={'header_string': _('Content')}) def __str__(self): return '%s:%s' % (self.domain_id, self.content)
class PDNSSupermaster(Base): """ PowerDNS Supermaster Record """ __tablename__ = 'pdns_supermasters' __table_args__ = ( Comment('PowerDNS Supermaster record'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', # 'cap_read' : 'DOMAINS_LIST', # 'cap_create' : 'DOMAINS_CREATE', # 'cap_edit' : 'DOMAINS_EDIT', # 'cap_delete' : 'DOMAINS_DELETE', 'menu_name': _('PowerDNS Supermaster Record'), 'show_in_menu': 'modules', 'menu_order': 30, 'default_sort': ({ 'property': 'ip', 'direction': 'ASC' }, ), 'grid_view': ('ip', 'nameserver'), 'easy_search': ('ip', 'nameserver'), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new DNS supermaster record')) } }) id = Column('id', UInt16(), Comment('Supermaster ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) ip = Column('ip', Unicode(64), Comment('IP Address'), nullable=False, info={'header_string': _('IP Address')}) nameserver = Column('nameserver', Unicode(255), Comment('Nameserver'), nullable=False, info={'header_string': _('Nameserver')}) account = Column('account', Unicode(40), Comment('Account'), nullable=True, default=None, info={'header_string': _('Account')}) def __str__(self): return "%s:%s" % (self.ip, self.nameserver)
class UserDomain(Base): """ A Domain-User Relation object. """ __tablename__ = 'userdomains' __table_args__ = ( Comment('User Domains'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', # 'cap_read' : 'DOMAINS_LIST', # 'cap_create' : 'DOMAINS_CREATE', # 'cap_edit' : 'DOMAINS_EDIT', # 'cap_delete' : 'DOMAINS_DELETE', 'show_in_menu': 'modules', 'menu_name': _('User Domains'), 'menu_order': 50, 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('accessuser', 'domainname'), 'form_view': ('accessuser', 'domainname'), 'easy_search': ('domain', 'accessuser'), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new user-domain relation')) } }) id = Column('id', UInt32(), Sequence('domains_def_domainid_seq'), Comment('Domain Name ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) accessuser = Column('accessuserid', UInt32(), ForeignKey('entities_access.entityid', name='userdomains_fk_accessuserid', onupdate='CASCADE'), Comment('Access Entity ID'), nullable=False, info={'header_string': _('User')}) domainname = Column('domainname', Unicode(255), Comment('Domain name'), nullable=False, info={'header_string': _('Domain Name')}) def __str__(self): return '%s:%s' % str(self.domainname, self.accessuser)
class PDNSTsigkey(Base): """ PowerDNS TSIG shared secrets """ __tablename__ = 'pdns_tsigkeys' __table_args__ = ( Comment('PowerDNS TSIG shared secrets'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', # 'cap_read' : 'DOMAINS_LIST', # 'cap_create' : 'DOMAINS_CREATE', # 'cap_edit' : 'DOMAINS_EDIT', # 'cap_delete' : 'DOMAINS_DELETE', # 'menu_name' : _('TSIG Shared Secrets'), 'show_in_menu': 'modules', 'menu_order': 30, 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('name', 'algorithm', 'secret'), 'easy_search': ('name', 'algorithm', 'secret'), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new TSIG shared secret')) } }) id = Column('id', UInt16(), Comment('Secret ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column('name', Unicode(255), Comment('Shared secret name'), nullable=True, default=None, info={'header_string': _('Name')}) algorithm = Column('algorithm', Unicode(50), nullable=True, default=None, info={'header_string': _('Algorithm')}) secret = Column('secret', Unicode(255), nullable=True, default=None, info={'header_string': _('Secret')}) def __str__(self): return self.name
class PDNSTemplateType(Base): """ PowerDNS Service Template Typeclass """ __tablename__ = 'pdns_templatetypes' __table_args__ = ( Comment('PowerDNS Template Types'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', # 'cap_read' : 'DOMAINS_LIST', # 'cap_create' : 'DOMAINS_CREATE', # 'cap_edit' : 'DOMAINS_EDIT', # 'cap_delete' : 'DOMAINS_DELETE', 'show_in_menu': 'admin', 'menu_name': _('PDNS Template Types'), 'menu_order': 50, 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('name', 'descr'), 'form_view': ('name', 'descr'), 'easy_search': ('name', ), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new template type')) } }) id = Column('id', UInt32(), Sequence('pdns_templatetypes_templateid_seq'), Comment('Template Type ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column('name', Unicode(255), Comment('Template Type'), nullable=False, info={'header_string': _('Template Type')}) descr = Column('descr', UnicodeText(), Comment('Description'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Description')}) fields = association_proxy('template_fields', 'field') def __str__(self): return self.name
class Place(Base): """ Place object. Used for any container, shelf or storage space. """ @classmethod def _filter_hgroup(cls, query, value): if not isinstance(value, list): value = [value] return query.filter(Place.house_id.in_( DBSession().query(HouseGroupMapping.house_id)\ .filter(HouseGroupMapping.group_id.in_(value)) )) @classmethod def _filter_address(cls, query, value): if not isinstance(value, dict): return query if 'houseid' in value: val = int(value['houseid']) if val > 0: query = query.filter(Place.house_id == val) elif 'streetid' in value: val = int(value['streetid']) if val > 0: query = query.join(Place.house).filter(House.street_id == val) elif 'districtid' in value: val = int(value['districtid']) if val > 0: query = query.join(Place.house).join(House.street).filter(or_( Street.district_id == val, House.district_id == val )) elif 'cityid' in value: val = int(value['cityid']) if val > 0: query = query.join(Place.house).join(House.street).filter(Street.city_id == val) return query __tablename__ = 'addr_places' __table_args__ = ( Comment('Places'), Index('addr_places_u_number', 'number', unique=True), Index('addr_places_i_houseid', 'houseid'), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_GEO', 'cap_read' : 'GEO_LIST', 'cap_create' : 'GEO_CREATE', 'cap_edit' : 'GEO_EDIT', 'cap_delete' : 'GEO_DELETE', 'show_in_menu' : 'admin', 'menu_name' : _('Places'), 'default_sort' : ({ 'property' : 'number', 'direction' : 'ASC' },), 'grid_view' : ('placeid', 'house', 'number', 'name', 'entrance', 'floor', 'descr'), 'grid_hidden' : ('placeid',), 'easy_search' : ('number',), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'extra_search' : ( CheckboxGroupFilter('hg', _filter_hgroup, title=_('House Group'), data='NetProfile.store.geo.HouseGroup', value_field='ahgid', display_field='name' ), AddressFilter('address', _filter_address, title=_('Address') ) ), 'create_wizard' : SimpleWizard(title=_('Add new place')) } } ) id = Column( 'placeid', UInt32(), Sequence('addr_places_placeid_seq'), Comment('Place ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) house_id = Column( 'houseid', UInt32(), ForeignKey('addr_houses.houseid', name='addr_places_fk_houseid', ondelete='CASCADE', onupdate='CASCADE'), Comment('House ID'), nullable=False, info={ 'header_string' : _('House'), 'filter_type' : 'none', 'column_flex' : 2 } ) number = Column( UInt16(), Comment('Place number'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Number') } ) name = Column( Unicode(255), Comment('Place name'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Name'), 'column_flex' : 2 } ) entrance = Column( UInt8(), Comment('Entrance number'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Entr. #') } ) floor = Column( UInt8(), Comment('Floor number'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Floor #') } ) description = Column( 'descr', UnicodeText(), Comment('Place description'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Description'), 'column_flex' : 1 } ) def __str__(self): if self.number: fmt = _('#%s') req = getattr(self, '__req__', None) if req: fmt = req.localizer.translate(fmt) return fmt % (str(self.number),) return str(self.name)
class Network(Base): """ Network object. """ __tablename__ = 'nets_def' __table_args__ = ( Comment('Networks'), Index('nets_def_u_name', 'name', unique=True), Index('nets_def_u_ipaddr', 'ipaddr', unique=True), Index('nets_def_u_ip6addr', 'ip6addr', unique=True), Index('nets_def_i_domainid', 'domainid'), Index('nets_def_i_netgid', 'netgid'), Index('nets_def_i_rtid', 'rtid'), Index('nets_def_i_mgmtdid', 'mgmtdid'), Trigger('after', 'insert', 't_nets_def_ai'), Trigger('after', 'update', 't_nets_def_au'), Trigger('after', 'delete', 't_nets_def_ad'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_NETS', 'cap_read': 'NETS_LIST', 'cap_create': 'NETS_CREATE', 'cap_edit': 'NETS_EDIT', 'cap_delete': 'NETS_DELETE', 'menu_name': _('Networks'), 'show_in_menu': 'modules', 'menu_main': True, 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('netid', 'name', 'domain', 'group', 'ipaddr', 'ip6addr', MarkupColumn( name='state', header_string=_('State'), template=TemplateObject( 'netprofile_networks:templates/networks_icons.mak'), column_width=40, column_resizable=False)), 'grid_hidden': ('netid', 'domain', 'group'), 'form_view': ('name', 'domain', 'group', 'management_device', 'enabled', 'public', 'ipaddr', 'cidr', 'ip6addr', 'cidr6', 'vlanid', 'routing_table', 'gueststart', 'guestend', 'gueststart6', 'guestend6', 'descr'), 'easy_search': ('name', ), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new network')) } }) id = Column('netid', UInt32(), Sequence('nets_def_netid_seq'), Comment('Network ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column(Unicode(255), Comment('Network name'), nullable=False, info={ 'header_string': _('Name'), 'column_flex': 1 }) domain_id = Column('domainid', UInt32(), ForeignKey('domains_def.domainid', name='nets_def_fk_domainid', onupdate='CASCADE'), Comment('Domain ID'), nullable=False, info={ 'header_string': _('Domain'), 'filter_type': 'nplist', 'column_flex': 1 }) group_id = Column('netgid', UInt32(), ForeignKey('nets_groups.netgid', name='nets_def_fk_netgid', ondelete='SET NULL', onupdate='CASCADE'), Comment('Network group ID'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string': _('Group'), 'filter_type': 'nplist', 'column_flex': 1 }) management_device_id = Column('mgmtdid', UInt32(), ForeignKey('devices_network.did', name='nets_def_fk_mgmtdid', ondelete='SET NULL', onupdate='CASCADE'), Comment('Management device ID'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string': _('Management Device'), 'filter_type': 'none' }) enabled = Column(NPBoolean(), Comment('Is network enabled?'), nullable=False, default=True, server_default=npbool(True), info={'header_string': _('Enabled')}) public = Column(NPBoolean(), Comment('Is network visible to outsiders?'), nullable=False, default=True, server_default=npbool(True), info={'header_string': _('Public')}) ipv4_address = Column('ipaddr', IPv4Address(), Comment('Network IPv4 address'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('IPv4 Address')}) ipv6_address = Column('ip6addr', IPv6Address(), Comment('Network IPv6 address'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('IPv6 Address')}) ipv4_cidr = Column('cidr', UInt8(), Comment('Network CIDR number'), nullable=False, default=24, server_default=text('24'), info={'header_string': _('IPv4 Netmask')}) ipv6_cidr = Column('cidr6', UInt8(), Comment('Network CIDRv6 number'), nullable=False, default=64, server_default=text('64'), info={'header_string': _('IPv6 Netmask')}) vlan_id = Column('vlanid', UInt16(), Comment('Network VLAN ID'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('VLAN')}) routing_table_id = Column('rtid', UInt32(), ForeignKey('rt_def.rtid', name='nets_def_fk_rtid', ondelete='SET NULL', onupdate='CASCADE'), Comment('Routing table ID'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string': _('Routing Table'), 'filter_type': 'nplist' }) ipv4_guest_start = Column( 'gueststart', UInt16(), Comment('Start of IPv4 guest allocation area'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Start of IPv4 Guest Allocation Area')}) ipv4_guest_end = Column( 'guestend', UInt16(), Comment('End of IPv4 guest allocation area'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('End of IPv4 Guest Allocation Area')}) ipv6_guest_start = Column( 'gueststart6', IPv6Offset(), Comment('Start of IPv6 guest allocation area'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Start of IPv6 Guest Allocation Area')}) ipv6_guest_end = Column( 'guestend6', IPv6Offset(), Comment('End of IPv6 guest allocation area'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('End of IPv6 Guest Allocation Area')}) description = Column('descr', UnicodeText(), Comment('Network description'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Description')}) domain = relationship('Domain', innerjoin=True, backref='networks') group = relationship('NetworkGroup', backref=backref('networks', passive_deletes=True)) management_device = relationship('NetworkDevice', backref=backref('networks', passive_deletes=True)) routing_table = relationship('RoutingTable', backref=backref('networks', passive_deletes=True)) services = relationship('NetworkService', backref=backref('network', innerjoin=True), cascade='all, delete-orphan', passive_deletes=True) @property def ipv4_network(self): if self.ipv4_address: return ipaddr.IPv4Network( '%s/%s' % (str(self.ipv4_address), str(self.ipv4_cidr))) @property def ipv6_network(self): if self.ipv6_address: return ipaddr.IPv6Network( '%s/%s' % (str(self.ipv6_address), str(self.ipv6_cidr))) def __str__(self): return str(self.name)
class RoutingTableEntry(Base): """ IPv4 routing table entry object. """ __tablename__ = 'rt_bits' __table_args__ = (Comment('IPv4 routing table entries'), Index('rt_bits_i_rtid', 'rtid'), Index('rt_bits_i_rtr', 'rtr'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_NETS', 'cap_read': 'NETS_LIST', 'cap_create': 'NETS_EDIT', 'cap_edit': 'NETS_EDIT', 'cap_delete': 'NETS_EDIT', 'menu_name': _('Routing Table Entries'), 'grid_view': ('rtbid', 'table', 'net', 'cidr', 'next_hop'), 'grid_hidden': ('rtbid', ), 'form_view': ('table', 'net', 'cidr', 'next_hop'), 'create_wizard': SimpleWizard( title=_('Add new IPv4 routing table entry')) } }) id = Column('rtbid', UInt32(), Sequence('rt_bits_rtbid_seq'), Comment('Routing table bit ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) table_id = Column('rtid', UInt32(), ForeignKey('rt_def.rtid', name='rt_bits_fk_rtid', onupdate='CASCADE', ondelete='CASCADE'), Comment('Routing table ID'), nullable=False, info={ 'header_string': _('Table'), 'filter_type': 'nplist', 'column_flex': 1 }) network = Column('net', IPv4Address(), Comment('Network address'), nullable=False, info={ 'header_string': _('Network'), 'column_flex': 1 }) cidr = Column(UInt8(), Comment('Network CIDR'), nullable=False, default=24, server_default=text('24'), info={'header_string': _('Netmask')}) next_hop_id = Column('rtr', UInt32(), ForeignKey('hosts_def.hostid', name='rt_bits_fk_hostid', onupdate='CASCADE', ondelete='CASCADE'), Comment('Next hop host ID'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string': _('Next Hop'), 'filter_type': 'none', 'column_flex': 1 }) next_hop = relationship('Host', backref=backref('next_hops', cascade='all, delete-orphan', passive_deletes=True)) @property def ipv4_network(self): return ipaddr.IPv4Network('%s/%s' % (str(self.network), str(self.cidr))) def dhcp_strings(self, net): if self.next_hop: gws = self.next_hop.ipv4_addresses else: gws = itertools.chain.from_iterable(ns.host.ipv4_addresses for ns in net.services if ns.type_id == 4) ret = [] netstr = ':'.join('{0:02x}'.format(o) for o in self.network.packed[:math.ceil(self.cidr / 8)]) for gw in gws: ret.append('%02x%s%s:%s' % (self.cidr, ':' if self.cidr > 0 else '', netstr, '%02x:%02x:%02x:%02x' % tuple(gw.address.packed))) return ret
class City(Base): """ City object. """ __tablename__ = 'addr_cities' __table_args__ = ( Comment('Cities'), Index('addr_cities_u_name', 'name', unique=True), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_GEO', 'cap_read' : 'GEO_LIST', 'cap_create' : 'GEO_CREATE', 'cap_edit' : 'GEO_EDIT', 'cap_delete' : 'GEO_DELETE', 'show_in_menu' : 'admin', 'menu_name' : _('Cities'), 'default_sort' : ({ 'property': 'name' ,'direction': 'ASC' },), 'grid_view' : ('cityid', 'name', 'prefix'), 'grid_hidden' : ('cityid',), 'form_view' : ('name', 'prefix', 'descr'), 'easy_search' : ('name',), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new city')) } } ) id = Column( 'cityid', UInt32(), Sequence('addr_cities_cityid_seq'), Comment('City ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) name = Column( Unicode(255), Comment('City name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 3 } ) prefix = Column( Unicode(32), Comment('Contract prefix'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Prefix'), 'column_flex' : 1 } ) description = Column( 'descr', UnicodeText(), Comment('City description'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Description') } ) districts = relationship( 'District', backref=backref('city', innerjoin=True), cascade='all, delete-orphan', passive_deletes=True ) streets = relationship( 'Street', cascade='all, delete-orphan', passive_deletes=True ) def __str__(self): return str(self.name)
class Currency(Base): """ Stash currency object. """ __tablename__ = 'currencies_def' __table_args__ = ( Comment('Currencies'), Index('currencies_def_u_name', 'name', unique=True), Index('currencies_def_u_code', 'code', unique=True), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_STASHES', 'cap_read' : 'STASHES_LIST', 'cap_create' : 'STASHES_CURRENCIES_CREATE', 'cap_edit' : 'STASHES_CURRENCIES_EDIT', 'cap_delete' : 'STASHES_CURRENCIES_DELETE', 'menu_name' : _('Currencies'), 'show_in_menu' : 'admin', 'default_sort' : ({ 'property': 'name', 'direction': 'ASC' },), 'grid_view' : ('currid', 'name', 'code'), 'grid_hidden' : ('currid',), 'form_view' : ( 'name', 'code', 'prefix', 'suffix', 'xchange_rate', 'xchange_from', 'xchange_to', 'convert_from', 'convert_to', 'allow_credit', 'allow_accounts', 'allow_services', 'allow_futures', 'oper_visible', 'user_visible', 'descr' ), 'easy_search' : ('name', 'code', 'prefix', 'suffix'), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new currency')) } } ) id = Column( 'currid', UInt32(), Sequence('currencies_def_currid_seq'), Comment('Currency ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) name = Column( Unicode(255), Comment('Currency name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 3 } ) code = Column( CHAR(3), Comment('ISO 4217 currency code'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Code') } ) prefix = Column( Unicode(16), Comment('Currency symbol prefix'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Prefix') } ) suffix = Column( Unicode(16), Comment('Currency symbol suffix'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Suffix') } ) exchange_rate = Column( 'xchange_rate', Money(), Comment('Fallback exchange rate with default currency'), nullable=False, default=1, server_default=text('1'), info={ 'header_string' : _('Exchange Rate') } ) can_exchange_from = Column( 'xchange_from', NPBoolean(), Comment('Can exchange from this currency'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Exchange From') } ) can_exchange_to = Column( 'xchange_to', NPBoolean(), Comment('Can exchange to this currency'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Exchange To') } ) can_convert_from = Column( 'convert_from', NPBoolean(), Comment('Allow converting stashes from this currency'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Convert From') } ) can_convert_to = Column( 'convert_to', NPBoolean(), Comment('Allow converting stashes to this currency'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Convert To') } ) allow_credit = Column( NPBoolean(), Comment('Allow crediting with this currency'), nullable=False, default=True, server_default=npbool(True), info={ 'header_string' : _('Crediting') } ) allow_accounts = Column( NPBoolean(), Comment('Allow linking accounts to stashes with this currency'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Allow Accounts') } ) allow_services = Column( NPBoolean(), Comment('Allow linking paid services to stashes with this currency'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Allow Paid Services') } ) allow_futures = Column( NPBoolean(), Comment('Allow promised payments to stashes with this currency'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Allow Promised Payments') } ) visible_to_operator = Column( 'oper_visible', NPBoolean(), Comment('Visibility in operator interface'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Visible to Operator') } ) visible_to_user = Column( 'user_visible', NPBoolean(), Comment('Visibility in user interface'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Visible to User') } ) description = Column( 'descr', UnicodeText(), Comment('Currency description'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Description') } ) def __str__(self): return str(self.name) def format(self, req, amount): return money_format(req, amount, code=self.code, prefix=self.prefix, suffix=self.suffix) def format_long(self, req, amount): return money_format_long(req, amount, code=self.code)
class ServerType(Base): """ Server type definition. """ __tablename__ = 'srv_types' __table_args__ = ( Comment('Server types'), Index('srv_types_u_name', 'name', unique=True), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_ADMIN', 'cap_read' : 'SRV_LIST', 'cap_create' : 'SRVTYPES_CREATE', 'cap_edit' : 'SRVTYPES_EDIT', 'cap_delete' : 'SRVTYPES_DELETE', 'show_in_menu' : 'admin', 'menu_name' : _('Server Types'), 'default_sort' : ({ 'property': 'name' ,'direction': 'ASC' },), 'grid_view' : ('srvtypeid', 'name'), 'grid_hidden' : ('srvtypeid',), 'form_view' : ('name', 'descr'), 'easy_search' : ('name',), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new server type')) } } ) id = Column( 'srvtypeid', UInt32(), Sequence('srv_types_srvtypeid_seq', start=101, increment=1), Comment('Server type ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) name = Column( Unicode(255), Comment('Server type name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 1 } ) generator_name = Column( 'gen', ASCIIString(64), Comment('Registered generator class name'), nullable=False, info={ 'header_string' : _('Class') } ) parameter_defaults = Column( 'paramdef', PickleType(), Comment('Dictionary of parameter defaults'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Defaults') } ) description = Column( 'descr', UnicodeText(), Comment('Server type description'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Description') } ) servers = relationship( 'Server', backref=backref('type', innerjoin=True) ) hosts = association_proxy( 'servers', 'host', creator=lambda v: Server(host=v) ) def __str__(self): return '%s' % str(self.name)
class PDNSDomain(Base): """ PowerDNS Domain """ __tablename__ = 'pdns_domains' __table_args__ = ( Comment('PowerDNS Domain Record'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', # 'cap_read' : 'DOMAINS_LIST', # 'cap_create' : 'DOMAINS_CREATE', # 'cap_edit' : 'DOMAINS_EDIT', # 'cap_delete' : 'DOMAINS_DELETE', 'menu_name': _('PowerDNS Domain Records'), 'show_in_menu': 'modules', 'menu_order': 30, 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('name', 'master', 'last_check', 'dtype', 'notified_serial', 'account'), 'easy_search': ('name', 'master', 'last_check', 'dtype', 'notified_serial', 'account'), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new DNS domain')) } }) id = Column('id', UInt16(), Comment('Domain ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column('name', Unicode(255), Comment('Name'), nullable=False, info={'header_string': _('Name')}) master = Column('master', Unicode(128), Comment('Master Nameserver'), nullable=True, default=None, info={'header_string': _('Master')}) last_check = Column('last_check', TIMESTAMP(), Comment('Last check timestamp'), nullable=True, default=None, info={'header_string': _('Last Check')}) dtype = Column('type', Unicode(10), Comment('Domain Type'), nullable=True, default=None, info={'header_string': _('Type')}) notified_serial = Column('notified_serial', UInt16(), Comment('Notified Serial'), nullable=True, default=None, info={'header_string': _('Notified Serial')}) account = Column( 'account', UInt32(), # Unicode(40), ForeignKey('entities_access.entityid', name='pdns_domains_fk_accessuserid', onupdate='CASCADE'), Comment('Account'), nullable=False, # default=None, info={'header_string': _('Account')}) domainrecords = relationship("PDNSRecord", cascade='all, delete-orphan') def __str__(self): return self.name
class Server(Base): """ Server instance object. """ __tablename__ = 'srv_def' __table_args__ = ( Comment('Servers'), Index('srv_def_u_srv', 'hostid', 'srvtypeid', unique=True), Index('srv_def_i_srvtypeid', 'srvtypeid'), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_ADMIN', 'cap_read' : 'SRV_LIST', 'cap_create' : 'SRV_CREATE', 'cap_edit' : 'SRV_EDIT', 'cap_delete' : 'SRV_DELETE', 'show_in_menu' : 'admin', 'menu_name' : _('Servers'), 'grid_view' : ('srvid', 'host', 'type'), 'grid_hidden' : ('srvid',), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new server')), 'extra_actions' : [{ 'iconCls' : 'ico-redo', 'tooltip' : _('Generate server configuration'), 'itemId' : 'srvgen' }] } } ) id = Column( 'srvid', UInt32(), Sequence('srv_def_srvid_seq'), Comment('Server ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) host_id = Column( 'hostid', UInt32(), ForeignKey('hosts_def.hostid', name='srv_def_fk_hostid', onupdate='CASCADE'), Comment('Host ID'), nullable=False, info={ 'header_string' : _('Host'), 'column_flex' : 1, 'filter_type' : 'none' } ) type_id = Column( 'srvtypeid', UInt32(), ForeignKey('srv_types.srvtypeid', name='srv_def_fk_srvtypeid', onupdate='CASCADE'), Comment('Server type ID'), nullable=False, info={ 'header_string' : _('Type'), 'column_flex' : 1, 'filter_type' : 'nplist' } ) host = relationship( 'Host', innerjoin=True, backref='servers' ) parameters = relationship( 'ServerParameter', collection_class=attribute_mapped_collection('name'), backref=backref('server', innerjoin=True), cascade='all, delete-orphan', passive_deletes=True ) def __str__(self): return '%s: %s' % ( str(self.type), str(self.host) ) def get_param(self, name, default=None): # TODO: Maybe fix to be more DB-friendly? if name in self.parameters: return self.parameters[name].value srvt = self.type try: if name in srvt.parameter_defaults: return srvt.parameter_defaults[name] except (TypeError, IndexError): pass return default def get_bool_param(self, name, default=False): ret = self.get_param(name, default) if isinstance(ret, bool): return ret if not isinstance(ret, str): raise ValueError('Invalid parameter type') ret = ret.lower() if ret in ('t', 'true', 'y', 'yes', 'on', '1', 'enabled'): return True if ret in ('f', 'false', 'n', 'no', 'off', '0', 'disabled'): return False return default def has_param(self, name): ret = self.get_param(name) return ret not in (None, False, '')
class ServerParameter(Base): """ Parameter of a server instance object. """ __tablename__ = 'srv_params' __table_args__ = ( Comment('Server parameters'), Index('srv_params_u_param', 'srvid', 'name', unique=True), Index('srv_params_i_name', 'name'), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_ADMIN', 'cap_read' : 'SRV_LIST', 'cap_create' : 'SRV_EDIT', 'cap_edit' : 'SRV_EDIT', 'cap_delete' : 'SRV_EDIT', 'menu_name' : _('Server Parameters'), 'grid_view' : ('srvparamid', 'server', 'name', 'value'), 'grid_hidden' : ('srvparamid',), 'create_wizard' : SimpleWizard(title=_('Add new parameter')) } } ) id = Column( 'srvparamid', UInt32(), Sequence('srv_params_srvparamid_seq'), Comment('Server parameter ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) server_id = Column( 'srvid', UInt32(), ForeignKey('srv_def.srvid', name='srv_params_fk_srvid', onupdate='CASCADE', ondelete='CASCADE'), Comment('Server ID'), nullable=False, info={ 'header_string' : _('Server'), 'column_flex' : 1, 'filter_type' : 'none' } ) name = Column( ASCIIString(64), Comment('Server parameter name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 1 } ) value = Column( Unicode(255), Comment('Server parameter value'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Value'), 'column_flex' : 1 } ) def __str__(self): return '%s: %s' % ( str(self.server), str(self.name) )
class PaidServiceType(Base): """ Paid service type object. """ __tablename__ = 'paid_types' __table_args__ = (Comment('Paid service types'), Index('paid_types_i_qp_type', 'qp_type'), Index('paid_types_u_name', 'name', unique=True), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_PAIDSERVICES', 'cap_read': 'PAIDSERVICES_LIST', 'cap_create': 'PAIDSERVICETYPES_CREATE', 'cap_edit': 'PAIDSERVICETYPES_EDIT', 'cap_delete': 'PAIDSERVICETYPES_DELETE', 'menu_main': True, 'menu_name': _('Paid Services'), 'show_in_menu': 'modules', 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('paidid', 'name', 'isum', 'qsum', 'qp_amount', 'qp_unit', 'qp_type', 'sp_amount'), 'grid_hidden': ('paidid', 'sp_amount'), 'form_view': ('name', 'isum', 'qsum', 'qp_amount', 'qp_unit', 'qp_type', 'qp_order', 'sp_amount', 'cb_before', 'cb_success', 'cb_failure', 'cb_ratemod', 'descr'), 'easy_search': ('name', 'descr'), 'extra_data': ('formatted_initial_sum', 'formatted_quota_sum'), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new type')) } }) id = Column('paidid', UInt32(), Sequence('paid_types_paidid_seq'), Comment('Paid service ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column(Unicode(255), Comment('Paid service name'), nullable=False, info={ 'header_string': _('Name'), 'column_flex': 3 }) initial_sum = Column('isum', Money(), Comment('Initial payment sum'), nullable=False, default=0, server_default=text('0'), info={ 'header_string': _('Initial Payment'), 'column_flex': 1, 'column_xtype': 'templatecolumn', 'template': '{formatted_initial_sum}' }) quota_sum = Column('qsum', Money(), Comment('Quota sum'), nullable=False, default=0, server_default=text('0'), info={ 'header_string': _('Quota Payment'), 'column_flex': 1, 'column_xtype': 'templatecolumn', 'template': '{formatted_quota_sum}' }) quota_period_type = Column('qp_type', PaidServiceQPType.db_type(), Comment('Quota period type'), nullable=False, default=PaidServiceQPType.independent, server_default=PaidServiceQPType.independent, info={'header_string': _('Type')}) pay_order = Column('qp_order', UInt8(), Comment('Pay order for linked services'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('Pay Order')}) skipped_periods = Column('sp_amount', UInt16(), Comment('Number of skipped periods'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('Skipped Periods')}) quota_period_amount = Column( 'qp_amount', UInt16(), Comment('Quota period amount'), nullable=False, default=1, server_default=text('1'), info={'header_string': _('Quota Period Amount')}) quota_period_unit = Column('qp_unit', QuotaPeriodUnit.db_type(), Comment('Quota period unit'), nullable=False, default=QuotaPeriodUnit.calendar_month, server_default=QuotaPeriodUnit.calendar_month, info={'header_string': _('Quota Period Unit')}) cb_before = Column(ASCIIString(255), Comment('Callback before charging'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Callback Before Charging')}) cb_success = Column(ASCIIString(255), Comment('Callback on success'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Callback on Success')}) cb_failure = Column(ASCIIString(255), Comment('Callback on failure'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Callback on Failure')}) cb_ratemod = Column(ASCIIString(255), Comment('Callback on linked rate'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Callback on Linked Rate')}) description = Column('descr', UnicodeText(), Comment('Paid service description'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Description')}) def __str__(self): return '%s' % (str(self.name), ) def formatted_initial_sum(self, req): return money_format(req, self.initial_sum) def formatted_quota_sum(self, req): return money_format(req, self.quota_sum)
class StashIOType(Base): """ Stash I/O operation type object. """ __tablename__ = 'stashes_io_types' __table_args__ = ( Comment('Stashes input/output operation types'), Index('stashes_io_types_i_type', 'type'), Index('stashes_io_types_u_ftype', 'ftype', unique=True), Index('stashes_io_types_i_oper_visible', 'oper_visible'), Index('stashes_io_types_i_user_visible', 'user_visible'), Index('stashes_io_types_i_oper_cap', 'oper_cap'), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_STASHES', 'cap_read' : 'STASHES_IO', 'cap_create' : 'STASHES_IOTYPES_CREATE', 'cap_edit' : 'STASHES_IOTYPES_EDIT', 'cap_delete' : 'STASHES_IOTYPES_DELETE', 'menu_name' : _('Operation Types'), 'show_in_menu' : 'admin', 'default_sort' : ({ 'property': 'name', 'direction': 'ASC' },), 'grid_view' : ('name', 'class', 'type'), 'form_view' : ('name', 'class', 'type', 'ftype', 'user_visible', 'oper_visible', 'oper_capability', 'pays_futures', 'descr'), 'easy_search' : ('name',), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new operation type')) } } ) id = Column( 'siotypeid', UInt32(), Sequence('stashes_io_types_siotypeid_seq', start=101, increment=1), Comment('Stash I/O ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) name = Column( Unicode(255), Comment('Stash I/O name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 1 } ) io_class = Column( 'class', OperationClass.db_type(), Comment('Stash I/O class'), nullable=False, default=OperationClass.system, server_default=OperationClass.system, info={ 'header_string' : _('Class') } ) type = Column( IOOperationType.db_type(), Comment('Stash I/O type'), nullable=False, default=IOOperationType.bidirectional, server_default=IOOperationType.bidirectional, info={ 'header_string' : _('Type') } ) function_type = Column( 'ftype', IOFunctionType.db_type(), Comment('Special built-in function for this I/O type'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Function') } ) visible_to_operator = Column( 'oper_visible', NPBoolean(), Comment('Visibility in operator interface'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Visible to Operator') } ) visible_to_user = Column( 'user_visible', NPBoolean(), Comment('Visibility in user interface'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Visible to User') } ) fulfills_futures = Column( 'pays_futures', NPBoolean(), Comment('Serves as a fulfillment for promised payments'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Counts for promised payments') } ) oper_capability_code = Column( 'oper_cap', ASCIIString(48), Comment('Stash I/O required operator capability'), ForeignKey('privileges.code', name='stashes_io_types_fk_oper_cap', onupdate='CASCADE', ondelete='SET NULL'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Required Operator Capability') } ) description = Column( 'descr', UnicodeText(), Comment('Stash I/O description'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Description') } ) oper_capability = relationship( 'Privilege', backref=backref( 'stash_io_types', passive_deletes=True ), lazy='joined' ) def __str__(self): if self.io_class == OperationClass.system: req = getattr(self, '__req__', None) if req: return req.localizer.translate(_(self.name)) return str(self.name)
class Stash(Base): """ Stash object. """ __tablename__ = 'stashes_def' __table_args__ = ( Comment('Stashes of money'), Index('stashes_def_i_entityid', 'entityid'), Index('stashes_def_i_currid', 'currid'), Trigger('before', 'insert', 't_stashes_def_bi'), Trigger('before', 'update', 't_stashes_def_bu'), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_STASHES', 'cap_read' : 'STASHES_LIST', 'cap_create' : 'STASHES_CREATE', 'cap_edit' : 'STASHES_EDIT', 'cap_delete' : 'STASHES_DELETE', 'menu_name' : _('Stashes'), 'menu_main' : True, 'show_in_menu' : 'modules', 'default_sort' : ({ 'property': 'name', 'direction': 'ASC' },), 'grid_view' : ('stashid', 'entity', 'name', 'currency', 'amount', 'credit'), 'grid_hidden' : ('stashid', 'currency'), 'form_view' : ('entity', 'name', 'currency', 'amount', 'credit', 'alltime_min', 'alltime_max'), 'easy_search' : ('name',), 'extra_data' : ('formatted_amount', 'formatted_credit'), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new stash')) } } ) id = Column( 'stashid', UInt32(), Sequence('stashes_def_stashid_seq'), Comment('Stash ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) entity_id = Column( 'entityid', UInt32(), Comment('Owner entity ID'), ForeignKey('entities_def.entityid', name='stashes_def_fk_entityid', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, info={ 'header_string' : _('Entity'), 'filter_type' : 'none', 'column_flex' : 2 } ) currency_id = Column( 'currid', UInt32(), Comment('Currency ID'), ForeignKey('currencies_def.currid', name='stashes_def_fk_currid', onupdate='CASCADE'), # ondelete=RESTRICT nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Currency'), 'editor_xtype' : 'simplemodelselect', 'editor_config' : { 'extraParams' : { '__ffilter' : [{ 'property' : 'oper_visible', 'operator' : 'eq', 'value' : True }]} }, 'filter_type' : 'nplist' } ) name = Column( Unicode(255), Comment('Stash name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 3 } ) amount = Column( Money(), Comment('Stash balance'), nullable=False, default=0, server_default=text('0'), info={ 'header_string' : _('Balance'), 'column_flex' : 1, 'column_xtype' : 'templatecolumn', 'template' : '{formatted_amount}' } ) credit = Column( Money(), Comment('Stash credit'), nullable=False, default=0, server_default=text('0'), info={ 'header_string' : _('Credit'), 'column_flex' : 1, 'column_xtype' : 'templatecolumn', 'template' : '{formatted_credit}' } ) alltime_max = Column( Money(), Comment('All-time maximum balance'), nullable=False, default=0, server_default=text('0'), info={ 'header_string' : _('Max. Balance'), 'read_only' : True } ) alltime_min = Column( Money(), Comment('All-time minimum balance'), nullable=False, default=0, server_default=text('0'), info={ 'header_string' : _('Min. Balance'), 'read_only' : True } ) entity = relationship( 'Entity', innerjoin=True, backref=backref( 'stashes', cascade='all, delete-orphan', passive_deletes=True ) ) currency = relationship( 'Currency', lazy='joined', backref=backref( 'stashes', passive_deletes='all' ) ) def __str__(self): return '%s: %s' % ( self.entity.nick, str(self.name) ) def formatted_amount(self, req): return money_format(req, self.amount, currency=self.currency) def formatted_credit(self, req): return money_format(req, self.credit, currency=self.currency)
class PDNSComment(Base): """ A PowerDNS Comment object """ __tablename__ = 'pdns_comments' __table_args__ = ( Comment('PowerDNS Comments'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', # 'cap_read' : 'DOMAINS_LIST', # 'cap_create' : 'DOMAINS_CREATE', # 'cap_edit' : 'DOMAINS_EDIT', # 'cap_delete' : 'DOMAINS_DELETE', 'show_in_menu': 'modules', 'menu_name': _('PowerDNS Comments'), 'menu_order': 50, 'default_sort': ({ 'property': 'id', 'direction': 'ASC' }, ), 'grid_view': ('domain_id', 'name', 'domaintype', 'comment'), 'form_view': ('domain_id', 'name', 'domaintype', 'modified', 'comment'), 'easy_search': ('domain_id'), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new comment')) } }) commentid = Column('id', UInt16(), Sequence('pdns_comments_id_seq'), Comment('Comment ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) domain_id = Column('domain_id', UInt16(), Comment('Domain ID'), ForeignKey('pdns_domains.id', name='pdns_comments_fk_domain_id'), nullable=False, info={'header_string': _('Domain ID')}) domainname = Column('name', Unicode(255), Comment('Domain Name'), nullable=False, info={'header_string': _('Domain Name')}) domaintype = Column('type', Unicode(10), Comment('Domain Type'), nullable=True, default=None, info={'header_string': _('Domain Type')}) modified = Column('modified_at', TIMESTAMP(), Comment('Modification timestamp'), nullable=False, default=datetime.datetime.utcnow, info={'header_string': _('Modified')}) account = Column('account', Unicode(10), Comment('Account'), nullable=False, info={'header_string': _('Account')}) comment = Column('comment', UnicodeText(), nullable=False, info={'header_string': _('Comment')}) def __str__(self): return '%s:%s:%s' % str(self.domainname, self.account, self.comment)
class HostGroup(Base): """ Host group object. """ __tablename__ = 'hosts_groups' __table_args__ = (Comment('Host groups'), Index('hosts_groups_u_hgname', 'name', unique=True), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_HOSTS', 'cap_read': 'HOSTS_LIST', 'cap_create': 'HOSTS_GROUPS_CREATE', 'cap_edit': 'HOSTS_GROUPS_EDIT', 'cap_delete': 'HOSTS_GROUPS_DELETE', 'menu_name': _('Host Groups'), 'show_in_menu': 'admin', 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('hgid', 'name', 'public'), 'grid_hidden': ('hgid', ), 'form_view': ('name', 'public', 'startoffset', 'endoffset', 'startoffset6', 'endoffset6', 'use_hwaddr', 'use_dhcp', 'use_banning'), 'easy_search': ('name', ), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new host group')) } }) id = Column('hgid', UInt32(), Sequence('hosts_groups_hgid_seq'), Comment('Host group ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column(Unicode(255), Comment('Host group name'), nullable=False, info={ 'header_string': _('Name'), 'column_flex': 1 }) public = Column(NPBoolean(), Comment('Is host group globally visible?'), nullable=False, default=True, server_default=npbool(True), info={'header_string': _('Public')}) ipv4_start_offset = Column('startoffset', UInt16(), Comment('IP allocator start offset'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('IPv4 Start Offset')}) ipv4_end_offset = Column('endoffset', UInt16(), Comment('IP allocator end offset'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('IPv4 End Offset')}) ipv6_start_offset = Column('startoffset6', UInt64(), Comment('IPv6 allocator start offset'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('IPv6 Start Offset')}) ipv6_end_offset = Column('endoffset6', UInt64(), Comment('IPv6 allocator end offset'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('IPv6 End Offset')}) use_hwaddr = Column(NPBoolean(), Comment('Use unique hardware address check'), nullable=False, default=True, server_default=npbool(True), info={'header_string': _('Unique Hardware Address')}) use_dhcp = Column(NPBoolean(), Comment('Use DHCP'), nullable=False, default=True, server_default=npbool(True), info={'header_string': _('DHCP')}) use_banning = Column(NPBoolean(), Comment('Use banning system'), nullable=False, default=True, server_default=npbool(True), info={'header_string': _('Banning System')}) def __str__(self): return str(self.name)
class Street(Base): """ Street object. """ __tablename__ = 'addr_streets' __table_args__ = ( Comment('Streets'), Index('addr_streets_u_street', 'cityid', 'name', 'prefix', 'suffix', unique=True), Index('addr_streets_i_districtid', 'districtid'), Index('addr_streets_i_name', 'name'), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_GEO', 'cap_read' : 'GEO_LIST', 'cap_create' : 'GEO_CREATE', 'cap_edit' : 'GEO_EDIT', 'cap_delete' : 'GEO_DELETE', 'show_in_menu' : 'admin', 'menu_name' : _('Streets'), 'default_sort' : ({ 'property': 'name' ,'direction': 'ASC' },), 'grid_view' : ('streetid', 'city', 'district', 'name', 'prefix', 'suffix'), 'grid_hidden' : ('streetid',), 'form_view' : ('city', 'district', 'name', 'prefix', 'suffix', 'descr'), 'easy_search' : ('name',), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new street')) } } ) id = Column( 'streetid', UInt32(), Sequence('addr_streets_streetid_seq'), Comment('Street ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) city_id = Column( 'cityid', UInt32(), ForeignKey('addr_cities.cityid', name='addr_streets_fk_cityid', ondelete='CASCADE', onupdate='CASCADE'), Comment('City ID'), nullable=False, info={ 'header_string' : _('City'), 'filter_type' : 'nplist', 'column_flex' : 1 } ) district_id = Column( 'districtid', UInt32(), ForeignKey('addr_districts.districtid', name='addr_streets_fk_districtid', ondelete='SET NULL', onupdate='CASCADE'), Comment('District ID'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('District'), 'filter_type' : 'nplist', 'column_flex' : 1 } ) name = Column( Unicode(255), Comment('Street name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 2 } ) prefix = Column( Unicode(8), Comment('Street name prefix'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Prefix') } ) suffix = Column( Unicode(8), Comment('Street name suffix'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Suffix') } ) description = Column( 'descr', UnicodeText(), Comment('Street description'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Description') } ) city = relationship( 'City', innerjoin=True ) houses = relationship( 'House', backref=backref('street', innerjoin=True), cascade='all, delete-orphan', passive_deletes=True ) def __str__(self): l = [] if self.prefix: l.append(self.prefix) l.append(self.name) if self.suffix: l.append(self.suffix) return ' '.join(l)
class Service(Base): """ Service object. """ __tablename__ = 'services_def' __table_args__ = (Comment('Services'), Index('services_def_u_service', 'hostid', 'stid', 'domainid', unique=True), Index('services_def_i_stid', 'stid'), Index('services_def_i_domainid', 'domainid'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_SERVICES', 'cap_read': 'SERVICES_LIST', 'cap_create': 'SERVICES_CREATE', 'cap_edit': 'SERVICES_EDIT', 'cap_delete': 'SERVICES_DELETE', 'menu_name': _('Service Types'), 'grid_view': ('sid', 'host', 'domain', 'type', 'priority', 'weight', 'vis'), 'grid_hidden': ('sid', ), 'form_view': ('host', 'domain', 'type', 'priority', 'weight', 'vis'), 'create_wizard': SimpleWizard(title=_('Add new service')) } }) id = Column('sid', UInt32(), Sequence('services_def_sid_seq'), Comment('Service ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) host_id = Column('hostid', UInt32(), ForeignKey('hosts_def.hostid', name='services_def_fk_hostid', ondelete='CASCADE', onupdate='CASCADE'), Comment('Host ID'), nullable=False, info={ 'header_string': _('Host'), 'filter_type': 'none' }) type_id = Column('stid', UInt32(), ForeignKey('services_types.stid', name='services_def_fk_stid', onupdate='CASCADE'), Comment('Service type ID'), nullable=False, info={ 'header_string': _('Type'), 'filter_type': 'nplist', 'column_flex': 1 }) domain_id = Column('domainid', UInt32(), ForeignKey('domains_def.domainid', name='services_def_fk_domainid', ondelete='CASCADE', onupdate='CASCADE'), Comment('Alternate domain ID'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string': _('Domain'), 'filter_type': 'none', 'column_flex': 1 }) priority = Column(UInt32(), Comment('Service priority'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('Priority')}) weight = Column(UInt32(), Comment('Service weight'), nullable=False, default=0, server_default=text('0'), info={'header_string': _('Weight')}) visibility = Column('vis', ObjectVisibility.db_type(), Comment('Service visibility'), nullable=False, default=ObjectVisibility.internal, server_default=ObjectVisibility.internal, info={'header_string': _('Visibility')}) domain = relationship('Domain', backref=backref('srv_records', cascade='all, delete-orphan', passive_deletes=True)) @property def service_domain(self): if self.domain: return self.domain return self.host.domain
class PDNSRecord(Base): """ PowerDNS DNS Record """ __tablename__ = 'pdns_records' __table_args__ = ( Comment('PowerDNS DNS Record'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', # 'cap_read' : 'DOMAINS_LIST', # 'cap_create' : 'DOMAINS_CREATE', # 'cap_edit' : 'DOMAINS_EDIT', # 'cap_delete' : 'DOMAINS_DELETE', 'menu_name': _('PowerDNS DNS Records'), 'show_in_menu': 'modules', 'menu_order': 30, 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('name', 'domain', 'rtype', 'content', 'ttl', 'prio', 'change_date', 'ordername'), 'easy_search': ('name', ), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new DNS record')) } }) id = Column('id', UInt16(), Comment('Domain ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) domain_id = Column('domain_id', UInt16(), Comment('Domain ID'), ForeignKey('pdns_domains.id', name='pdns_records_fk_domain_id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, info={'header_string': _('Domain ID')}) name = Column('name', Unicode(255), Comment('Name'), nullable=True, default=None, info={'header_string': _('Name')}) rtype = Column('type', Unicode(10), Comment('Record Type'), nullable=True, default=None, info={'header_string': _('Record Type')}) content = Column('content', UnicodeText(), Comment('Content'), nullable=True, default=None, info={'header_string': _('Content')}) ttl = Column('ttl', UInt32(), Comment('TTL'), nullable=True, default=None, info={'header_string': _('TTL')}) prio = Column('prio', UInt32(), Comment('Priority'), nullable=True, default=None, info={'header_string': _('Priority')}) change_date = Column('change_date', TIMESTAMP(), Comment('Change Date Timestamp'), nullable=True, default=None, info={'header_string': _('Change Date')}) disabled = Column('disabled', TINYINT(1), Comment('Disabled Flag'), nullable=False, default=0, info={'header_string': _('Disabled')}) ordername = Column('ordername', Unicode(255), Comment('Order Name'), nullable=True, default=None, info={'header_string': _('Order Name')}) auth = Column('auth', TINYINT(1), Comment('Authoritative Zone Flag'), nullable=False, default=1, info={'header_string': _('Authoritative Zone Flag')}) domain = relationship('PDNSDomain', innerjoin=True, backref=backref('records', cascade='all, delete-orphan', passive_deletes=True)) def __str__(self): return ("{0} {1} {2} {3}".format(self.name, self.rtype, self.content, self.ttl))
class UserLocation(Base): """ Users' addresses. """ __tablename__ = 'users_locations' __table_args__ = ( Comment('User locations'), Index('users_locations_i_uid', 'uid'), Index('users_locations_i_houseid', 'houseid'), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_read' : 'USERS_LIST', 'cap_create' : 'USERS_EDIT', 'cap_edit' : 'USERS_EDIT', 'cap_delete' : 'USERS_EDIT', 'menu_name' : _('User Addresses'), 'default_sort' : ({ 'property': 'atype' ,'direction': 'ASC' },), 'grid_view' : ( 'ulocid', 'user', 'primary', 'atype', MarkupColumn( header_string=_('Address'), column_flex=3, template='{__str__}' ) ), 'grid_hidden' : ('ulocid',), 'form_view' : ( 'user', 'primary', 'atype', 'house', 'country', 'stprov', 'city', 'addr', 'entrance', 'floor', 'flat', 'room', 'entrycode', 'postindex', 'descr' ), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new user address')) } } ) id = Column( 'ulocid', UInt32(), Sequence('users_locations_ulocid_seq'), Comment('User location ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) user_id = Column( 'uid', UInt32(), ForeignKey('users.uid', name='users_locations_fk_uid', ondelete='CASCADE', onupdate='CASCADE'), Comment('User ID'), nullable=False, info={ 'header_string' : _('User'), 'filter_type' : 'none' } ) primary = Column( NPBoolean(), Comment('Primary flag'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Primary') } ) type = Column( 'atype', AddressType.db_type(), Comment('Address type'), nullable=False, default=AddressType.work, server_default=AddressType.work, info={ 'header_string' : _('Type'), 'column_flex' : 1 } ) country = Column( CHAR(2), Comment('ISO 3166-1 alpha-2 country code'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Country'), 'choices' : countries_alpha2 } ) state_or_province = Column( 'stprov', Unicode(255), Comment('State or province name'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('State/province') } ) city = Column( Unicode(255), Comment('City name'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('City') } ) address = Column( 'addr', Unicode(255), Comment('Freeform address'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Address') } ) house_id = Column( 'houseid', UInt32(), ForeignKey('addr_houses.houseid', name='users_locations_fk_houseid', ondelete='CASCADE', onupdate='CASCADE'), Comment('House ID'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('House'), 'filter_type' : 'none', 'column_flex' : 1 } ) entrance = Column( UInt8(), Comment('Entrance number'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Entr.') } ) floor = Column( Int16(), Comment('Floor number'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Floor') } ) flat = Column( UInt16(), Comment('Flat/office number'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Flat') } ) room = Column( Unicode(8), Comment('Room identifier'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Room') } ) entry_code = Column( 'entrycode', Unicode(8), Comment('Entry code'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Entry Code') } ) postal_code = Column( 'postindex', Unicode(8), Comment('Postal code'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Postal Code') } ) description = Column( 'descr', UnicodeText(), Comment('Address description'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Description'), 'column_flex' : 2 } ) user = relationship( 'User', innerjoin=True, backref=backref( 'locations', cascade='all, delete-orphan', passive_deletes=True ) ) def __str__(self): req = self.__req__ or get_current_request() loc = req.localizer locale_cur = req.current_locale locale_en = req.locales['en'] ret = [] bit = self.country if bit: if bit in locale_cur.territories: bit = locale_cur.territories[bit] elif bit in locale_en.territories: bit = locale_en.territories[bit] ret.append(bit + ',') bit = self.city_address if bit: ret.append(bit + ',') bit = self.street_address if bit: ret.append(bit) if self.entrance: ret.extend(( loc.translate(_('entr.')), str(self.entrance) )) if self.floor: ret.extend(( loc.translate(_('fl.')), str(self.floor) )) if self.flat: pfx = _('app.') if self.type == AddressType.work: pfx = _('office') ret.extend(( loc.translate(pfx), str(self.flat) )) return ' '.join(ret) def add_to_vcard(self, card): data = dict() if self.country: data['country'] = self.country if self.state_or_province: data['region'] = self.state_or_province if self.postal_code: data['box'] = self.postal_code bit = self.city_address if bit: data['city'] = bit bit = self.street_address if bit: data['street'] = bit if len(data) > 0: obj = card.add('adr') obj.value = vobject.vcard.Address(**data) objtype = list(AddressType.vcard_types(self.type)) if self.primary: objtype.append('pref') obj.type_paramlist = objtype @property def city_address(self): if self.house and self.house.street: return str(self.house.street.city) return self.city @property def street_address(self): if self.house: return str(self.house) return self.address
class NetworkGroup(Base): """ Network group object. """ __tablename__ = 'nets_groups' __table_args__ = (Comment('Network groups'), Index('nets_groups_u_name', 'name', unique=True), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_NETS', 'cap_read': 'NETS_LIST', 'cap_create': 'NETGROUPS_CREATE', 'cap_edit': 'NETGROUPS_EDIT', 'cap_delete': 'NETGROUPS_DELETE', 'menu_name': _('Groups'), 'show_in_menu': 'modules', 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('netgid', 'name', 'descr'), 'grid_hidden': ('netgid', ), 'form_view': ('name', 'descr'), 'easy_search': ('name', ), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new network group')) } }) id = Column('netgid', UInt32(), Sequence('nets_groups_netgid_seq'), Comment('Network group ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column(Unicode(255), Comment('Network group name'), nullable=False, info={ 'header_string': _('Name'), 'column_flex': 1 }) description = Column('descr', UnicodeText(), Comment('Network group description'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Description')}) def __str__(self): return str(self.name)
class HouseGroup(Base): """ Used for grouping arbitrary houses. Each house can be part of any number of groups. """ __tablename__ = 'addr_hgroups_def' __table_args__ = ( Comment('House groups'), Index('addr_hgroups_def_u_name', 'name', unique=True), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_GEO', 'cap_read' : 'GEO_LIST', 'cap_create' : 'GEO_CREATE', 'cap_edit' : 'GEO_EDIT', 'cap_delete' : 'GEO_DELETE', 'show_in_menu' : 'admin', 'menu_name' : _('House Groups'), 'default_sort' : ({ 'property': 'name' ,'direction': 'ASC' },), 'grid_view' : ('ahgid', 'name', 'descr'), 'grid_hidden' : ('ahgid',), 'easy_search' : ('name',), 'detail_pane' : ('netprofile_core.views', 'dpane_simple'), 'create_wizard' : SimpleWizard(title=_('Add new house group')) } } ) id = Column( 'ahgid', UInt32(), Sequence('addr_hgroups_def_ahgid_seq'), Comment('House group ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) name = Column( Unicode(255), Comment('House group name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 1 } ) description = Column( 'descr', UnicodeText(), Comment('House group description'), nullable=True, default=None, server_default=text('NULL'), info={ 'header_string' : _('Description'), 'column_flex' : 1 } ) mappings = relationship( 'HouseGroupMapping', backref=backref('group', innerjoin=True, lazy='joined'), cascade='all, delete-orphan', passive_deletes=True ) houses = association_proxy( 'mappings', 'house' ) def __str__(self): return str(self.name)
class ServiceType(Base): """ Service type object. """ __tablename__ = 'services_types' __table_args__ = (Comment('Service types'), Index('services_types_u_service', 'proto', 'abbrev', unique=True), Index('services_types_i_abbrev', 'abbrev'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_SERVICES', 'cap_read': 'SERVICES_LIST', 'cap_create': 'SERVICES_TYPES_CREATE', 'cap_edit': 'SERVICES_TYPES_EDIT', 'cap_delete': 'SERVICES_TYPES_DELETE', 'menu_name': _('Service Types'), 'show_in_menu': 'admin', 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('stid', 'abbrev', 'name', 'proto', 'port_start', 'port_end'), 'grid_hidden': ('stid', ), 'form_view': ('abbrev', 'name', 'proto', 'port_start', 'port_end', 'alias'), 'easy_search': ('abbrev', 'name'), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard(title=_('Add new service type')) } }) id = Column('stid', UInt32(), Sequence('services_types_stid_seq'), Comment('Service type ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) abbreviation = Column('abbrev', ASCIIString(32), Comment('Service type abbreviation'), nullable=False, info={'header_string': _('Abbrev.')}) name = Column(Unicode(255), Comment('Service type name'), nullable=False, info={ 'header_string': _('Name'), 'column_flex': 1 }) protocol = Column('proto', ServiceProtocol.db_type(), Comment('Used protocol(s)'), nullable=False, default=ServiceProtocol.tcp, server_default=ServiceProtocol.tcp, info={'header_string': _('Protocol')}) start_port = Column('port_start', UInt16(), Comment('Port range start'), nullable=False, info={'header_string': _('Start Port')}) end_port = Column('port_end', UInt16(), Comment('Port range end'), nullable=False, info={'header_string': _('End Port')}) alias = Column(ASCIIText(), Comment('List of alternate names'), nullable=True, default=None, server_default=text('NULL'), info={'header_string': _('Aliases')}) services = relationship('Service', backref=backref('type', innerjoin=True)) def __str__(self): pfx = [] if self.abbreviation: pfx.append(str(self.abbreviation)) if self.protocol != ServiceProtocol.none: pfx.append(str(self.protocol.description)) if len(pfx) > 0: return '[%s] %s' % ('/'.join(pfx), str(self.name)) return str(self.name) @property def record_name(self): rrn = [] if self.abbreviation: rrn.append('_' + self.abbreviation) if self.protocol != ServiceProtocol.none: rrn.append('_' + self.protocol.name) return '.'.join(rrn) @property def port_range(self): if self.start_port and self.end_port and (self.start_port <= self.end_port): return range(self.start_port, self.end_port + 1) return ()
class NetworkServiceType(Base): """ Network service type object. """ __tablename__ = 'nets_hltypes' __table_args__ = (Comment('Networks-hosts linkage types'), Index('nets_hltypes_u_name', 'name', unique=True), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_NETS', 'cap_read': 'NETS_LIST', 'cap_create': 'NETS_SERVICETYPES_CREATE', 'cap_edit': 'NETS_SERVICETYPES_EDIT', 'cap_delete': 'NETS_SERVICETYPES_DELETE', 'menu_name': _('Services'), 'show_in_menu': 'admin', 'default_sort': ({ 'property': 'name', 'direction': 'ASC' }, ), 'grid_view': ('hltypeid', 'name', 'unique'), 'grid_hidden': ('hltypeid', ), 'form_view': ('name', 'unique'), 'easy_search': ('name', ), 'detail_pane': ('netprofile_core.views', 'dpane_simple'), 'create_wizard': SimpleWizard( title=_('Add new network service type')) } }) id = Column('hltypeid', UInt32(), Sequence('nets_hltypes_hltypeid_seq', start=101, increment=1), Comment('Networks-hosts linkage type ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) name = Column(Unicode(255), Comment('Networks-hosts linkage type name'), nullable=False, info={ 'header_string': _('Name'), 'column_flex': 1 }) unique = Column(NPBoolean(), Comment('Is unique per network?'), nullable=False, default=False, server_default=npbool(False), info={'header_string': _('Unique')}) services = relationship('NetworkService', backref=backref('type', innerjoin=True)) def __str__(self): req = getattr(self, '__req__', None) if req: return req.localizer.translate(_(self.name)) return str(self.name)
class DomainService(Base): """ Domain service object. """ __tablename__ = 'domains_hosts' __table_args__ = (Comment('Domains-hosts linkage'), Index('domains_hosts_u_dhl', 'domainid', 'hostid', 'hltypeid', unique=True), Index('domains_hosts_i_hostid', 'hostid'), Index('domains_hosts_i_hltypeid', 'hltypeid'), { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'info': { 'cap_menu': 'BASE_DOMAINS', 'cap_read': 'DOMAINS_LIST', 'cap_create': 'DOMAINS_EDIT', 'cap_edit': 'DOMAINS_EDIT', 'cap_delete': 'DOMAINS_EDIT', 'menu_name': _('Services'), 'grid_view': ('domain', 'host', 'type'), 'form_view': ('domain', 'host', 'type'), 'create_wizard': SimpleWizard(title=_('Add new domain service')) } }) id = Column('dhid', UInt32(), Sequence('domains_hosts_dhid_seq'), Comment('Domain-host linkage ID'), primary_key=True, nullable=False, info={'header_string': _('ID')}) domain_id = Column('domainid', UInt32(), ForeignKey('domains_def.domainid', name='domains_hosts_fk_domainid', ondelete='CASCADE', onupdate='CASCADE'), Comment('Domain ID'), nullable=False, info={ 'header_string': _('Domain'), 'filter_type': 'none', 'column_flex': 1 }) host_id = Column('hostid', UInt32(), ForeignKey('hosts_def.hostid', name='domains_hosts_fk_hostid', onupdate='CASCADE', ondelete='CASCADE'), Comment('Host ID'), nullable=False, info={ 'header_string': _('Host'), 'filter_type': 'none', 'column_flex': 1 }) type_id = Column('hltypeid', UInt32(), ForeignKey('domains_hltypes.hltypeid', name='domains_hosts_fk_hltypeid', onupdate='CASCADE'), Comment('Domain-host linkage type'), nullable=False, info={ 'header_string': _('Type'), 'filter_type': 'nplist', 'column_flex': 1 }) domain = relationship('Domain', innerjoin=True, backref=backref('services', cascade='all, delete-orphan', passive_deletes=True)) host = relationship('Host', innerjoin=True, backref=backref('domain_services', cascade='all, delete-orphan', passive_deletes=True)) type = relationship('DomainServiceType', innerjoin=True, backref='services')
class DomainServiceType(Base): """ Domains-to-hosts linkage type. """ __tablename__ = 'domains_hltypes' __table_args__ = ( Comment('Domains-hosts linkage types'), Index('domains_hltypes_u_name', 'name', unique=True), { 'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8', 'info' : { 'cap_menu' : 'BASE_DOMAINS', 'cap_read' : 'DOMAINS_LIST', 'cap_create' : 'DOMAINS_SERVICETYPES_CREATE', 'cap_edit' : 'DOMAINS_SERVICETYPES_EDIT', 'cap_delete' : 'DOMAINS_SERVICETYPES_DELETE', 'show_in_menu' : 'admin', 'menu_name' : _('Domain Service Types'), 'default_sort' : ({ 'property': 'name' ,'direction': 'ASC' },), 'grid_view' : ('hltypeid', 'name', 'unique'), 'grid_hidden' : ('hltypeid',), 'easy_search' : ('name',), 'create_wizard' : SimpleWizard(title=_('Add new type')) } } ) id = Column( 'hltypeid', UInt32(), Sequence('domains_hltypes_hltypeid_seq', start=101, increment=1), Comment('Domains-hosts linkage type ID'), primary_key=True, nullable=False, info={ 'header_string' : _('ID') } ) name = Column( Unicode(255), Comment('Domains-hosts linkage type name'), nullable=False, info={ 'header_string' : _('Name'), 'column_flex' : 1 } ) unique = Column( NPBoolean(), Comment('Is unique per domain?'), nullable=False, default=False, server_default=npbool(False), info={ 'header_string' : _('Unique') } ) def __str__(self): req = getattr(self, '__req__', None) if req: return req.localizer.translate(_(self.name)) return str(self.name)