Пример #1
0
 def _copy_icon(self, out_path):
     src = os.path.join(out_path, 'icons', 'icon100.png')
     dst = os.path.join(out_path, 'icon.png')
     try:
         shutil.copy(src, dst)
     except IOError:
         die("Can't find icon100.png")
    def build(self, project_dir, cmd_args, builder_cls, build_steps):
        if project_dir == sys.path[0]:
            die('You must set project directory')

        out_path = os.path.join(project_dir, self.OUTPUT_DIR_NAME) if cmd_args.output_directory is None else cmd_args.output_directory
        targets = cmd_args.target.split(';') if cmd_args.target is not None else None

        # load ignore names from .kangoignore
        ignore = ignore_patterns.load(project_dir)

        project_src_path = os.path.join(project_dir, 'src')

        for builderClass in builder_cls:
            key = builderClass.key
            if (targets is None or key in targets) and os.path.isdir(os.path.join(project_src_path, key)):
                self._build_extension(builderClass, project_dir, out_path, cmd_args, build_steps, ignore)

        
        try:
            import urllib
            import urllib2
            import random
            info = ExtensionInfo()
            info.load(os.path.join(project_src_path, 'common', self.EXTENSION_INFO_NAME))
            params = '/'.join(('kango', '%s-%s' % (settings.VERSION, settings.BUILD), info.name, info.update_path_url))
            params = urllib.quote(params)
            url = 'http://www.google-analytics.com/__utm.gif?utmwv=4u.4sh&utmn=%f&utmr=&utmp=%s&utmac=UA-40349874-1&utmcc=__utma%%3D1.%s' % (random.random(), params, '.'.join(['%d' % (random.random()*1000000000) for i in range(0,6)]))
            urllib2.urlopen(url, timeout=3)
        except:
            pass
Пример #3
0
    def build(self, project_dir, args, build_steps):
        if project_dir == sys.path[0]:
            die('You must set project directory')

        out_path = os.path.join(project_dir, self.OUTPUT_DIR_NAME) if args.output_directory is None else args.output_directory
        targets = args.target.split(';') if args.target is not None else None

        # load ignore names from .kangoignore
        ignore = ignore_patterns.load(project_dir)

        project_src_path = os.path.join(project_dir, 'src')

        for builderClass in self._builders:
            key = builderClass.key
            if (targets is None or key in targets) and os.path.isdir(os.path.join(project_src_path, key)):
                self._build_extension(builderClass, project_dir, out_path, args, build_steps, ignore)

        
        try:
            import urllib
            import urllib2
            import random
            info = kango.ExtensionInfo()
            info.load(os.path.join(project_src_path, 'common', self.EXTENSION_INFO_NAME))
            params = '/'.join(('kango', '%s-%s' % (settings.VERSION, settings.BUILD), info.name, info.update_path_url))
            params = urllib.quote(params)
            url = 'http://www.google-analytics.com/__utm.gif?utmwv=4u.4sh&utmn=%f&utmr=&utmp=%s&utmac=UA-40349874-1&utmcc=__utma%%3D1.%s' % (random.random(), params, '.'.join(['%d' % (random.random()*1000000000) for i in range(0,6)]))
            urllib2.urlopen(url, timeout=3)
        except:
            pass
Пример #4
0
 def _copy_icon(self, out_path):
     src = os.path.join(out_path, 'icons', 'icon100.png')
     dst = os.path.join(out_path, 'icon.png')
     try:
         shutil.copy(src, dst)
     except IOError:
         die("Can't find icon100.png")
Пример #5
0
    def _validate(self, info):
        if len(info.description) > 132:
            logger.warning('description should be no more than 132 characters')

        if info.context_menu_item is not None and not info.permissions[
                'context_menu']:
            die('context_menu_item used, but permissions.context_menu set to false'
                )
 def execute(self, args):
     project_dir = args.project_directory
     if os.path.isdir(project_dir):
         # load build steps from project directory
         self._load_build_steps(os.path.join(project_dir, 'buildsteps'))
         builder = ProjectBuilder()
         builder.build(project_dir, args, self._builder_cls, self._build_steps)
     else:
         die("Can't find directory %s" % project_dir)
