def get_smsc(self, cb, eb): """Get SMSC from preferences, networks DB or device, then callback""" # try to get from preferences if self.model.conf.get('preferences', 'use_alternate_smsc', False): alternate_smsc = self.model.conf.get('preferences', 'smsc_number', None) else: alternate_smsc = None # try to get from networks DB if self.model.imsi: provider = NetworkProvider() attrs = provider.get_network_by_id(self.model.imsi) if attrs: provider_smsc = attrs[0].smsc else: provider_smsc = None provider.close() else: provider_smsc = None # use the one from the best source if alternate_smsc is not None: logger.info("SMSC used from preferences") cb(alternate_smsc) elif provider_smsc is not None: logger.info("SMSC used from networks DB") cb(provider_smsc) else: logger.info("SMSC used from SIM") self.model.device.GetSmsc(dbus_interface=SMS_INTFACE, reply_handler=cb, error_handler=eb)
def __init__(self, model, imsi, callback): super(APNSelectionController, self).__init__(model) self.callback = callback netdb = NetworkProvider() self.apns = netdb.get_network_by_id(imsi) netdb.close()
def get_default_smsc(self, imsi): try: # create a NetworkProvider object to query our Network DB provider = NetworkProvider() # ask for our network attributes based on what our SIM is nets = provider.get_network_by_id(imsi) if not len(nets): raise ValueError return nets[0].smsc except (TypeError, ValueError): return None finally: provider.close()
def set_network_country_info(self, imsi): try: provider = NetworkProvider() nets = provider.get_network_by_id(imsi) if not len(nets): raise ValueError self.view.set_network_info(nets[0].name) self.view.set_country_info(nets[0].country) except (TypeError, ValueError): self.view.set_network_info(None) self.view.set_country_info(None) finally: provider.close()
def load_smsc(self, sim_data): print "preferences: smsc value in model", self.model.smsc_number if (self.model.smsc_number.capitalize() == _('Unknown') or not self.model.smsc_number): logger.warning("self.smsc_number is Unknown or None") #create a NetworProvider object to querry our NetworkProvider db sim_network = NetworkProvider() # ask for our network attributes based on what our sim value is networks_attributes = sim_network.get_network_by_id(sim_data) if networks_attributes: net_attrib = networks_attributes[0] print "model: preferences sms value:", net_attrib.smsc # tell the view to setup the smsc number. when the user clicks # save or changes him self it will be saved. self.view.setup_smsc_number(net_attrib.smsc)
def sim_imsi(imsi): logger.info("diagnostics sim_imsi - IMSI number is: " + str(imsi)) self.view.set_imsi_info(imsi) # let's look up what we think this SIM's network is. # so we want to display the country and network operator provider = NetworkProvider() networks_attributes = provider.get_network_by_id(imsi) if networks_attributes: net_attrib = networks_attributes[0] logger.info("diagnostics sim_imsi - country: " + str(net_attrib.country)) logger.info("diagnostics sim_imsi - network operator: " + str(net_attrib.name)) self.view.set_network_info(network=net_attrib.name, country=net_attrib.country) provider.close()
def create_skeleton_and_do_initial_setup(): """I perform the operations needed for the initial user setup""" PLUGINS = join(consts.BASE_DIR, 'usr', 'share', consts.APP_SLUG_NAME, 'plugins') if os.path.exists(OLDLOCK): # old way to signal that the setup is complete os.unlink(OLDLOCK) # maybe create new networks DB provider = NetworkProvider() try: if provider.is_current(): log.msg("Networks DB is current") else: log.msg("Networks DB creation started") provider.populate_networks() log.msg("Networks DB population complete") except Exception, e: log.err(str(e))
def setUp(self): self.provider = NetworkProvider(':memory:')
class TestNetworkProvider(unittest.TestCase): """Tests for the network provider""" def setUp(self): self.provider = NetworkProvider(':memory:') def tearDown(self): self.provider.close() def create_test_mbpi(self): self.mbpi = 'mbpi' f = open(self.mbpi, 'w') xml = """<?xml version="1.0"?> <!-- -*- Mode: XML; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- --> <!DOCTYPE serviceproviders SYSTEM "serviceproviders.2.dtd"> <serviceproviders format="2.0"> <!-- United Arab Emirates --> <country code="ae"> <provider> <name>Etisalat</name> <gsm> <network-id mcc="424" mnc="02"/> <apn value="mnet"> <name>Etisalat</name> <username>mnet</username> <password>mnet</password> <dns>194.170.1.6</dns> <dns>194.170.1.7</dns> </apn> <apn value="etisalat.ae"> <name>Etisalat 3G</name> <username>etisalat.ae</username> <password>etisalat.ae</password> </apn> </gsm> </provider> </country> <!-- Germany --> <country code="de"> <provider> <name>Vodafone (D2)</name> <gsm> <network-id mcc="262" mnc="02"/> <network-id mcc="262" mnc="04"/> <network-id mcc="262" mnc="09"/> <apn value="web.vodafone.de"> <username>vodafone</username> <password>vodafone</password> <dns>139.7.30.125</dns> <dns>139.7.30.126</dns> </apn> <apn value="event.vodafone.de"> <name>WebSessions</name> <username>vodafone</username> <password>vodafone</password> <dns>139.7.30.125</dns> <dns>139.7.30.126</dns> </apn> </gsm> </provider> </country> </serviceproviders> """ f.write(xml) f.close def test_populate_db_from_objs(self): networks = [NetworkOperator(["21401"], "prepaid.vodafone.es", "vodafone", "vodafone", "10.0.0.1", "10.0.0.2", TYPE_PREPAID, '+23323232', '+23423232', "Spain", "Vodafone"), NetworkOperator(["21401"], "contract.vodafone.es", "vodafone", "vodafone", "10.0.0.1", "10.0.0.2", TYPE_CONTRACT, '+23123121', '+2132121', "Spain", "Vodafone")] self.provider.populate_networks_from_objs(networks) # we should get just two objects response = self.provider.get_network_by_id("214013241213122") self.assertEqual(len(response), 2) # leave it as we found it c = self.provider.conn.cursor() c.execute("delete from network_info where id='21401'") response = self.provider.get_network_by_id("214013241213122") self.assertEqual(len(response), 0) def test_populate_db_from_mbpi_real(self): mbpi = '/usr/share/mobile-broadband-provider-info/serviceproviders.xml' if not os.path.exists(mbpi): raise unittest.SkipTest("No MBPI installed") try: self.provider.populate_networks_from_mbpi(mbpi) except TypeError: raise unittest.SkipTest("MBPI is unsupported version") c = self.provider.conn.cursor() c.execute("select * from network_info") response = c.fetchall() self.failUnless(len(response) >= 1) # leave it as we found it c.execute("delete from network_info") def test_populate_db_from_networks_py_real(self): extra = '../../resources/extra' if not os.path.exists(extra): raise unittest.SkipTest('Path to "networks.py" not valid') sys.path.insert(0, extra) import networks def is_valid(item): return not item.startswith(("__", "Base", "NetworkOperator")) self.provider.populate_networks_from_objs([getattr(networks, item)() for item in dir(networks) if is_valid(item)]) c = self.provider.conn.cursor() c.execute("select country from network_info where id = '23415'") self.assertEqual(c.fetchone()[0], 'United Kingdom') # leave it as we found it c.execute("delete from network_info") def test_populate_db_from_mbpi_merge_network_no_clash(self): networks = [NetworkOperator(["21401"], "Preloaded", "Preloaded", "Preloaded", "10.0.0.1", "10.0.0.2", TYPE_PREPAID, '+23323232', '+23423232', "Spain", "Preloaded")] self.provider.populate_networks_from_objs(networks) self.create_test_mbpi() self.provider.populate_networks_from_mbpi(self.mbpi) c = self.provider.conn.cursor() c.execute("select * from network_info") response = c.fetchall() self.assertEqual(len(response), 5) # leave it as we found it c.execute("delete from network_info") def test_populate_db_from_mbpi_merge_network_conflict(self): networks = [NetworkOperator(["26202"], "Preloaded", "Preloaded", "Preloaded", "10.0.0.1", "10.0.0.2", TYPE_PREPAID, None, '+23323232', '+23423232', "Germany", "Preloaded")] self.provider.populate_networks_from_objs(networks) self.create_test_mbpi() self.provider.populate_networks_from_mbpi(self.mbpi) c = self.provider.conn.cursor() # make sure we merged c.execute("select * from network_info") response = c.fetchall() self.assertEqual(len(response), 4) # make sure we didn't overwrite the original c.execute("select name from network_info where id = '26202'") self.assertEqual(c.fetchone()[0], 'Preloaded') # leave it as we found it c.execute("delete from network_info") def test_populate_db_from_mbpi_merge_apn_no_clash(self): networks = [NetworkOperator(["21401"], "Preloaded", "Preloaded", "Preloaded", "10.0.0.1", "10.0.0.2", TYPE_PREPAID, '+23323232', '+23423232', "Spain", "Preloaded")] self.provider.populate_networks_from_objs(networks) self.create_test_mbpi() self.provider.populate_networks_from_mbpi(self.mbpi) c = self.provider.conn.cursor() c.execute("select * from apn") response = c.fetchall() self.assertEqual(len(response), 9) # make sure we prefixed the foreign entry c.execute("select type from apn where network_id = '26202'") self.assertEqual(c.fetchone()[0][:4], 'MBPI') # leave it as we found it c.execute("delete from network_info") def test_populate_db_from_mbpi_merge_apn_conflict(self): networks = [NetworkOperator(["26202"], "Preloaded", "Preloaded", "Preloaded", "10.0.0.1", "10.0.0.2", "Preloaded", '+23323232', '+23423232', "Germany", "Preloaded")] self.provider.populate_networks_from_objs(networks) self.create_test_mbpi() self.provider.populate_networks_from_mbpi(self.mbpi) c = self.provider.conn.cursor() # make sure we merged and didn't load any apns for the existing nets c.execute("select * from apn") response = c.fetchall() self.assertEqual(len(response), 7) # make sure we didn't overwrite the original c.execute("select type from apn where network_id = '26202'") self.assertEqual(c.fetchone()[0], 'Preloaded') # leave it as we found it c.execute("delete from network_info") def test_assert_passing_netid_raises_exception(self): self.assertRaises(ValueError, self.provider.get_network_by_id, "21401") def test_get_network_by_id_five_digit_netid(self): networks = [NetworkOperator(["21401"], "prepaid.vodafone.es", "vodafone", "vodafone", "10.0.0.1", "10.0.0.2", TYPE_PREPAID, '+23323232', '+23423232', "Spain", "Vodafone"), NetworkOperator(["21401"], "contract.vodafone.es", "vodafone", "vodafone", "10.0.0.1", "10.0.0.2", TYPE_CONTRACT, '+23123121', '+2132121', "Spain", "Vodafone")] self.provider.populate_networks_from_objs(networks) # we should get just two objects response = self.provider.get_network_by_id("2140153241213122") self.assertEqual(len(response), 2) # leave it as we found it c = self.provider.conn.cursor() c.execute("delete from network_info where 1=1") def test_get_network_by_id_six_digit_netid(self): networks = [NetworkOperator(["214016"], "prepaid.vodafone.es", "vodafone", "vodafone", "10.0.0.1", "10.0.0.2", TYPE_PREPAID, '+23323232', '+23423232', "Spain", "Vodafone"), NetworkOperator(["214015"], "contract.vodafone.es", "vodafone", "vodafone", "10.0.0.1", "10.0.0.2", TYPE_CONTRACT, '+23123121', '+2132121', "Spain", "Vodafone")] self.provider.populate_networks_from_objs(networks) # we should get just two objects response = self.provider.get_network_by_id("2140153241213122") self.assertEqual(len(response), 1) self.assertEqual(response[0].apn, "contract.vodafone.es") # leave it as we found it c = self.provider.conn.cursor() c.execute("delete from network_info where 1=1") def test_get_network_by_id_seven_digit_netid(self): networks = [NetworkOperator(["2140161"], "prepaid.vodafone.es", "vodafone", "vodafone", "10.0.0.1", "10.0.0.2", TYPE_PREPAID, '+23323232', '+23423232', "Spain", "Vodafone"), NetworkOperator(["2140162"], "contract.vodafone.es", "vodafone", "vodafone", "10.0.0.1", "10.0.0.2", TYPE_CONTRACT, '+23123121', '+2132121', "Spain", "Vodafone")] self.provider.populate_networks_from_objs(networks) # we should get just two objects response = self.provider.get_network_by_id("2140161213322323") self.assertEqual(response[0].apn, "prepaid.vodafone.es") self.assertEqual(len(response), 1) # leave it as we found it c = self.provider.conn.cursor() c.execute("delete from network_info where 1=1")
def create_skeleton_and_do_initial_setup(): """I perform the operations needed for the initial user setup""" set_logger() if os.path.exists(OLDLOCK): # old way to signal that the setup is complete os.unlink(OLDLOCK) if os.path.exists(consts.NETWORKS_DB): # new way to signal that the setup is complete provider = NetworkProvider() log.msg("startup.py - create_skeleton_and_do_initial_setup - Network.db exists and provider is:" + repr(provider) + "\n") nick_debug("startup.py - create_skeleton_and_do_initial_setup - Network.db exists and provider is: " + repr(provider)) if provider.is_current(): provider.close() log.msg("Networks DB was built from current sources") nick_debug("Networks DB was built from current sources") return provider.close() log.msg("Networks DB requires rebuild") nick_debug("startup.py - create_skeleton_and_do_initial_setup: Networks DB requires rebuild") os.remove(consts.NETWORKS_DB) # regenerate plugin cache import wader.plugins list(getPlugins(IPlugin, package=wader.plugins)) # create new DB provider = NetworkProvider() try: nick_debug("startup.py - create_skeleton_and_do_initial_setup - create new DB and provider is the object:" + repr(provider)) provider.populate_networks() nick_debug("startup.py - create_skeleton_and_do_initial_setup - populate_networks complete.") except: log.err() finally: provider.close()