Best Python code snippet using refurb_python
utils.py
Source:utils.py
1# vim: tabstop=4 shiftwidth=4 softtabstop=42# Copyright 2013 Hewlett-Packard Development Company, L.P.3# All Rights Reserved.4#5# Licensed under the Apache License, Version 2.0 (the "License"); you may6# not use this file except in compliance with the License. You may obtain7# a copy of the License at8#9# http://www.apache.org/licenses/LICENSE-2.010#11# Unless required by applicable law or agreed to in writing, software12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the14# License for the specific language governing permissions and limitations15# under the License.16#17# Copyright (c) 2013-2019 Wind River Systems, Inc.18#19"""Sysinv test utilities."""20import uuid21from oslo_serialization import jsonutils as json22from oslo_utils import uuidutils23from sysinv.common import constants24from sysinv.db import api as db_api25fake_info = {"foo": "bar"}26ipmi_info = json.dumps(27 {28 'ipmi': {29 "address": "1.2.3.4",30 "username": "admin",31 "password": "fake",32 }33 })34ssh_info = json.dumps(35 {36 'ssh': {37 "address": "1.2.3.4",38 "username": "admin",39 "password": "fake",40 "port": 22,41 "virt_type": "vbox",42 "key_filename": "/not/real/file",43 }44 })45pxe_info = json.dumps(46 {47 'pxe': {48 "instance_name": "fake_instance_name",49 "image_source": "glance://image_uuid",50 "deploy_kernel": "glance://deploy_kernel_uuid",51 "deploy_ramdisk": "glance://deploy_ramdisk_uuid",52 "root_gb": 100,53 }54 })55pxe_ssh_info = json.dumps(56 dict(json.loads(pxe_info), **json.loads(ssh_info)))57pxe_ipmi_info = json.dumps(58 dict(json.loads(pxe_info), **json.loads(ipmi_info)))59properties = {60 "cpu_arch": "x86_64",61 "cpu_num": "8",62 "storage": "1024",63 "memory": "4096",64 }65int_uninitialized = 99966SW_VERSION = '0.0'67SW_VERSION_NEW = '1.0'68def get_test_node(**kw):69 node = {70 'id': kw.get('id'),71 'numa_node': kw.get('numa_node', 0),72 'capabilities': kw.get('capabilities', {}),73 'forihostid': kw.get('forihostid', 1)74 }75 return node76def create_test_node(**kw):77 """Create test inode entry in DB and return inode DB object.78 Function to be used to create test inode objects in the database.79 :param kw: kwargs with overriding values for host's attributes.80 :returns: Test inode DB object.81 """82 node = get_test_node(**kw)83 # Let DB generate ID if it isn't specified explicitly84 if 'id' not in kw:85 del node['id']86 dbapi = db_api.get_instance()87 return dbapi.inode_create(node['forihostid'], node)88def post_get_test_ihost(**kw):89 inv = get_test_ihost(**kw)90 del inv['bm_mac']91 del inv['peer_id']92 del inv['action_state']93 del inv['recordtype']94 del inv['uuid']95 return inv96def get_test_ihost(**kw):97 inv = {98 'id': kw.get('id', 123),99 'forisystemid': kw.get('forisystemid', None),100 'peer_id': kw.get('peer_id', None),101 'recordtype': kw.get('recordtype', "standard"),102 'uuid': kw.get('uuid'),103 'hostname': kw.get('hostname', 'sysinvhostname'),104 'invprovision': kw.get('invprovision', 'unprovisioned'),105 'mgmt_mac': kw.get('mgmt_mac',106 '01:34:67:9A:CD:FE'),107 'mgmt_ip': kw.get('mgmt_ip',108 '192.168.24.11'),109 'personality': kw.get('personality', 'controller'),110 'administrative': kw.get('administrative', 'locked'),111 'operational': kw.get('operational', 'disabled'),112 'availability': kw.get('availability', 'offduty'),113 'serialid': kw.get('serialid', 'sysinv123456'),114 'bm_ip': kw.get('bm_ip', "128.224.150.193"),115 'bm_mac': kw.get('bm_mac', "a4:5d:36:fc:a5:6c"),116 'bm_type': kw.get('bm_type', constants.HOST_BM_TYPE_DEPROVISIONED),117 'bm_username': kw.get('bm_username', "ihostbmusername"),118 'action': kw.get('action', "none"),119 'task': kw.get('task', None),120 'capabilities': kw.get('capabilities', {}),121 'subfunctions': kw.get('subfunctions', "ihostsubfunctions"),122 'subfunction_oper': kw.get('subfunction_oper', "disabled"),123 'subfunction_avail': kw.get('subfunction_avail', "not-installed"),124 'reserved': kw.get('reserved', None),125 'ihost_action': kw.get('ihost_action', None),126 'action_state': kw.get('action_state', constants.HAS_REINSTALLED),127 'mtce_info': kw.get('mtce_info', '0'),128 'vim_progress_status': kw.get('vim_progress_status', "vimprogressstatus"),129 'uptime': kw.get('uptime', 0),130 'config_status': kw.get('config_status', "configstatus"),131 'config_applied': kw.get('config_applied', "configapplied"),132 'config_target': kw.get('config_target', "configtarget"),133 'location': kw.get('location', {}),134 'boot_device': kw.get('boot_device', 'sda'),135 'rootfs_device': kw.get('rootfs_device', 'sda'),136 'install_output': kw.get('install_output', 'text'),137 'console': kw.get('console', 'ttyS0,115200'),138 'tboot': kw.get('tboot', ''),139 'ttys_dcd': kw.get('ttys_dcd', None),140 'updated_at': None,141 'created_at': None,142 'install_state': kw.get('install_state', None),143 'install_state_info': kw.get('install_state_info', None),144 'iscsi_initiator_name': kw.get('iscsi_initiator_name', None),145 'inv_state': kw.get('inv_state', 'inventoried'),146 'clock_synchronization': kw.get('clock_synchronization', constants.NTP),147 }148 return inv149def create_test_ihost(**kw):150 """Create test host entry in DB and return Host DB object.151 Function to be used to create test Host objects in the database.152 :param kw: kwargs with overriding values for host's attributes.153 :returns: Test Host DB object.154 """155 host = get_test_ihost(**kw)156 # Let DB generate ID if it isn't specified explicitly157 if 'id' not in kw:158 del host['id']159 dbapi = db_api.get_instance()160 return dbapi.ihost_create(host)161def get_test_isystem(**kw):162 inv = {163 'id': kw.get('id', 321),164 'name': kw.get('hostname', 'sysinvisystemname'),165 'description': kw.get('description', 'isystemdescription'),166 'capabilities': kw.get('capabilities',167 {"cinder_backend":168 constants.CINDER_BACKEND_LVM,169 "vswitch_type":170 constants.VSWITCH_TYPE_OVS_DPDK,171 "region_config": False,172 "sdn_enabled": True,173 "shared_services": "[]"}),174 'contact': kw.get('contact', 'isystemcontact'),175 'system_type': kw.get('system_type', constants.TIS_STD_BUILD),176 'system_mode': kw.get('system_mode', constants.SYSTEM_MODE_DUPLEX),177 'region_name': kw.get('region_name', constants.REGION_ONE_NAME),178 'location': kw.get('location', 'isystemlocation'),179 'services': kw.get('services', 72),180 'software_version': kw.get('software_version', SW_VERSION)181 }182 return inv183def create_test_isystem(**kw):184 """Create test system entry in DB and return System DB object.185 Function to be used to create test System objects in the database.186 :param kw: kwargs with overriding values for system's attributes.187 :returns: Test System DB object.188 """189 system = get_test_isystem(**kw)190 # Let DB generate ID if it isn't specified explicitly191 if 'id' not in kw:192 del system['id']193 dbapi = db_api.get_instance()194 return dbapi.isystem_create(system)195def get_test_load(**kw):196 load = {197 "software_version": kw.get("software_version", SW_VERSION),198 "compatible_version": kw.get("compatible_version", "N/A"),199 "required_patches": "N/A",200 "state": kw.get("state", constants.ACTIVE_LOAD_STATE),201 }202 return load203def create_test_load(**kw):204 load = get_test_load(**kw)205 dbapi = db_api.get_instance()206 return dbapi.load_create(load)207def get_test_upgrade(**kw):208 upgrade = {'from_load': kw.get('from_load', 1),209 'to_load': kw.get('to_load', 2),210 'state': kw.get('state', constants.UPGRADE_STARTING)}211 return upgrade212def create_test_upgrade(**kw):213 upgrade = get_test_upgrade(**kw)214 dbapi = db_api.get_instance()215 return dbapi.software_upgrade_create(upgrade)216def post_get_test_kube_upgrade(**kw):217 upgrade = get_test_kube_upgrade(**kw)218 del upgrade['id']219 del upgrade['uuid']220 del upgrade['from_version']221 del upgrade['state']222 del upgrade['reserved_1']223 del upgrade['reserved_2']224 del upgrade['reserved_3']225 del upgrade['reserved_4']226 return upgrade227def get_test_kube_upgrade(**kw):228 upgrade = {229 'id': 1,230 'uuid': kw.get('uuid', uuidutils.generate_uuid()),231 "from_version": kw.get('from_version', 'v1.42.1'),232 "to_version": kw.get('to_version', 'v1.42.2'),233 "state": kw.get('state', 'upgrade-started'),234 "reserved_1": "res1",235 "reserved_2": "res2",236 "reserved_3": "res3",237 "reserved_4": "res4",238 }239 return upgrade240def get_test_kube_host_upgrade():241 upgrade = {242 'id': 1,243 'uuid': uuidutils.generate_uuid(),244 "target_version": 'v1.42.1',245 "status": "tbd",246 "reserved_1": "",247 "reserved_2": "",248 "reserved_3": "",249 "reserved_4": "",250 "host_id": 1,251 }252 return upgrade253def create_test_kube_upgrade(**kw):254 upgrade = get_test_kube_upgrade(**kw)255 # Let DB generate ID and uuid256 if 'id' in upgrade:257 del upgrade['id']258 if 'uuid' in upgrade:259 del upgrade['uuid']260 dbapi = db_api.get_instance()261 return dbapi.kube_upgrade_create(upgrade)262def create_test_kube_host_upgrade():263 upgrade = get_test_kube_host_upgrade()264 # Let DB generate ID, uuid and host_id265 if 'id' in upgrade:266 del upgrade['id']267 if 'uuid' in upgrade:268 del upgrade['uuid']269 if 'host_id' in upgrade:270 del upgrade['host_id']271 dbapi = db_api.get_instance()272 hostid = 1273 return dbapi.kube_host_upgrade_create(hostid, upgrade)274# Create test user object275def get_test_user(**kw):276 user = {277 'id': kw.get('id'),278 'uuid': kw.get('uuid'),279 'forisystemid': kw.get('forisystemid', None)280 }281 return user282def create_test_user(**kw):283 user = get_test_user(**kw)284 # Let DB generate ID if it isn't specified explicitly285 if 'id' not in kw:286 del user['id']287 dbapi = db_api.get_instance()288 return dbapi.iuser_create(user)289# Create test helm override object290def get_test_helm_overrides(**kw):291 helm_overrides = {292 'id': kw.get('id'),293 'name': kw.get('name'),294 'namespace': kw.get('namespace'),295 'user_overrides': kw.get('user_overrides', None),296 'system_overrides': kw.get('system_overrides', None),297 'app_id': kw.get('app_id', None)298 }299 return helm_overrides300def create_test_helm_overrides(**kw):301 helm_overrides = get_test_helm_overrides(**kw)302 # Let DB generate ID if it isn't specified explicitly303 if 'id' not in kw:304 del helm_overrides['id']305 dbapi = db_api.get_instance()306 return dbapi.helm_override_create(helm_overrides)307# Create test ntp object308def get_test_ntp(**kw):309 ntp = {310 'id': kw.get('id'),311 'uuid': kw.get('uuid'),312 'ntpservers': kw.get('ntpservers'),313 'forisystemid': kw.get('forisystemid', None),314 'isystem_uuid': kw.get('isystem_uuid', None)315 }316 return ntp317def create_test_ntp(**kw):318 ntp = get_test_ntp(**kw)319 # Let DB generate ID if it isn't specified explicitly320 if 'id' not in kw:321 del ntp['id']322 dbapi = db_api.get_instance()323 return dbapi.intp_create(ntp)324def post_get_test_ntp(**kw):325 ntp = get_test_ntp(**kw)326 # When invoking a POST the following fields should not be populated:327 del ntp['uuid']328 del ntp['id']329 return ntp330# Create test ptp object331def get_test_ptp(**kw):332 ptp = {333 'id': kw.get('id'),334 'uuid': kw.get('uuid'),335 'enabled': kw.get('enabled'),336 'system_id': kw.get('system_id', None),337 'mode': kw.get('mode'),338 'transport': kw.get('transport'),339 'mechanism': kw.get('mechanism')340 }341 return ptp342def create_test_ptp(**kw):343 ptp = get_test_ptp(**kw)344 # Let DB generate ID if it isn't specified explicitly345 if 'id' not in kw:346 del ptp['id']347 dbapi = db_api.get_instance()348 return dbapi.ptp_create(ptp)349# Create test dns object350def get_test_dns(**kw):351 dns = {352 'id': kw.get('id'),353 'uuid': kw.get('uuid'),354 'nameservers': kw.get('nameservers'),355 'forisystemid': kw.get('forisystemid', None)356 }357 return dns358def create_test_dns(**kw):359 dns = get_test_dns(**kw)360 # Let DB generate ID if it isn't specified explicitly361 if 'id' not in kw:362 del dns['id']363 dbapi = db_api.get_instance()364 return dbapi.idns_create(dns)365def post_get_test_dns(**kw):366 dns = get_test_dns(**kw)367 # When invoking a POST the following fields should not be populated:368 del dns['uuid']369 del dns['id']370 return dns371# Create test drbd object372def get_test_drbd(**kw):373 drbd = {374 'id': kw.get('id'),375 'uuid': kw.get('uuid'),376 'forisystemid': kw.get('forisystemid', None),377 'link_util': constants.DRBD_LINK_UTIL_DEFAULT,378 'num_parallel': constants.DRBD_NUM_PARALLEL_DEFAULT,379 'rtt_ms': constants.DRBD_RTT_MS_DEFAULT,380 }381 return drbd382def create_test_drbd(**kw):383 drbd = get_test_drbd(**kw)384 # Let DB generate ID if it isn't specified explicitly385 if 'id' not in kw:386 del drbd['id']387 dbapi = db_api.get_instance()388 return dbapi.drbdconfig_create(drbd)389# Create test remotelogging object390def get_test_remotelogging(**kw):391 remotelogging = {392 'id': kw.get('id'),393 'uuid': kw.get('uuid'),394 'enabled': kw.get('enabled'),395 'system_id': kw.get('system_id', None)396 }397 return remotelogging398def create_test_remotelogging(**kw):399 dns = get_test_remotelogging(**kw)400 # Let DB generate ID if it isn't specified explicitly401 if 'id' not in kw:402 del dns['id']403 dbapi = db_api.get_instance()404 return dbapi.remotelogging_create(dns)405def get_test_address_pool(**kw):406 inv = {407 'id': kw.get('id'),408 'network': kw.get('network'),409 'name': kw.get('name'),410 'family': kw.get('family', 4),411 'ranges': kw.get('ranges'),412 'prefix': kw.get('prefix'),413 'order': kw.get('order', 'random'),414 'uuid': kw.get('uuid')415 }416 return inv417def create_test_address_pool(**kw):418 """Create test address pool entry in DB and return AddressPool DB object.419 Function to be used to create test Address pool objects in the database.420 :param kw: kwargs with overriding values for address pool's attributes.421 :returns: Test Address pool DB object.422 """423 address_pool = get_test_address_pool(**kw)424 # Let DB generate ID if it isn't specified explicitly425 if 'id' not in kw:426 del address_pool['id']427 dbapi = db_api.get_instance()428 return dbapi.address_pool_create(address_pool)429def get_test_address(**kw):430 inv = {431 'id': kw.get('id'),432 'uuid': kw.get('uuid'),433 'family': kw.get('family'),434 'address': kw.get('address'),435 'prefix': kw.get('prefix'),436 'enable_dad': kw.get('enable_dad', False),437 'name': kw.get('name', None),438 'interface_id': kw.get('interface_id', None),439 'address_pool_id': kw.get('address_pool_id', None),440 }441 return inv442def create_test_address(**kw):443 """Create test address entry in DB and return Address DB object.444 Function to be used to create test Address objects in the database.445 :param kw: kwargs with overriding values for addresses' attributes.446 :returns: Test Address DB object.447 """448 address = get_test_address(**kw)449 # Let DB generate ID if it isn't specified explicitly450 if 'id' not in kw:451 del address['id']452 dbapi = db_api.get_instance()453 return dbapi.address_create(address)454def get_test_route(**kw):455 inv = {456 'id': kw.get('id'),457 'uuid': kw.get('uuid'),458 'family': kw.get('family'),459 'network': kw.get('network'),460 'prefix': kw.get('prefix'),461 'gateway': kw.get('gateway'),462 'metric': kw.get('metric', 1),463 'interface_id': kw.get('interface_id', None),464 }465 return inv466def create_test_route(**kw):467 """Create test route entry in DB and return Route DB object.468 Function to be used to create test Route objects in the database.469 :param kw: kwargs with overriding values for route's attributes.470 :returns: Test Route DB object.471 """472 route = get_test_route(**kw)473 # Let DB generate ID if it isn't specified explicitly474 if 'id' not in kw:475 del route['id']476 dbapi = db_api.get_instance()477 interface_id = route.pop('interface_id')478 return dbapi.route_create(interface_id, route)479def create_test_network(**kw):480 """Create test network entry in DB and return Network DB object.481 Function to be used to create test Network objects in the database.482 :param kw: kwargs with overriding values for network's attributes.483 :returns: Test Network DB object.484 """485 network = get_test_network(**kw)486 # Let DB generate ID if it isn't specified explicitly487 if 'id' not in kw:488 del network['id']489 dbapi = db_api.get_instance()490 return dbapi.network_create(network)491def get_test_network(**kw):492 inv = {493 'id': kw.get('id'),494 'uuid': kw.get('uuid'),495 'type': kw.get('type'),496 'dynamic': kw.get('dynamic', True),497 'address_pool_id': kw.get('address_pool_id', None)498 }499 return inv500def get_test_icpu(**kw):501 inv = {502 'id': kw.get('id'),503 'uuid': kw.get('uuid'),504 'cpu': kw.get('cpu', int_uninitialized),505 'forinodeid': kw.get('forinodeid', int_uninitialized),506 'core': kw.get('core', int_uninitialized),507 'thread': kw.get('thread', 0),508 # 'coProcessors': kw.get('coProcessors', {}),509 'cpu_family': kw.get('cpu_family', 6),510 'cpu_model': kw.get('cpu_model', 'Intel(R) Core(TM)'),511 'allocated_function': kw.get('allocated_function', 'Platform'),512 'forihostid': kw.get('forihostid', None), # 321 ?513 'updated_at': None,514 'created_at': None,515 }516 return inv517def get_test_imemory(**kw):518 inv = {519 'id': kw.get('id'),520 'uuid': kw.get('uuid'),521 'memtotal_mib': kw.get('memtotal_mib', 2528),522 'memavail_mib': kw.get('memavail_mib', 2528),523 'platform_reserved_mib': kw.get('platform_reserved_mib', 1200),524 'node_memtotal_mib': kw.get('node_memtotal_mib', 7753),525 'hugepages_configured': kw.get('hugepages_configured', False),526 'vswitch_hugepages_size_mib': kw.get('vswitch_hugepages_size_mib', 2),527 'vswitch_hugepages_reqd': kw.get('vswitch_hugepages_reqd'),528 'vswitch_hugepages_nr': kw.get('vswitch_hugepages_nr', 256),529 'vswitch_hugepages_avail': kw.get('vswitch_hugepages_avail', 0),530 'vm_hugepages_nr_2M_pending': kw.get('vm_hugepages_nr_2M_pending'),531 'vm_hugepages_nr_1G_pending': kw.get('vm_hugepages_nr_1G_pending'),532 'vm_hugepages_nr_2M': kw.get('vm_hugepages_nr_2M', 1008),533 'vm_hugepages_avail_2M': kw.get('vm_hugepages_avail_2M', 1264),534 'vm_hugepages_nr_1G': kw.get('vm_hugepages_nr_1G', 0),535 'vm_hugepages_avail_1G': kw.get('vm_hugepages_avail_1G'),536 'vm_hugepages_nr_4K': kw.get('vm_hugepages_nr_4K', 131072),537 'vm_hugepages_use_1G': kw.get('vm_hugepages_use_1G', False),538 'vm_hugepages_possible_2M': kw.get('vm_hugepages_possible_2M', 1264),539 'vm_hugepages_possible_1G': kw.get('vm_hugepages_possible_1G', 1),540 'capabilities': kw.get('capabilities', None),541 'forinodeid': kw.get('forinodeid', None),542 'forihostid': kw.get('forihostid', None),543 'updated_at': None,544 'created_at': None,545 }546 return inv547def get_test_idisk(**kw):548 inv = {549 'id': kw.get('id'),550 'uuid': kw.get('uuid'),551 'device_node': kw.get('device_node'),552 'device_path': kw.get('device_path',553 '/dev/disk/by-path/pci-0000:00:0d.0-ata-1.0'),554 'device_num': kw.get('device_num', 2048),555 'device_type': kw.get('device_type'),556 'rpm': kw.get('rpm', 'Undetermined'),557 'serial_id': kw.get('serial_id', 'VBf34cf425-ff9d1c77'),558 'forihostid': kw.get('forihostid', 2),559 'foristorid': kw.get('foristorid', 2),560 'foripvid': kw.get('foripvid', 2),561 'available_mib': kw.get('available_mib', 100),562 'updated_at': None,563 'created_at': None,564 }565 return inv566def create_test_idisk(**kw):567 """Create test idisk entry in DB and return idisk DB object.568 Function to be used to create test idisk objects in the database.569 :param kw: kwargs with overriding values for idisk's attributes.570 :returns: Test idisk DB object.571 """572 idisk = get_test_idisk(**kw)573 # Let DB generate ID if it isn't specified explicitly574 if 'id' not in kw:575 del idisk['id']576 if 'foripvid' not in kw:577 del idisk['foripvid']578 if 'foristorid' not in kw:579 del idisk['foristorid']580 dbapi = db_api.get_instance()581 return dbapi.idisk_create(idisk['forihostid'], idisk)582def get_test_stor(**kw):583 stor = {584 'id': kw.get('id', 2),585 'function': kw.get('function'),586 'idisk_uuid': kw.get('idisk_uuid', 2),587 'forihostid': kw.get('forihostid', 2),588 'forilvgid': kw.get('forilvgid', 2),589 }590 return stor591def get_test_mon(**kw):592 mon = {593 'id': kw.get('id', 2),594 'uuid': kw.get('uuid'),595 'device_path': kw.get('device_path', ''),596 'ceph_mon_gib': kw.get('ceph_mon_gib', 20),597 'state': kw.get('state', 'configured'),598 'task': kw.get('task', None),599 'forihostid': kw.get('forihostid', 0),600 'ihost_uuid': kw.get('ihost_uuid', '1be26c0b-03f2-4d2e-ae87-c02d7f33c781'),601 'hostname': kw.get('hostname', 'controller-0'),602 }603 return mon604def get_test_lvg(**kw):605 lvg = {606 'id': kw.get('id', 2),607 'uuid': kw.get('uuid'),608 'lvm_vg_name': kw.get('lvm_vg_name'),609 'forihostid': kw.get('forihostid', 2),610 }611 return lvg612def create_test_lvg(**kw):613 """Create test lvg entry in DB and return LogicalVolumeGroup DB object.614 Function to be used to create test objects in the database.615 :param kw: kwargs with overriding values for attributes.616 kw requires: lvm_vg_name617 :returns: Test LogicalVolumeGroup DB object.618 """619 lvg = get_test_lvg(**kw)620 if 'uuid' not in kw:621 del lvg['uuid']622 dbapi = db_api.get_instance()623 forihostid = lvg['forihostid']624 return dbapi.ilvg_create(forihostid, lvg)625def get_test_pv(**kw):626 pv = {627 'id': kw.get('id', 2),628 'uuid': kw.get('uuid'),629 'lvm_vg_name': kw.get('lvm_vg_name'),630 'disk_or_part_uuid': kw.get('disk_or_part_uuid', str(uuid.uuid4())),631 'disk_or_part_device_path': kw.get('disk_or_part_device_path',632 '/dev/disk/by-path/pci-0000:00:0d.0-ata-3.0'),633 'forihostid': kw.get('forihostid', 2),634 'forilvgid': kw.get('forilvgid', 2),635 }636 return pv637def create_test_pv(**kw):638 """Create test pv entry in DB and return PV DB object.639 Function to be used to create test PV objects in the database.640 :param kw: kwargs with overriding values for pv's attributes.641 kw typically requires forihostid, forilvgid642 :returns: Test PV DB object.643 """644 pv = get_test_pv(**kw)645 if 'uuid' not in kw:646 del pv['uuid']647 dbapi = db_api.get_instance()648 forihostid = pv['forihostid']649 return dbapi.ipv_create(forihostid, pv)650def post_get_test_pv(**kw):651 pv = get_test_pv(**kw)652 # When invoking a POST the following fields should not be populated:653 del pv['uuid']654 del pv['id']655 return pv656def get_test_storage_backend(**kw):657 inv = {658 'id': kw.get('id'),659 'uuid': kw.get('uuid'),660 'backend': kw.get('backend', None),661 'state': kw.get('state', None),662 'task': kw.get('task', None),663 'services': kw.get('services', None),664 'capabilities': kw.get('capabilities', {}),665 'forisystemid': kw.get('forisystemid', None)666 }667 return inv668def get_test_ceph_storage_backend(**kw):669 inv = {670 'id': kw.get('id', 2),671 'uuid': kw.get('uuid'),672 'name': kw.get('name', constants.SB_DEFAULT_NAMES[constants.SB_TYPE_CEPH]),673 'backend': kw.get('backend', constants.SB_TYPE_CEPH),674 'state': kw.get('state', None),675 'task': kw.get('task', None),676 'services': kw.get('services', None),677 'tier_id': kw.get('tier_id'),678 'capabilities': kw.get('capabilities', constants.CEPH_BACKEND_CAP_DEFAULT),679 'forisystemid': kw.get('forisystemid', None),680 'cinder_pool_gib': kw.get('cinder_pool_gib', 80),681 'glance_pool_gib': kw.get('glance_pool_gib', 10),682 'ephemeral_pool_gib': kw.get('ephemeral_pool_gib', 0),683 'object_pool_gib': kw.get('object_pool_gib', 0),684 'object_gateway': kw.get('object_gateway', False)685 }686 return inv687def get_test_file_storage_backend(**kw):688 inv = {689 'id': kw.get('id', 3),690 'uuid': kw.get('uuid'),691 'name': kw.get('name', constants.SB_DEFAULT_NAMES[constants.SB_TYPE_FILE]),692 'backend': kw.get('backend', constants.SB_TYPE_FILE),693 'state': kw.get('state', None),694 'task': kw.get('task', None),695 'services': kw.get('services', None),696 'capabilities': kw.get('capabilities', {}),697 'forisystemid': kw.get('forisystemid', None)698 }699 return inv700def get_test_lvm_storage_backend(**kw):701 inv = {702 'id': kw.get('id', 4),703 'uuid': kw.get('uuid'),704 'name': kw.get('name', constants.SB_DEFAULT_NAMES[constants.SB_TYPE_LVM]),705 'backend': kw.get('backend', constants.SB_TYPE_LVM),706 'state': kw.get('state', None),707 'task': kw.get('task', None),708 'services': kw.get('services', None),709 'capabilities': kw.get('capabilities', {}),710 'forisystemid': kw.get('forisystemid', None)711 }712 return inv713def get_test_port(**kw):714 port = {715 'id': kw.get('id', 987),716 'uuid': kw.get('uuid', '1be26c0b-03f2-4d2e-ae87-c02d7f33c781'),717 'host_id': kw.get('host_id'),718 'node_id': kw.get('node_id'),719 'interface_id': kw.get('interface_id'),720 'name': kw.get('name'),721 'pciaddr': kw.get('pciaddr'),722 'pclass': kw.get('pclass'),723 'pvendor': kw.get('pvendor'),724 'psdevice': kw.get('psdevice'),725 'dpdksupport': kw.get('dpdksupport'),726 'numa_node': kw.get('numa_node'),727 'dev_id': kw.get('dev_id'),728 'sriov_totalvfs': kw.get('sriov_totalvfs'),729 'sriov_numvfs': kw.get('sriov_numvfs'),730 'sriov_vfs_pci_address': kw.get('sriov_vfs_pci_address'),731 'sriov_vf_driver': kw.get('sriov_vf_driver'),732 'sriov_vf_pdevice_id': kw.get('sriov_vf_pdevice_id'),733 'driver': kw.get('driver'),734 'capabilities': kw.get('capabilities'),735 'created_at': kw.get('created_at'),736 'updated_at': kw.get('updated_at'),737 }738 return port739def get_test_chassis(**kw):740 chassis = {741 'id': kw.get('id', 42),742 'uuid': kw.get('uuid', 'e74c40e0-d825-11e2-a28f-0800200c9a66'),743 'extra': kw.get('extra', {}),744 'description': kw.get('description', 'data-center-1-chassis'),745 'created_at': kw.get('created_at'),746 'updated_at': kw.get('updated_at'),747 }748 return chassis749def get_test_ethernet_port(**kw):750 ethernet_port = {751 'id': kw.get('id', 24),752 'mac': kw.get('mac', '08:00:27:ea:93:8e'),753 'mtu': kw.get('mtu', '1500'),754 'speed': kw.get('speed', 1000),755 'link_mode': kw.get('link_mode', 0),756 'duplex': kw.get('duplex', None),757 'autoneg': kw.get('autoneg', None),758 'bootp': kw.get('bootp', None),759 'name': kw.get('name'),760 'host_id': kw.get('host_id'),761 'interface_id': kw.get('interface_id'),762 'interface_uuid': kw.get('interface_uuid'),763 'pciaddr': kw.get('pciaddr'),764 'dpdksupport': kw.get('dpdksupport'),765 'dev_id': kw.get('dev_id'),766 'sriov_totalvfs': kw.get('sriov_totalvfs'),767 'sriov_numvfs': kw.get('sriov_numvfs'),768 'sriov_vf_driver': kw.get('sriov_vf_driver'),769 'sriov_vf_pdevice_id': kw.get('sriov_vf_pdevice_id'),770 'driver': kw.get('driver'),771 'numa_node': kw.get('numa_node', -1)772 }773 return ethernet_port774def get_test_datanetwork(**kw):775 datanetwork = {776 'uuid': kw.get('uuid', '60d41820-a4a0-4c25-a6a0-2a3b98746640'),777 'name': kw.get('name'),778 'network_type': kw.get('network_type', 'vxlan'),779 'mtu': kw.get('mtu', '1500'),780 'multicast_group': kw.get('multicast_group', '239.0.2.1'),781 'port_num': kw.get('port_num', 8472),782 'ttl': kw.get('ttl', 10),783 'mode': kw.get('mode', 'dynamic'),784 }785 return datanetwork786def create_test_datanetwork(**kw):787 """Create test datanetwork entry in DB and return datanetwork DB object.788 Function to be used to create test datanetwork objects in the database.789 :param kw: kwargs with overriding values for datanework attributes.790 :returns: Test datanetwork DB object.791 """792 datanetwork = get_test_datanetwork(**kw)793 if kw['network_type'] != constants.DATANETWORK_TYPE_VXLAN:794 # Remove DB fields which are specific to VXLAN795 del datanetwork['multicast_group']796 del datanetwork['port_num']797 del datanetwork['ttl']798 del datanetwork['mode']799 dbapi = db_api.get_instance()800 return dbapi.datanetwork_create(datanetwork)801def create_test_ethernet_port(**kw):802 """Create test ethernet port entry in DB and return ethernet port DB object.803 Function to be used to create test ethernet port objects in the database.804 :param kw: kwargs with overriding values for ethernet port's attributes.805 :returns: Test ethernet port DB object.806 """807 ethernet_port = get_test_ethernet_port(**kw)808 # Let DB generate ID if it isn't specified explicitly809 if 'id' not in kw:810 del ethernet_port['id']811 dbapi = db_api.get_instance()812 return dbapi.ethernet_port_create(ethernet_port['host_id'], ethernet_port)813def get_test_interface(**kw):814 interface = {815 'id': kw.get('id'),816 'uuid': kw.get('uuid'),817 'forihostid': kw.get('forihostid'),818 'ihost_uuid': kw.get('ihost_uuid'),819 'ifname': kw.get('ifname', 'enp0s3'),820 'iftype': kw.get('iftype', 'ethernet'),821 'imac': kw.get('imac', '11:22:33:44:55:66'),822 'imtu': kw.get('imtu', 1500),823 'ifclass': kw.get('ifclass', None),824 'networktypelist': kw.get('networktypelist', []),825 'aemode': kw.get('aemode'),826 'txhashpolicy': kw.get('txhashpolicy', None),827 'vlan_id': kw.get('vlan_id', None),828 'uses': kw.get('uses', []),829 'used_by': kw.get('used_by', []),830 'ipv4_mode': kw.get('ipv4_mode'),831 'ipv6_mode': kw.get('ipv6_mode'),832 'ipv4_pool': kw.get('ipv4_pool'),833 'ipv6_pool': kw.get('ipv6_pool'),834 'sriov_numvfs': kw.get('sriov_numvfs', None),835 'sriov_vf_driver': kw.get('sriov_vf_driver', None),836 'sriov_vf_pdevice_id': kw.get('sriov_vf_pdevice_id', None),837 'ptp_role': kw.get('ptp_role', None)838 }839 return interface840def create_test_interface(**kw):841 """Create test interface entry in DB and return Interface DB object.842 Function to be used to create test Interface objects in the database.843 :param kw: kwargs with overriding values for interface's attributes.844 :returns: Test Interface DB object.845 """846 interface = get_test_interface(**kw)847 datanetworks_list = interface.get('datanetworks') or []848 networks_list = interface.get('networks') or []849 # Let DB generate ID if it isn't specified explicitly850 if 'id' not in kw:851 del interface['id']852 if 'datanetworks' in interface:853 del interface['datanetworks']854 if 'networks' in interface:855 del interface['networks']856 dbapi = db_api.get_instance()857 forihostid = kw.get('forihostid')858 interface_obj = dbapi.iinterface_create(forihostid, interface)859 # assign the network to the interface860 for network in networks_list:861 if not network:862 continue863 net = dbapi.network_get(network)864 values = {'interface_id': interface_obj.id,865 'network_id': net.id}866 dbapi.interface_network_create(values)867 # assign the interface to the datanetwork868 for datanetwork in datanetworks_list:869 if not datanetwork:870 continue871 dn = dbapi.datanetwork_get(datanetwork)872 values = {'interface_id': interface_obj.id,873 'datanetwork_id': dn.id}874 dbapi.interface_datanetwork_create(values)875 return interface_obj876def create_test_interface_network(**kw):877 """Create test network interface entry in DB and return Network DB878 object. Function to be used to create test Network objects in the database.879 :param kw: kwargs with overriding values for network's attributes.880 :returns: Test Network DB object.881 """882 interface_network = get_test_interface_network(**kw)883 if 'id' not in kw:884 del interface_network['id']885 dbapi = db_api.get_instance()886 return dbapi.interface_network_create(interface_network)887def get_test_interface_network(**kw):888 inv = {889 'id': kw.get('id'),890 'uuid': kw.get('uuid'),891 'interface_id': kw.get('interface_id'),892 'network_id': kw.get('network_id'),893 }894 return inv895def post_get_test_interface_network(**kw):896 inv = {897 'interface_uuid': kw.get('interface_uuid'),898 'network_uuid': kw.get('network_uuid'),899 }900 return inv901def get_test_partition(**kw):902 """get_test_partition will fail unless903 forihostid is provided904 disk_id is provided905 size_mib must be a valid number906 """907 partition = {908 'uuid': kw.get('uuid'),909 'start_mib': kw.get('start_mib'),910 'end_mib': kw.get('end_mib'),911 'size_mib': kw.get('size_mib'),912 'device_path': kw.get('device_path'),913 'device_node': kw.get('device_node'),914 'forihostid': kw.get('forihostid'),915 'idisk_id': kw.get('idisk_id'),916 'idisk_uuid': kw.get('idisk_uuid'),917 'type_guid': kw.get('type_guid'),918 'status': kw.get('status',919 constants.PARTITION_CREATE_ON_UNLOCK_STATUS),920 }921 return partition922def create_test_partition(**kw):923 """Create test partition entry in DB and return Partition DB924 object. Function to be used to create test Partition objects in the database.925 :param kw: kwargs with overriding values for partition's attributes.926 :returns: Test Partition DB object.927 """928 partition = get_test_partition(**kw)929 if 'uuid' not in kw:930 del partition['uuid']931 dbapi = db_api.get_instance()932 forihostid = partition['forihostid']933 return dbapi.partition_create(forihostid, partition)934def post_get_test_partition(**kw):935 partition = get_test_partition(**kw)936 # When invoking a POST the following fields should not be populated:937 del partition['uuid']938 del partition['status']939 return partition940def get_test_interface_datanetwork(**kw):941 inv = {942 'id': kw.get('id'),943 'uuid': kw.get('uuid'),944 'interface_uuid': kw.get('interface_uuid'),945 'datanetwork_uuid': kw.get('datanetwork_uuid'),946 }947 return inv948def create_test_interface_datanetwork(**kw):949 """Create test network interface entry in DB and return Network DB950 object. Function to be used to create test Network objects in the database.951 :param kw: kwargs with overriding values for network's attributes.952 :returns: Test Network DB object.953 """954 interface_datanetwork = get_test_interface_datanetwork(**kw)955 if 'id' not in kw:956 del interface_datanetwork['id']957 dbapi = db_api.get_instance()958 return dbapi.interface_datanetwork_create(interface_datanetwork)959def post_get_test_interface_datanetwork(**kw):960 inv = {961 'interface_uuid': kw.get('interface_uuid'),962 'datanetwork_uuid': kw.get('datanetwork_uuid'),963 }964 return inv965def get_test_storage_tier(**kw):966 tier = {967 'id': kw.get('id', 321),968 'uuid': kw.get('uuid'),969 'name': kw.get('name', constants.SB_TIER_DEFAULT_NAMES[constants.SB_TYPE_CEPH]),970 'type': kw.get('type', constants.SB_TYPE_CEPH),971 'status': kw.get('status', constants.SB_TIER_STATUS_DEFINED),972 'capabilities': kw.get('capabilities', {}),973 'forclusterid': kw.get('forclusterid'),974 'cluster_uuid': kw.get('cluster_uuid'),975 'forbackendid': kw.get('forbackendid'),976 'backend_uuid': kw.get('backend_uuid'),977 }978 return tier979def create_test_storage_tier(**kw):980 """Create test storage_tier entry in DB and return storage_tier DB object.981 Function to be used to create test storage_tier objects in the database.982 :param kw: kwargs with overriding values for system's attributes.983 :returns: Test System DB object.984 """985 storage_tier = get_test_storage_tier(**kw)986 # Let DB generate ID if it isn't specified explicitly987 if 'id' not in kw:988 del storage_tier['id']989 dbapi = db_api.get_instance()990 return dbapi.storage_tier_create(storage_tier)991def get_test_cluster(**kw):992 cluster = {993 'id': kw.get('id', 321),994 'uuid': kw.get('uuid'),995 'name': kw.get('name'),996 'type': kw.get('type', constants.SB_TYPE_CEPH),997 'capabilities': kw.get('capabilities', {}),998 'system_id': kw.get('system_id'),999 'cluster_uuid': kw.get('cluster_uuid'),1000 }1001 return cluster1002def create_test_cluster(**kw):1003 """Create test cluster entry in DB and return System DB object.1004 Function to be used to create test cluster objects in the database.1005 :param kw: kwargs with overriding values for system's attributes.1006 :returns: Test System DB object.1007 """1008 cluster = get_test_cluster(**kw)1009 # Let DB generate ID if it isn't specified explicitly1010 if 'id' not in kw:1011 del cluster['id']1012 dbapi = db_api.get_instance()1013 return dbapi.cluster_create(cluster)1014def get_test_app(**kw):1015 app_data = {1016 'id': kw.get('id', 90210),1017 'name': kw.get('name', 'stx-openstack'),1018 'app_version': kw.get('app_version',1019 constants.APP_VERSION_PLACEHOLDER),1020 'manifest_name': kw.get('manifest_name',1021 constants.APP_MANIFEST_NAME_PLACEHOLDER),1022 'manifest_file': kw.get('manifest_file',1023 constants.APP_TARFILE_NAME_PLACEHOLDER),1024 'status': kw.get('status', constants.APP_UPLOAD_IN_PROGRESS),1025 'active': kw.get('active', False),1026 }1027 return app_data1028def create_test_app(**kw):1029 """Create test application entry in DB and return Application DB object.1030 Function to be used to create test application objects in the database.1031 :param kw: kwargs with overriding values for application attributes.1032 :returns: Test Application DB object.1033 """1034 app_data = get_test_app(**kw)1035 # Let DB generate ID if it isn't specified explicitly1036 if 'id' not in kw:1037 del app_data['id']1038 dbapi = db_api.get_instance()1039 return dbapi.kube_app_create(app_data)1040def get_test_pci_devices(**kw):1041 pci_devices = {1042 'id': kw.get('id', 2345),1043 'host_id': kw.get('host_id', 2),1044 'name': kw.get('name', 'pci_0000_00_02_0 '),1045 'pciaddr': kw.get('pciaddr', '0000:00:02.0'),1046 'pclass_id': kw.get('pclass_id', '030000'),1047 'pvendor_id': kw.get('pvendor_id', '8086'),1048 'pdevice_id': kw.get('pdevice_id', '3ea5'),1049 'pclass': kw.get('pclass', 'VGA compatible controller'),1050 'pvendor': kw.get('pvendor', 'Intel Corporation'),1051 'pdevice': kw.get('pdevice', 'Iris Plus Graphics 655'),1052 'numa_node': kw.get('numa_node', -1),1053 'enabled': kw.get('enabled', True),1054 'driver': kw.get('driver', '')1055 }1056 return pci_devices1057def create_test_pci_devices(**kw):1058 """Create test pci devices entry in DB and return PciDevice DB object.1059 Function to be used to create test pci device objects in the database.1060 :param kw: kwargs with overriding values for pci device attributes.1061 :returns: Test PciDevice DB object.1062 """1063 pci_devices = get_test_pci_devices(**kw)1064 # Let DB generate ID if it isn't specified explicitly1065 if 'id' not in kw:1066 del pci_devices['id']1067 dbapi = db_api.get_instance()1068 return dbapi.pci_device_create(pci_devices['host_id'], pci_devices)1069def get_test_label(**kw):1070 label = {1071 'host_id': kw.get('host_id'),1072 'label_key': kw.get('label_key'),1073 'label_value': kw.get('label_value'),1074 }1075 return label1076def create_test_label(**kw):1077 """Create test label in DB and return label object.1078 Function to be used to create test label objects in the database.1079 :param kw: kwargs with overriding values for labels's attributes.1080 :returns: Test label DB object.1081 """1082 label = get_test_label(**kw)1083 dbapi = db_api.get_instance()1084 return dbapi.label_create(label['host_id'], label)1085def create_test_oam(**kw):1086 dbapi = db_api.get_instance()...
c_config.py
Source:c_config.py
1#! /usr/bin/env python2# encoding: utf-83# WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file4import os,re,shlex,sys5from waflib import Build,Utils,Task,Options,Logs,Errors,ConfigSet,Runner6from waflib.TaskGen import after_method,feature7from waflib.Configure import conf8WAF_CONFIG_H='config.h'9DEFKEYS='define_key'10INCKEYS='include_key'11cfg_ver={'atleast-version':'>=','exact-version':'==','max-version':'<=',}12SNIP_FUNCTION='''13int main(int argc, char **argv) {14 void *p;15 (void)argc; (void)argv;16 p=(void*)(%s);17 return 0;18}19'''20SNIP_TYPE='''21int main(int argc, char **argv) {22 (void)argc; (void)argv;23 if ((%(type_name)s *) 0) return 0;24 if (sizeof (%(type_name)s)) return 0;25 return 1;26}27'''28SNIP_EMPTY_PROGRAM='''29int main(int argc, char **argv) {30 (void)argc; (void)argv;31 return 0;32}33'''34SNIP_FIELD='''35int main(int argc, char **argv) {36 char *off;37 (void)argc; (void)argv;38 off = (char*) &((%(type_name)s*)0)->%(field_name)s;39 return (size_t) off < sizeof(%(type_name)s);40}41'''42MACRO_TO_DESTOS={'__linux__':'linux','__GNU__':'gnu','__FreeBSD__':'freebsd','__NetBSD__':'netbsd','__OpenBSD__':'openbsd','__sun':'sunos','__hpux':'hpux','__sgi':'irix','_AIX':'aix','__CYGWIN__':'cygwin','__MSYS__':'msys','_UWIN':'uwin','_WIN64':'win32','_WIN32':'win32','__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__':'darwin','__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__':'darwin','__QNX__':'qnx','__native_client__':'nacl'}43MACRO_TO_DEST_CPU={'__x86_64__':'x86_64','__amd64__':'x86_64','__i386__':'x86','__ia64__':'ia','__mips__':'mips','__sparc__':'sparc','__alpha__':'alpha','__aarch64__':'aarch64','__thumb__':'thumb','__arm__':'arm','__hppa__':'hppa','__powerpc__':'powerpc','__ppc__':'powerpc','__convex__':'convex','__m68k__':'m68k','__s390x__':'s390x','__s390__':'s390','__sh__':'sh',}44@conf45def parse_flags(self,line,uselib_store,env=None,force_static=False):46 assert(isinstance(line,str))47 env=env or self.env48 app=env.append_value49 appu=env.append_unique50 lex=shlex.shlex(line,posix=False)51 lex.whitespace_split=True52 lex.commenters=''53 lst=list(lex)54 uselib=uselib_store55 while lst:56 x=lst.pop(0)57 st=x[:2]58 ot=x[2:]59 if st=='-I'or st=='/I':60 if not ot:ot=lst.pop(0)61 appu('INCLUDES_'+uselib,[ot])62 elif st=='-include':63 tmp=[x,lst.pop(0)]64 app('CFLAGS',tmp)65 app('CXXFLAGS',tmp)66 elif st=='-D'or(env.CXX_NAME=='msvc'and st=='/D'):67 if not ot:ot=lst.pop(0)68 app('DEFINES_'+uselib,[ot])69 elif st=='-l':70 if not ot:ot=lst.pop(0)71 prefix=force_static and'STLIB_'or'LIB_'72 appu(prefix+uselib,[ot])73 elif st=='-L':74 if not ot:ot=lst.pop(0)75 appu('LIBPATH_'+uselib,[ot])76 elif x.startswith('/LIBPATH:'):77 appu('LIBPATH_'+uselib,[x.replace('/LIBPATH:','')])78 elif x=='-pthread'or x.startswith('+')or x.startswith('-std'):79 app('CFLAGS_'+uselib,[x])80 app('CXXFLAGS_'+uselib,[x])81 app('LINKFLAGS_'+uselib,[x])82 elif x=='-framework':83 appu('FRAMEWORK_'+uselib,[lst.pop(0)])84 elif x.startswith('-F'):85 appu('FRAMEWORKPATH_'+uselib,[x[2:]])86 elif x.startswith('-Wl'):87 app('LINKFLAGS_'+uselib,[x])88 elif x.startswith('-m')or x.startswith('-f')or x.startswith('-dynamic'):89 app('CFLAGS_'+uselib,[x])90 app('CXXFLAGS_'+uselib,[x])91 elif x.startswith('-bundle'):92 app('LINKFLAGS_'+uselib,[x])93 elif x.startswith('-undefined'):94 arg=lst.pop(0)95 app('LINKFLAGS_'+uselib,[x,arg])96 elif x.startswith('-arch')or x.startswith('-isysroot'):97 tmp=[x,lst.pop(0)]98 app('CFLAGS_'+uselib,tmp)99 app('CXXFLAGS_'+uselib,tmp)100 app('LINKFLAGS_'+uselib,tmp)101 elif x.endswith('.a')or x.endswith('.so')or x.endswith('.dylib')or x.endswith('.lib'):102 appu('LINKFLAGS_'+uselib,[x])103@conf104def ret_msg(self,f,kw):105 if isinstance(f,str):106 return f107 return f(kw)108@conf109def validate_cfg(self,kw):110 if not'path'in kw:111 if not self.env.PKGCONFIG:112 self.find_program('pkg-config',var='PKGCONFIG')113 kw['path']=self.env.PKGCONFIG114 if'atleast_pkgconfig_version'in kw:115 if not'msg'in kw:116 kw['msg']='Checking for pkg-config version >= %r'%kw['atleast_pkgconfig_version']117 return118 if not'okmsg'in kw:119 kw['okmsg']='yes'120 if not'errmsg'in kw:121 kw['errmsg']='not found'122 if'modversion'in kw:123 if not'msg'in kw:124 kw['msg']='Checking for %r version'%kw['modversion']125 return126 for x in cfg_ver.keys():127 y=x.replace('-','_')128 if y in kw:129 if not'package'in kw:130 raise ValueError('%s requires a package'%x)131 if not'msg'in kw:132 kw['msg']='Checking for %r %s %s'%(kw['package'],cfg_ver[x],kw[y])133 return134 if not'msg'in kw:135 kw['msg']='Checking for %r'%(kw['package']or kw['path'])136@conf137def exec_cfg(self,kw):138 def define_it():139 self.define(self.have_define(kw.get('uselib_store',kw['package'])),1,0)140 if'atleast_pkgconfig_version'in kw:141 cmd=[kw['path'],'--atleast-pkgconfig-version=%s'%kw['atleast_pkgconfig_version']]142 self.cmd_and_log(cmd)143 if not'okmsg'in kw:144 kw['okmsg']='yes'145 return146 for x in cfg_ver:147 y=x.replace('-','_')148 if y in kw:149 self.cmd_and_log([kw['path'],'--%s=%s'%(x,kw[y]),kw['package']])150 if not'okmsg'in kw:151 kw['okmsg']='yes'152 define_it()153 break154 if'modversion'in kw:155 version=self.cmd_and_log([kw['path'],'--modversion',kw['modversion']]).strip()156 self.define('%s_VERSION'%Utils.quote_define_name(kw.get('uselib_store',kw['modversion'])),version)157 return version158 lst=[kw['path']]159 defi=kw.get('define_variable',None)160 if not defi:161 defi=self.env.PKG_CONFIG_DEFINES or{}162 for key,val in defi.items():163 lst.append('--define-variable=%s=%s'%(key,val))164 if'variables'in kw:165 env=kw.get('env',self.env)166 uselib=kw.get('uselib_store',kw['package'].upper())167 vars=Utils.to_list(kw['variables'])168 for v in vars:169 val=self.cmd_and_log(lst+['--variable='+v]).strip()170 var='%s_%s'%(uselib,v)171 env[var]=val172 if not'okmsg'in kw:173 kw['okmsg']='yes'174 return175 static=False176 if'args'in kw:177 args=Utils.to_list(kw['args'])178 if'--static'in args or'--static-libs'in args:179 static=True180 lst+=args181 lst.extend(Utils.to_list(kw['package']))182 ret=self.cmd_and_log(lst)183 if not'okmsg'in kw:184 kw['okmsg']='yes'185 define_it()186 self.parse_flags(ret,kw.get('uselib_store',kw['package'].upper()),kw.get('env',self.env),force_static=static)187 return ret188@conf189def check_cfg(self,*k,**kw):190 if k:191 lst=k[0].split()192 kw['package']=lst[0]193 kw['args']=' '.join(lst[1:])194 self.validate_cfg(kw)195 if'msg'in kw:196 self.start_msg(kw['msg'])197 ret=None198 try:199 ret=self.exec_cfg(kw)200 except self.errors.WafError:201 if'errmsg'in kw:202 self.end_msg(kw['errmsg'],'YELLOW')203 if Logs.verbose>1:204 raise205 else:206 self.fatal('The configuration failed')207 else:208 kw['success']=ret209 if'okmsg'in kw:210 self.end_msg(self.ret_msg(kw['okmsg'],kw))211 return ret212@conf213def validate_c(self,kw):214 if not'env'in kw:215 kw['env']=self.env.derive()216 env=kw['env']217 if not'compiler'in kw and not'features'in kw:218 kw['compiler']='c'219 if env['CXX_NAME']and Task.classes.get('cxx',None):220 kw['compiler']='cxx'221 if not self.env['CXX']:222 self.fatal('a c++ compiler is required')223 else:224 if not self.env['CC']:225 self.fatal('a c compiler is required')226 if not'compile_mode'in kw:227 kw['compile_mode']='c'228 if'cxx'in Utils.to_list(kw.get('features',[]))or kw.get('compiler','')=='cxx':229 kw['compile_mode']='cxx'230 if not'type'in kw:231 kw['type']='cprogram'232 if not'features'in kw:233 kw['features']=[kw['compile_mode'],kw['type']]234 else:235 kw['features']=Utils.to_list(kw['features'])236 if not'compile_filename'in kw:237 kw['compile_filename']='test.c'+((kw['compile_mode']=='cxx')and'pp'or'')238 def to_header(dct):239 if'header_name'in dct:240 dct=Utils.to_list(dct['header_name'])241 return''.join(['#include <%s>\n'%x for x in dct])242 return''243 if'framework_name'in kw:244 fwkname=kw['framework_name']245 if not'uselib_store'in kw:246 kw['uselib_store']=fwkname.upper()247 if not kw.get('no_header',False):248 if not'header_name'in kw:249 kw['header_name']=[]250 fwk='%s/%s.h'%(fwkname,fwkname)251 if kw.get('remove_dot_h',None):252 fwk=fwk[:-2]253 kw['header_name']=Utils.to_list(kw['header_name'])+[fwk]254 kw['msg']='Checking for framework %s'%fwkname255 kw['framework']=fwkname256 if'function_name'in kw:257 fu=kw['function_name']258 if not'msg'in kw:259 kw['msg']='Checking for function %s'%fu260 kw['code']=to_header(kw)+SNIP_FUNCTION%fu261 if not'uselib_store'in kw:262 kw['uselib_store']=fu.upper()263 if not'define_name'in kw:264 kw['define_name']=self.have_define(fu)265 elif'type_name'in kw:266 tu=kw['type_name']267 if not'header_name'in kw:268 kw['header_name']='stdint.h'269 if'field_name'in kw:270 field=kw['field_name']271 kw['code']=to_header(kw)+SNIP_FIELD%{'type_name':tu,'field_name':field}272 if not'msg'in kw:273 kw['msg']='Checking for field %s in %s'%(field,tu)274 if not'define_name'in kw:275 kw['define_name']=self.have_define((tu+'_'+field).upper())276 else:277 kw['code']=to_header(kw)+SNIP_TYPE%{'type_name':tu}278 if not'msg'in kw:279 kw['msg']='Checking for type %s'%tu280 if not'define_name'in kw:281 kw['define_name']=self.have_define(tu.upper())282 elif'header_name'in kw:283 if not'msg'in kw:284 kw['msg']='Checking for header %s'%kw['header_name']285 l=Utils.to_list(kw['header_name'])286 assert len(l)>0,'list of headers in header_name is empty'287 kw['code']=to_header(kw)+SNIP_EMPTY_PROGRAM288 if not'uselib_store'in kw:289 kw['uselib_store']=l[0].upper()290 if not'define_name'in kw:291 kw['define_name']=self.have_define(l[0])292 if'lib'in kw:293 if not'msg'in kw:294 kw['msg']='Checking for library %s'%kw['lib']295 if not'uselib_store'in kw:296 kw['uselib_store']=kw['lib'].upper()297 if'stlib'in kw:298 if not'msg'in kw:299 kw['msg']='Checking for static library %s'%kw['stlib']300 if not'uselib_store'in kw:301 kw['uselib_store']=kw['stlib'].upper()302 if'fragment'in kw:303 kw['code']=kw['fragment']304 if not'msg'in kw:305 kw['msg']='Checking for code snippet'306 if not'errmsg'in kw:307 kw['errmsg']='no'308 for(flagsname,flagstype)in[('cxxflags','compiler'),('cflags','compiler'),('linkflags','linker')]:309 if flagsname in kw:310 if not'msg'in kw:311 kw['msg']='Checking for %s flags %s'%(flagstype,kw[flagsname])312 if not'errmsg'in kw:313 kw['errmsg']='no'314 if not'execute'in kw:315 kw['execute']=False316 if kw['execute']:317 kw['features'].append('test_exec')318 if not'errmsg'in kw:319 kw['errmsg']='not found'320 if not'okmsg'in kw:321 kw['okmsg']='yes'322 if not'code'in kw:323 kw['code']=SNIP_EMPTY_PROGRAM324 if self.env[INCKEYS]:325 kw['code']='\n'.join(['#include <%s>'%x for x in self.env[INCKEYS]])+'\n'+kw['code']326 if not kw.get('success'):kw['success']=None327 if'define_name'in kw:328 self.undefine(kw['define_name'])329 assert'msg'in kw,'invalid parameters, read http://freehackers.org/~tnagy/wafbook/single.html#config_helpers_c'330@conf331def post_check(self,*k,**kw):332 is_success=0333 if kw['execute']:334 if kw['success']is not None:335 if kw.get('define_ret',False):336 is_success=kw['success']337 else:338 is_success=(kw['success']==0)339 else:340 is_success=(kw['success']==0)341 if'define_name'in kw:342 if'header_name'in kw or'function_name'in kw or'type_name'in kw or'fragment'in kw:343 if kw['execute']and kw.get('define_ret',None)and isinstance(is_success,str):344 self.define(kw['define_name'],is_success,quote=kw.get('quote',1))345 else:346 self.define_cond(kw['define_name'],is_success)347 else:348 self.define_cond(kw['define_name'],is_success)349 if'header_name'in kw:350 if kw.get('auto_add_header_name',False):351 self.env.append_value(INCKEYS,Utils.to_list(kw['header_name']))352 if is_success and'uselib_store'in kw:353 from waflib.Tools import ccroot354 _vars=set([])355 for x in kw['features']:356 if x in ccroot.USELIB_VARS:357 _vars|=ccroot.USELIB_VARS[x]358 for k in _vars:359 lk=k.lower()360 if k=='INCLUDES':lk='includes'361 if k=='DEFINES':lk='defines'362 if lk in kw:363 val=kw[lk]364 if isinstance(val,str):365 val=val.rstrip(os.path.sep)366 self.env.append_unique(k+'_'+kw['uselib_store'],val)367 return is_success368@conf369def check(self,*k,**kw):370 self.validate_c(kw)371 self.start_msg(kw['msg'])372 ret=None373 try:374 ret=self.run_c_code(*k,**kw)375 except self.errors.ConfigurationError:376 self.end_msg(kw['errmsg'],'YELLOW')377 if Logs.verbose>1:378 raise379 else:380 self.fatal('The configuration failed')381 else:382 kw['success']=ret383 ret=self.post_check(*k,**kw)384 if not ret:385 self.end_msg(kw['errmsg'],'YELLOW')386 self.fatal('The configuration failed %r'%ret)387 else:388 self.end_msg(self.ret_msg(kw['okmsg'],kw))389 return ret390class test_exec(Task.Task):391 color='PINK'392 def run(self):393 if getattr(self.generator,'rpath',None):394 if getattr(self.generator,'define_ret',False):395 self.generator.bld.retval=self.generator.bld.cmd_and_log([self.inputs[0].abspath()])396 else:397 self.generator.bld.retval=self.generator.bld.exec_command([self.inputs[0].abspath()])398 else:399 env=self.env.env or{}400 env.update(dict(os.environ))401 for var in('LD_LIBRARY_PATH','DYLD_LIBRARY_PATH','PATH'):402 env[var]=self.inputs[0].parent.abspath()+os.path.pathsep+env.get(var,'')403 if getattr(self.generator,'define_ret',False):404 self.generator.bld.retval=self.generator.bld.cmd_and_log([self.inputs[0].abspath()],env=env)405 else:406 self.generator.bld.retval=self.generator.bld.exec_command([self.inputs[0].abspath()],env=env)407@feature('test_exec')408@after_method('apply_link')409def test_exec_fun(self):410 self.create_task('test_exec',self.link_task.outputs[0])411CACHE_RESULTS=1412COMPILE_ERRORS=2413@conf414def run_c_code(self,*k,**kw):415 lst=[str(v)for(p,v)in kw.items()if p!='env']416 h=Utils.h_list(lst)417 dir=self.bldnode.abspath()+os.sep+(not Utils.is_win32 and'.'or'')+'conf_check_'+Utils.to_hex(h)418 try:419 os.makedirs(dir)420 except OSError:421 pass422 try:423 os.stat(dir)424 except OSError:425 self.fatal('cannot use the configuration test folder %r'%dir)426 cachemode=getattr(Options.options,'confcache',None)427 if cachemode==CACHE_RESULTS:428 try:429 proj=ConfigSet.ConfigSet(os.path.join(dir,'cache_run_c_code'))430 except OSError:431 pass432 else:433 ret=proj['cache_run_c_code']434 if isinstance(ret,str)and ret.startswith('Test does not build'):435 self.fatal(ret)436 return ret437 bdir=os.path.join(dir,'testbuild')438 if not os.path.exists(bdir):439 os.makedirs(bdir)440 self.test_bld=bld=Build.BuildContext(top_dir=dir,out_dir=bdir)441 bld.init_dirs()442 bld.progress_bar=0443 bld.targets='*'444 if kw['compile_filename']:445 node=bld.srcnode.make_node(kw['compile_filename'])446 node.write(kw['code'])447 bld.logger=self.logger448 bld.all_envs.update(self.all_envs)449 bld.env=kw['env']450 o=bld(features=kw['features'],source=kw['compile_filename'],target='testprog')451 for k,v in kw.items():452 setattr(o,k,v)453 self.to_log("==>\n%s\n<=="%kw['code'])454 bld.targets='*'455 ret=-1456 try:457 try:458 bld.compile()459 except Errors.WafError:460 ret='Test does not build: %s'%Utils.ex_stack()461 self.fatal(ret)462 else:463 ret=getattr(bld,'retval',0)464 finally:465 proj=ConfigSet.ConfigSet()466 proj['cache_run_c_code']=ret467 proj.store(os.path.join(dir,'cache_run_c_code'))468 return ret469@conf470def check_cxx(self,*k,**kw):471 kw['compiler']='cxx'472 return self.check(*k,**kw)473@conf474def check_cc(self,*k,**kw):475 kw['compiler']='c'476 return self.check(*k,**kw)477@conf478def define(self,key,val,quote=True):479 assert key and isinstance(key,str)480 if val is True:481 val=1482 elif val in(False,None):483 val=0484 if isinstance(val,int)or isinstance(val,float):485 s='%s=%s'486 else:487 s=quote and'%s="%s"'or'%s=%s'488 app=s%(key,str(val))489 ban=key+'='490 lst=self.env['DEFINES']491 for x in lst:492 if x.startswith(ban):493 lst[lst.index(x)]=app494 break495 else:496 self.env.append_value('DEFINES',app)497 self.env.append_unique(DEFKEYS,key)498@conf499def undefine(self,key):500 assert key and isinstance(key,str)501 ban=key+'='502 lst=[x for x in self.env['DEFINES']if not x.startswith(ban)]503 self.env['DEFINES']=lst504 self.env.append_unique(DEFKEYS,key)505@conf506def define_cond(self,key,val):507 assert key and isinstance(key,str)508 if val:509 self.define(key,1)510 else:511 self.undefine(key)512@conf513def is_defined(self,key):514 assert key and isinstance(key,str)515 ban=key+'='516 for x in self.env['DEFINES']:517 if x.startswith(ban):518 return True519 return False520@conf521def get_define(self,key):522 assert key and isinstance(key,str)523 ban=key+'='524 for x in self.env['DEFINES']:525 if x.startswith(ban):526 return x[len(ban):]527 return None528@conf529def have_define(self,key):530 return(self.env.HAVE_PAT or'HAVE_%s')%Utils.quote_define_name(key)531@conf532def write_config_header(self,configfile='',guard='',top=False,env=None,defines=True,headers=False,remove=True,define_prefix=''):533 if env:534 Logs.warn('Cannot pass env to write_config_header')535 if not configfile:configfile=WAF_CONFIG_H536 waf_guard=guard or'W_%s_WAF'%Utils.quote_define_name(configfile)537 node=top and self.bldnode or self.path.get_bld()538 node=node.make_node(configfile)539 node.parent.mkdir()540 lst=['/* WARNING! All changes made to this file will be lost! */\n']541 lst.append('#ifndef %s\n#define %s\n'%(waf_guard,waf_guard))542 lst.append(self.get_config_header(defines,headers,define_prefix=define_prefix))543 lst.append('\n#endif /* %s */\n'%waf_guard)544 node.write('\n'.join(lst))545 self.env.append_unique(Build.CFG_FILES,[node.abspath()])546 if remove:547 for key in self.env[DEFKEYS]:548 self.undefine(key)549 self.env[DEFKEYS]=[]550@conf551def get_config_header(self,defines=True,headers=False,define_prefix=''):552 lst=[]553 if headers:554 for x in self.env[INCKEYS]:555 lst.append('#include <%s>'%x)556 if defines:557 for x in self.env[DEFKEYS]:558 if self.is_defined(x):559 val=self.get_define(x)560 lst.append('#define %s %s'%(define_prefix+x,val))561 else:562 lst.append('/* #undef %s */'%(define_prefix+x))563 return"\n".join(lst)564@conf565def cc_add_flags(conf):566 conf.add_os_flags('CPPFLAGS','CFLAGS')567 conf.add_os_flags('CFLAGS')568@conf569def cxx_add_flags(conf):570 conf.add_os_flags('CPPFLAGS','CXXFLAGS')571 conf.add_os_flags('CXXFLAGS')572@conf573def link_add_flags(conf):574 conf.add_os_flags('LINKFLAGS')575 conf.add_os_flags('LDFLAGS','LINKFLAGS')576@conf577def cc_load_tools(conf):578 if not conf.env.DEST_OS:579 conf.env.DEST_OS=Utils.unversioned_sys_platform()580 conf.load('c')581@conf582def cxx_load_tools(conf):583 if not conf.env.DEST_OS:584 conf.env.DEST_OS=Utils.unversioned_sys_platform()585 conf.load('cxx')586@conf587def get_cc_version(conf,cc,gcc=False,icc=False):588 cmd=cc+['-dM','-E','-']589 env=conf.env.env or None590 try:591 p=Utils.subprocess.Popen(cmd,stdin=Utils.subprocess.PIPE,stdout=Utils.subprocess.PIPE,stderr=Utils.subprocess.PIPE,env=env)592 p.stdin.write('\n')593 out=p.communicate()[0]594 except Exception:595 conf.fatal('Could not determine the compiler version %r'%cmd)596 if not isinstance(out,str):597 out=out.decode(sys.stdout.encoding or'iso8859-1')598 if gcc:599 if out.find('__INTEL_COMPILER')>=0:600 conf.fatal('The intel compiler pretends to be gcc')601 if out.find('__GNUC__')<0 and out.find('__clang__')<0:602 conf.fatal('Could not determine the compiler type')603 if icc and out.find('__INTEL_COMPILER')<0:604 conf.fatal('Not icc/icpc')605 k={}606 if icc or gcc:607 out=out.splitlines()608 for line in out:609 lst=shlex.split(line)610 if len(lst)>2:611 key=lst[1]612 val=lst[2]613 k[key]=val614 def isD(var):615 return var in k616 def isT(var):617 return var in k and k[var]!='0'618 if not conf.env.DEST_OS:619 conf.env.DEST_OS=''620 for i in MACRO_TO_DESTOS:621 if isD(i):622 conf.env.DEST_OS=MACRO_TO_DESTOS[i]623 break624 else:625 if isD('__APPLE__')and isD('__MACH__'):626 conf.env.DEST_OS='darwin'627 elif isD('__unix__'):628 conf.env.DEST_OS='generic'629 if isD('__ELF__'):630 conf.env.DEST_BINFMT='elf'631 elif isD('__WINNT__')or isD('__CYGWIN__')or isD('_WIN32'):632 conf.env.DEST_BINFMT='pe'633 conf.env.LIBDIR=conf.env.BINDIR634 elif isD('__APPLE__'):635 conf.env.DEST_BINFMT='mac-o'636 if not conf.env.DEST_BINFMT:637 conf.env.DEST_BINFMT=Utils.destos_to_binfmt(conf.env.DEST_OS)638 for i in MACRO_TO_DEST_CPU:639 if isD(i):640 conf.env.DEST_CPU=MACRO_TO_DEST_CPU[i]641 break642 Logs.debug('ccroot: dest platform: '+' '.join([conf.env[x]or'?'for x in('DEST_OS','DEST_BINFMT','DEST_CPU')]))643 if icc:644 ver=k['__INTEL_COMPILER']645 conf.env['CC_VERSION']=(ver[:-2],ver[-2],ver[-1])646 else:647 if isD('__clang__'):648 conf.env['CC_VERSION']=(k['__clang_major__'],k['__clang_minor__'],k['__clang_patchlevel__'])649 else:650 conf.env['CC_VERSION']=(k['__GNUC__'],k['__GNUC_MINOR__'],k['__GNUC_PATCHLEVEL__'])651 return k652@conf653def get_xlc_version(conf,cc):654 cmd=cc+['-qversion']655 try:656 out,err=conf.cmd_and_log(cmd,output=0)657 except Errors.WafError:658 conf.fatal('Could not find xlc %r'%cmd)659 for v in(r"IBM XL C/C\+\+.* V(?P<major>\d*)\.(?P<minor>\d*)",):660 version_re=re.compile(v,re.I).search661 match=version_re(out or err)662 if match:663 k=match.groupdict()664 conf.env['CC_VERSION']=(k['major'],k['minor'])665 break666 else:667 conf.fatal('Could not determine the XLC version.')668@conf669def get_suncc_version(conf,cc):670 cmd=cc+['-V']671 try:672 out,err=conf.cmd_and_log(cmd,output=0)673 except Errors.WafError:674 conf.fatal('Could not find suncc %r'%cmd)675 version=(out or err)676 version=version.split('\n')[0]677 version_re=re.compile(r'cc:\s+sun\s+(c\+\+|c)\s+(?P<major>\d*)\.(?P<minor>\d*)',re.I).search678 match=version_re(version)679 if match:680 k=match.groupdict()681 conf.env['CC_VERSION']=(k['major'],k['minor'])682 else:683 conf.fatal('Could not determine the suncc version.')684@conf685def add_as_needed(self):686 if self.env.DEST_BINFMT=='elf'and'gcc'in(self.env.CXX_NAME,self.env.CC_NAME):687 self.env.append_unique('LINKFLAGS','--as-needed')688class cfgtask(Task.TaskBase):689 def display(self):690 return''691 def runnable_status(self):692 return Task.RUN_ME693 def uid(self):694 return Utils.SIG_NIL695 def run(self):696 conf=self.conf697 bld=Build.BuildContext(top_dir=conf.srcnode.abspath(),out_dir=conf.bldnode.abspath())698 bld.env=conf.env699 bld.init_dirs()700 bld.in_msg=1701 bld.logger=self.logger702 try:703 bld.check(**self.args)704 except Exception:705 return 1706@conf707def multicheck(self,*k,**kw):708 self.start_msg(kw.get('msg','Executing %d configuration tests'%len(k)))709 class par(object):710 def __init__(self):711 self.keep=False712 self.cache_global=Options.cache_global713 self.nocache=Options.options.nocache714 self.returned_tasks=[]715 self.task_sigs={}716 def total(self):717 return len(tasks)718 def to_log(self,*k,**kw):719 return720 bld=par()721 tasks=[]722 for dct in k:723 x=cfgtask(bld=bld)724 tasks.append(x)725 x.args=dct726 x.bld=bld727 x.conf=self728 x.args=dct729 x.logger=Logs.make_mem_logger(str(id(x)),self.logger)730 def it():731 yield tasks732 while 1:733 yield[]734 p=Runner.Parallel(bld,Options.options.jobs)735 p.biter=it()736 p.start()737 for x in tasks:738 x.logger.memhandler.flush()739 for x in tasks:740 if x.hasrun!=Task.SUCCESS:741 self.end_msg(kw.get('errmsg','no'),color='YELLOW')742 self.fatal(kw.get('fatalmsg',None)or'One of the tests has failed, see the config.log for more information')...
field.py
Source:field.py
1# -*- coding: utf-8 -*-2'''3Auther: Wood4Date: 2017-09-065Desc: mysqlÁ¬½ÓÆ÷µÄʵÏÖ6'''7import time, logging8class Field(object):9 '''10 table field11 '''12 _count = 013 def __init__(self, **kw):14 self.name = kw.get('name', None)15 self._default = kw.get('default', None)16 self.primary_key = kw.get('primary_key', False)17 self.nullable = kw.get('nullable', False)18 self.updatable = kw.get('updatable', True)19 self.insertable = kw.get('insertable', True)20 self.ddl = kw.get('ddl', '')21 self._order = Field._count22 Field._count = Field._count + 123 @property24 def default(self):25 d = self._default26 return d() if callable(d) else d27 def __str__(self):28 s = ['<%s:%s,%s,default(%s),' % (self.__class__.__name__, self.name, self.ddl, self._default)]29 self.nullable and s.append('N')30 self.updatable and s.append('U')31 self.insertable and s.append('I')32 s.append('>')33 return ''.join(s)34class StringField(Field):35 def __init__(self, **kw):36 if not 'default' in kw:37 kw['default'] = ''38 if not 'ddl' in kw:39 kw['ddl'] = 'varchar(255)'40 super(StringField, self).__init__(**kw)41class IntegerField(Field):42 def __init__(self, **kw):43 if not 'default' in kw:44 kw['default'] = 045 if not 'ddl' in kw:46 kw['ddl'] = 'bigint'47 super(IntegerField, self).__init__(**kw)48class FloatField(Field):49 def __init__(self, **kw):50 if not 'default' in kw:51 kw['default'] = 0.052 if not 'ddl' in kw:53 kw['ddl'] = 'real'54 super(FloatField, self).__init__(**kw)55class BooleanField(Field):56 def __init__(self, **kw):57 if not 'default' in kw:58 kw['default'] = False59 if not 'ddl' in kw:60 kw['ddl'] = 'bool'61 super(BooleanField, self).__init__(**kw)62class TextField(Field):63 def __init__(self, **kw):64 if not 'default' in kw:65 kw['default'] = ''66 if not 'ddl' in kw:67 kw['ddl'] = 'text'68 super(TextField, self).__init__(**kw)69class BlobField(Field):70 def __init__(self, **kw):71 if not 'default' in kw:72 kw['default'] = ''73 if not 'ddl' in kw:74 kw['ddl'] = 'blob'75 super(BlobField, self).__init__(**kw)76class VersionField(Field):77 def __init__(self, name=None):...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!