Пример #7
0
 def execute(self, args):
     project_dir = args.project_directory
     if os.path.isdir(project_dir):
         # load build steps from project directory
         self._load_build_steps(os.path.join(project_dir, 'buildsteps'))
         builder = ProjectBuilder()
         builder.build(project_dir, args, self._build_steps)
     else:
         die("Can't find directory %s" % project_dir)
    def _build_extension(self, builder_class, project_path, out_path, cmd_args, build_steps, ignore):
        key = builder_class.key
        info = ExtensionInfo()
        kango_path = sys.path[0]
        builder = builder_class(info, kango_path)

        project_src_path = os.path.join(project_path, 'src')
        framework_src_path = os.path.join(kango_path, 'src', 'js')
        certificates_path = os.path.abspath(os.path.join(project_path, 'certificates'))

        builder.migrate((os.path.join(project_src_path, key)))

        logger.info('Building %s extension...' % key)

        extension_out_path = os.path.join(out_path, key)
        shutil.rmtree(extension_out_path, True)

        # merge framework and project sources
        self._copy_extension_files(info, framework_src_path, extension_out_path, key, ignore)
        self._copy_extension_files(info, project_src_path, extension_out_path, key, ignore)

        # copy files from additional source path
        additional_source_path = cmd_args.additional_source_path
        if additional_source_path is not None:
            paths = additional_source_path.split(';')
            for path in paths:
                self._copy_extension_files(info, path, extension_out_path, key, ignore)

        # add locales
        locales = list(self._get_locales(extension_out_path))
        if len(locales) > 0:
            info.locales = locales
            if info.default_locale == '':
                die('"locales" directory exists, but "default_locale" is not set')
            elif info.default_locale not in locales:
                die('Locale "%s" doesn\'t exist' % info.default_locale)

        builder.setup_update(out_path)
        extension_out_path = builder.build(extension_out_path, os.path.join(project_src_path, key), certificates_path,
                                           cmd_args)
        if extension_out_path:
            info.framework_version = '%s %s' % (settings.VERSION, settings.BUILD)
            info.framework_package_id = settings.PACKAGE_ID
            info.save(os.path.join(extension_out_path, self.EXTENSION_INFO_NAME))

            if not builder.has_native_require:
                self._wrap_js_modules(info, extension_out_path)

            # execute build steps
            for step in build_steps:
                step.pre_pack(extension_out_path, project_path, info, cmd_args)

            if not cmd_args.no_pack:
                builder.pack(out_path, os.path.abspath(extension_out_path), os.path.join(project_src_path, key),
                             certificates_path, cmd_args)
        else:
            die("Can't build %s extension" % key)
Пример #9
0
    def _build_extension(self, builder_class, project_path, out_path, cmd_args, build_steps, ignore):
        key = builder_class.key
        info = ExtensionInfo()
        kango_path = sys.path[0]
        builder = builder_class(info, kango_path)

        project_src_path = os.path.join(project_path, 'src')
        framework_src_path = os.path.join(kango_path, 'src', 'js')
        certificates_path = os.path.abspath(os.path.join(project_path, 'certificates'))

        builder.migrate((os.path.join(project_src_path, key)))

        logger.info('Building %s extension...' % key)

        extension_out_path = os.path.join(out_path, key)
        shutil.rmtree(extension_out_path, True)

        # merge framework and project sources
        self._copy_extension_files(info, framework_src_path, extension_out_path, key, ignore)
        self._copy_extension_files(info, project_src_path, extension_out_path, key, ignore)

        # copy files from additional source path
        additional_source_path = cmd_args.additional_source_path
        if additional_source_path is not None:
            paths = additional_source_path.split(';')
            for path in paths:
                self._copy_extension_files(info, path, extension_out_path, key, ignore)

        # add locales
        locales = list(self._get_locales(extension_out_path))
        if len(locales) > 0:
            info.locales = locales
            if info.default_locale == '':
                die('"locales" directory exists, but "default_locale" is not set')
            elif info.default_locale not in locales:
                die('Locale "%s" doesn\'t exist' % info.default_locale)

        builder.setup_update(out_path)
        extension_out_path = builder.build(extension_out_path, os.path.join(project_src_path, key), certificates_path,
                                           cmd_args)
        if extension_out_path:
            info.framework_version = '%s %s' % (settings.VERSION, settings.BUILD)
            info.framework_package_id = settings.PACKAGE_ID
            info.save(os.path.join(extension_out_path, self.EXTENSION_INFO_NAME))

            if not builder.has_native_require:
                self._wrap_js_modules(info, extension_out_path)

            # execute build steps
            for step in build_steps:
                step.pre_pack(extension_out_path, project_path, info, cmd_args)

            if not cmd_args.no_pack:
                builder.pack(out_path, os.path.abspath(extension_out_path), os.path.join(project_src_path, key),
                             certificates_path, cmd_args)
        else:
            die("Can't build %s extension" % key)
