<s> """<STR_LIT>""" <EOL> __author__ = '<STR_LIT>' <EOL> import ConfigParser <EOL> import csv <EOL> import optparse <EOL> import os . path <EOL> import re <EOL> import StringIO <EOL> import tempfile <EOL> import nb_third_party <EOL> import httplib2 <EOL> import addr_util <EOL> import data_sources <EOL> import nameserver <EOL> import nameserver_list <EOL> import sys_nameservers <EOL> import util <EOL> import version <EOL> TRUNK_URL = '<STR_LIT>' <EOL> SETS_TO_TAGS_MAP = { <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT:all>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> } <EOL> def ExpandSetsToTags ( set_names ) : <EOL> tags = set ( ) <EOL> for set_name in set_names : <EOL> tags . update ( set ( SETS_TO_TAGS_MAP . get ( set_name , [ set_name ] ) ) ) <EOL> return tags <EOL> def GetMergedConfiguration ( ) : <EOL> """<STR_LIT>""" <EOL> options = ParseCommandLineArguments ( ) <EOL> return MergeConfigurationFileOptions ( options ) <EOL> def ParseCommandLineArguments ( default_config_file = '<STR_LIT>' ) : <EOL> """<STR_LIT>""" <EOL> ds = data_sources . DataSources ( ) <EOL> import_types = ds . ListSourceTypes ( ) <EOL> parser = optparse . OptionParser ( ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT:-c>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = None , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , default = False , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , help = ( '<STR_LIT>' % '<STR_LIT:U+002CU+0020>' . join ( import_types ) ) ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = [ ] , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , type = '<STR_LIT:int>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , type = '<STR_LIT:int>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = <NUM_LIT> , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = <NUM_LIT> , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = '<STR_LIT>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = <NUM_LIT> , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , type = '<STR_LIT:int>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = None , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = None , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , type = '<STR_LIT:float>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , type = '<STR_LIT:int>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = <NUM_LIT:1> , type = '<STR_LIT:int>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = [ ] , help = '<STR_LIT>' % SETS_TO_TAGS_MAP . keys ( ) ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = '<STR_LIT:html>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , action = '<STR_LIT:store_true>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , type = '<STR_LIT:float>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , type = '<STR_LIT:float>' , help = '<STR_LIT>' ) <EOL> parser . add_option ( '<STR_LIT>' , '<STR_LIT>' , dest = '<STR_LIT>' , default = default_config_file , help = '<STR_LIT>' ) <EOL> options , args = parser . parse_args ( ) <EOL> if options . server_sets : <EOL> if '<STR_LIT:U+002C>' in options . server_sets : <EOL> sets = options . server_sets . split ( '<STR_LIT:U+002C>' ) <EOL> else : <EOL> sets = [ options . server_sets , ] <EOL> options . tags = ExpandSetsToTags ( sets ) <EOL> else : <EOL> options . tags = set ( ) <EOL> if args : <EOL> options . servers . extend ( addr_util . ExtractIPsFromString ( '<STR_LIT:U+0020>' . join ( args ) ) ) <EOL> options . tags . add ( '<STR_LIT>' ) <EOL> return options <EOL> def GetNameServerData ( filename = '<STR_LIT>' ) : <EOL> server_file = util . FindDataFile ( filename ) <EOL> ns_data = _ParseNameServerListing ( open ( server_file ) ) <EOL> for i , ip in enumerate ( sys_nameservers . GetCurrentNameServers ( ) ) : <EOL> ns = nameserver . NameServer ( ip , name = '<STR_LIT>' % ( i , ip ) , system_position = i ) <EOL> ns_data . append ( ns ) <EOL> for i , ip in enumerate ( sys_nameservers . GetAssignedNameServers ( ) ) : <EOL> ns = nameserver . NameServer ( ip , name = '<STR_LIT>' % ( i , ip ) , dhcp_position = i ) <EOL> ns_data . append ( ns ) <EOL> return ns_data <EOL> def _ParseNameServerListing ( fp ) : <EOL> fields = [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:location>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] <EOL> reader = csv . DictReader ( fp , fieldnames = fields ) <EOL> ns_data = nameserver_list . NameServers ( ) <EOL> for row in reader : <EOL> if row [ '<STR_LIT>' ] : <EOL> name = "<STR_LIT>" % ( row [ '<STR_LIT>' ] , row [ '<STR_LIT>' ] ) <EOL> else : <EOL> name = row [ '<STR_LIT>' ] <EOL> if row [ '<STR_LIT>' ] : <EOL> lat , lon = row [ '<STR_LIT>' ] . split ( '<STR_LIT:U+002C>' ) <EOL> else : <EOL> lat = lon = None <EOL> as_match = re . match ( '<STR_LIT>' , row [ '<STR_LIT>' ] ) <EOL> if as_match : <EOL> asn , network_owner = as_match . groups ( ) <EOL> network_owner = network_owner . lstrip ( '<STR_LIT:U+0020>' ) . rstrip ( '<STR_LIT:U+0020>' ) <EOL> else : <EOL> asn = network_owner = None <EOL> ns_data . append ( nameserver . NameServer ( <EOL> row [ '<STR_LIT>' ] , <EOL> name = name , <EOL> tags = row [ '<STR_LIT>' ] . split ( ) , <EOL> provider = row [ '<STR_LIT>' ] , <EOL> instance = row [ '<STR_LIT>' ] , <EOL> location = row [ '<STR_LIT:location>' ] , <EOL> latitude = lat , <EOL> longitude = lon , <EOL> asn = asn , <EOL> hostname = row [ '<STR_LIT>' ] , <EOL> network_owner = network_owner <EOL> ) ) <EOL> return ns_data <EOL> def GetSanityChecks ( ) : <EOL> return GetAutoUpdatingConfigFile ( '<STR_LIT>' ) <EOL> def _GetLocalConfig ( conf_file ) : <EOL> """<STR_LIT>""" <EOL> local_config = _ReadConfigFile ( conf_file ) <EOL> return _ExpandConfigSections ( local_config ) <EOL> def _ReadConfigFile ( conf_file ) : <EOL> """<STR_LIT>""" <EOL> ref_file = util . FindDataFile ( conf_file ) <EOL> local_config = ConfigParser . ConfigParser ( ) <EOL> local_config . read ( ref_file ) <EOL> return local_config <EOL> def GetAutoUpdatingConfigFile ( conf_file ) : <EOL> """<STR_LIT>""" <EOL> local_config = _ReadConfigFile ( conf_file ) <EOL> download_latest = int ( local_config . get ( '<STR_LIT>' , '<STR_LIT>' ) ) <EOL> local_version = int ( local_config . get ( '<STR_LIT>' , '<STR_LIT:version>' ) ) <EOL> if download_latest == <NUM_LIT:0> : <EOL> return _ExpandConfigSections ( local_config ) <EOL> h = httplib2 . Http ( tempfile . gettempdir ( ) , timeout = <NUM_LIT:10> ) <EOL> url = '<STR_LIT>' % ( TRUNK_URL , conf_file ) <EOL> content = None <EOL> try : <EOL> _ , content = h . request ( url , '<STR_LIT:GET>' ) <EOL> remote_config = ConfigParser . ConfigParser ( ) <EOL> except : <EOL> print '<STR_LIT>' % ( conf_file , util . GetLastExceptionString ( ) ) <EOL> return _ExpandConfigSections ( local_config ) <EOL> if content and '<STR_LIT>' in content : <EOL> fp = StringIO . StringIO ( content ) <EOL> try : <EOL> remote_config . readfp ( fp ) <EOL> except : <EOL> print '<STR_LIT>' % ( conf_file , util . GetLastExceptionString ( ) ) <EOL> return _ExpandConfigSections ( local_config ) <EOL> if remote_config and remote_config . has_section ( '<STR_LIT>' ) and int ( remote_config . get ( '<STR_LIT>' , '<STR_LIT:version>' ) ) > local_version : <EOL> print '<STR_LIT>' % url <EOL> return _ExpandConfigSections ( remote_config ) <EOL> else : <EOL> return _ExpandConfigSections ( local_config ) <EOL> def _ExpandConfigSections ( config ) : <EOL> return dict ( [ ( y , config . items ( y ) ) for y in config . sections ( ) if y != '<STR_LIT>' ] ) <EOL> def MergeConfigurationFileOptions ( options ) : <EOL> """<STR_LIT>""" <EOL> config = ConfigParser . ConfigParser ( ) <EOL> full_path = util . FindDataFile ( options . config ) <EOL> config . read ( full_path ) <EOL> if not config or not config . has_section ( '<STR_LIT>' ) : <EOL> raise ValueError ( '<STR_LIT>' % ( full_path , options . config ) ) <EOL> general = dict ( config . items ( '<STR_LIT>' ) ) <EOL> if options . site_url : <EOL> options . upload_results = True <EOL> for option in general : <EOL> if not getattr ( options , option , None ) : <EOL> if '<STR_LIT>' in option : <EOL> value = float ( general [ option ] ) <EOL> elif '<STR_LIT:count>' in option or '<STR_LIT>' in option or '<STR_LIT>' in option : <EOL> value = int ( general [ option ] ) <EOL> else : <EOL> value = general [ option ] <EOL> setattr ( options , option , value ) <EOL> for key in ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) : <EOL> value = getattr ( options , key , None ) <EOL> if value : <EOL> setattr ( options , key , os . path . expanduser ( value ) ) <EOL> options . version = version . VERSION <EOL> return options </s>