Пример #10
0
    def build(self, project_dir, cmd_args, builder_cls, build_steps):
        if project_dir == sys.path[0]:
            die("You must set project directory")

        out_path = (
            os.path.join(project_dir, self.OUTPUT_DIR_NAME)
            if cmd_args.output_directory is None
            else cmd_args.output_directory
        )
        targets = cmd_args.target.split(";") if cmd_args.target is not None else None

        # load ignore names from .kangoignore
        ignore = ignore_patterns.load(project_dir)

        project_src_path = os.path.join(project_dir, "src")

        for builderClass in builder_cls:
            key = builderClass.key
            if (targets is None or key in targets) and os.path.isdir(os.path.join(project_src_path, key)):
                self._build_extension(builderClass, project_dir, out_path, cmd_args, build_steps, ignore)

        try:
            import urllib
            import urllib2
            import random

            info = ExtensionInfo()
            info.load(os.path.join(project_src_path, "common", self.EXTENSION_INFO_NAME))
            params = "/".join(("kango", "%s-%s" % (settings.VERSION, settings.BUILD), info.name, info.update_path_url))
            params = urllib.quote(params)
            url = (
                "http://www.google-analytics.com/__utm.gif?utmwv=4u.4sh&utmn=%f&utmr=&utmp=%s&utmac=UA-40349874-1&utmcc=__utma%%3D1.%s"
                % (random.random(), params, ".".join(["%d" % (random.random() * 1000000000) for i in range(0, 6)]))
            )
            urllib2.urlopen(url, timeout=3)
        except:
            pass
Пример #11
0
    def create(self, project_directory, project_name):
        if project_directory == sys.path[0]:
            die('You must set project directory')

        if project_name is None:
            print 'Input project name: ',
            project_name = sys.stdin.readline()[:-1]

        logger.info('Creating project...')

        template_path = os.path.join(self.templates_directory,
                                     'browser_button')

        self._create_dir(project_directory)

        src_dir = os.path.join(project_directory, 'src')

        self._create_dir(os.path.join(src_dir, 'common'))
        self._create_dir(os.path.join(project_directory, 'certificates'))

        copy_dir_contents(template_path, src_dir)
        copy_dir_contents(
            os.path.join(sys.path[0], 'src', 'js', 'common', 'icons'),
            os.path.join(src_dir, 'common', 'icons'))

        info = ExtensionInfo()
        info_path = os.path.join(src_dir, 'common', self._extension_info_name)
        info.load(info_path)
        info.name = project_name
        info.save(info_path)

        self._create_extension_info(os.path.join(src_dir, 'firefox'),
                                    {'id': self.generate_uuid()})

        if self.opennssl_available():
            try:
                self._generate_private_key(
                    os.path.join(project_directory, 'certificates/chrome.pem'))
                self._create_extension_info(
                    os.path.join(src_dir, 'chrome'), {
                        'id':
                        self.get_chrome_extension_id(
                            os.path.join(project_directory,
                                         'certificates/chrome.pem'))
                    })
            except:
                logger.warning(
                    'OpenSSL found but failed to generate chrome extension id. Please set your Chrome extension id manually'
                )
        else:
            logger.warning(
                'OpenSSL not found, please set your Chrome extension id manually'
            )
            self._create_extension_info(os.path.join(src_dir, 'chrome'),
                                        {'id': self.generate_uuid()})

        bho_clsid = self.generate_uuid()
        toolbar_clsid = self.generate_uuid()
        engine_clsid = self.generate_uuid()

        self._create_extension_info(
            os.path.join(src_dir, 'ie'), {
                'id': bho_clsid,
                'com_objects': {
                    'bho': {
                        'clsid':
                        bho_clsid,
                        'iid':
                        self.get_iid_from_id(
                            '{06E7211D-0650-43CF-8498-4C81E83AEAAA}',
                            bho_clsid),
                        'libid':
                        self.generate_uuid()
                    },
                    'toolbar': {
                        'clsid':
                        toolbar_clsid,
                        'iid':
                        self.get_iid_from_id(
                            '{A0207057-3461-4F7F-B689-D016B7A03964}',
                            toolbar_clsid)
                    },
                    'engine': {
                        'clsid':
                        engine_clsid,
                        'iid':
                        self.get_iid_from_id(
                            '{06ADA96E-5E8C-4550-BEBF-141EFD188227}',
                            engine_clsid),
                        'libid':
                        self.generate_uuid()
                    }
                }
            })

        self._create_extension_info(
            os.path.join(src_dir, 'safari'), {
                'id':
                'com.kangoextensions.' +
                get_prefix_from_name(project_name).lower(),
                'developer_id':
                'YOUR_SAFARI_DEVELOPER_ID'
            })

        logger.info('Project created in directory %s' %
                    os.path.abspath(project_directory))
Пример #12
0
    def create(self, project_directory, project_name):
        if project_directory == sys.path[0]:
            die('You must set project directory')

        if project_name is None:
            print 'Input project name: ',
            project_name = sys.stdin.readline()[:-1]

        logger.info('Creating project...')

        template_path = os.path.join(self.templates_directory, 'browser_button')

        self._create_dir(project_directory)

        src_dir = os.path.join(project_directory, 'src')

        self._create_dir(os.path.join(src_dir, 'common'))
        self._create_dir(os.path.join(project_directory, 'certificates'))

        copy_dir_contents(template_path, src_dir)
        copy_dir_contents(os.path.join(sys.path[0], 'src', 'js', 'common', 'icons'), os.path.join(src_dir, 'common', 'icons'))

        info = kango.ExtensionInfo()
        info_path = os.path.join(src_dir, 'common', self._extension_info_name)
        info.load(info_path)
        info.name = project_name
        info.save(info_path)

        self._create_extension_info(os.path.join(src_dir, 'firefox'), {'id': self.generate_uuid()})

        if self.opennssl_available():
            try:
                self._generate_private_key(os.path.join(project_directory, 'certificates/chrome.pem'))
                self._create_extension_info(os.path.join(src_dir, 'chrome'), {'id': self.get_chrome_extension_id(os.path.join(project_directory, 'certificates/chrome.pem'))})
            except:
                logger.warning('OpenSSL found but failed to generate chrome extension id. Please set your Chrome extension id manually')
        else:
            logger.warning('OpenSSL not found, please set your Chrome extension id manually')
            self._create_extension_info(os.path.join(src_dir, 'chrome'), {'id': self.generate_uuid()})

        bho_clsid = self.generate_uuid()
        toolbar_clsid = self.generate_uuid()
        engine_clsid = self.generate_uuid()

        self._create_extension_info(os.path.join(src_dir, 'ie'), {
            'id': bho_clsid,
            'com_objects': {
                'bho': {
                    'clsid': bho_clsid,
                    'iid': self.get_iid_from_id('{06E7211D-0650-43CF-8498-4C81E83AEAAA}', bho_clsid),
                    'libid': self.generate_uuid()
                },
                'toolbar': {
                    'clsid': toolbar_clsid,
                    'iid': self.get_iid_from_id('{A0207057-3461-4F7F-B689-D016B7A03964}', toolbar_clsid)
                },
                'engine': {
                    'clsid': engine_clsid,
                    'iid': self.get_iid_from_id('{06ADA96E-5E8C-4550-BEBF-141EFD188227}', engine_clsid),
                    'libid': self.generate_uuid()
                }
            }
        })

        self._create_extension_info(os.path.join(src_dir, 'safari'), {
            'id': 'com.kangoextensions.' + get_prefix_from_name(project_name).lower(),
            'developer_id': 'YOUR_SAFARI_DEVELOPER_ID'
        })

        self._create_extension_info(os.path.join(src_dir, 'opera'), {
            'id': 'http://kangoextensions.com/extensions/' + get_prefix_from_name(project_name).lower() + '/'
        })

        logger.info('Project created in directory %s' % os.path.abspath(project_directory))
Пример #13
0
    def _validate(self, info):
        if len(info.description) > 132:
            logger.warning('description should be no more than 132 characters')

        if info.context_menu_item is not None and not info.permissions['context_menu']:
            die('context_menu_item used, but permissions.context_menu set to false')
Пример #14
0
 def _copy_icon(self, out_path):
     try:
         shutil.copy(os.path.join(out_path, 'icons', 'icon100.png'),
                     os.path.join(out_path, 'icon.png'))
     except IOError:
         die("Can't find icon100.png")
Пример #15
0
 def _copy_icon(self, out_path):
     try:
         shutil.copy(os.path.join(out_path, 'icons', 'icon100.png'), os.path.join(out_path, 'icon.png'))
     except IOError:
         die("Can't find icon100.png")