Пример #1
0
  def layout(self, client, userdata):
    fixtures = os.path.join(ROOT, 'test/fixtures')
    profile = webdriver.FirefoxProfile(os.path.join(fixtures, 'profile', client))

    for xpi in glob.glob(os.path.join(ROOT, 'xpi/*.xpi')):
      profile.add_extension(xpi)

    profile.set_preference('extensions.zotero.translators.better-bibtex.testing', True)

    with open(os.path.join(os.path.dirname(__file__), 'preferences.toml')) as f:
      preferences = toml.load(f)
      for p, v in nested_dict_iter(preferences['general']):
        profile.set_preference(p, v)

      if userdata.get('locale', '') == 'fr':
        for p, v in nested_dict_iter(preferences['fr']):
          profile.firefox.set_preference(p, v)

    if userdata.get('first-run', 'false') == 'false':
      profile.set_preference('extensions.zotero.translators.better-bibtex.citekeyFormat', '[auth][shorttitle][year]')

    if client == 'jurism':
      print('\n\n** WORKAROUNDS FOR JURIS-M IN PLACE -- SEE https://github.com/Juris-M/zotero/issues/34 **\n\n')
      #profile.set_preference('extensions.zotero.dataDir', os.path.join(self.path, 'jurism'))
      #profile.set_preference('extensions.zotero.useDataDir', True)
      #profile.set_preference('extensions.zotero.translators.better-bibtex.removeStock', False)

    profile.update_preferences()

    shutil.rmtree(self.path, ignore_errors=True)
    shutil.move(profile.path, self.path)
Пример #2
0
    def layout(self, client, userdata, password, db):
        fixtures = os.path.join(ROOT, 'test/fixtures')
        profile = webdriver.FirefoxProfile(
            os.path.join(fixtures, 'profile', client))

        for xpi in glob.glob(os.path.join(ROOT, 'xpi/*.xpi')):
            profile.add_extension(xpi)

        profile.set_preference(
            'extensions.zotero.translators.better-bibtex.testing', True)
        profile.set_preference('extensions.zotero.debug-bridge.password',
                               password)

        with open(os.path.join(os.path.dirname(__file__),
                               'preferences.toml')) as f:
            preferences = toml.load(f)
            for p, v in nested_dict_iter(preferences['general']):
                profile.set_preference(p, v)

            if userdata.get('locale', '') == 'fr':
                for p, v in nested_dict_iter(preferences['fr']):
                    profile.firefox.set_preference(p, v)

        if userdata.get('first-run', 'false') == 'false':
            profile.set_preference(
                'extensions.zotero.translators.better-bibtex.citekeyFormat',
                '[auth][shorttitle][year]')

        if client == 'jurism':
            print(
                '\n\n** WORKAROUNDS FOR JURIS-M IN PLACE -- SEE https://github.com/Juris-M/zotero/issues/34 **\n\n'
            )
            #profile.set_preference('extensions.zotero.dataDir', os.path.join(self.path, 'jurism'))
            #profile.set_preference('extensions.zotero.useDataDir', True)
            #profile.set_preference('extensions.zotero.translators.better-bibtex.removeStock', False)

        profile.update_preferences()

        shutil.rmtree(self.path, ignore_errors=True)
        shutil.move(profile.path, self.path)

        if db:
            shutil.copy(
                db.zotero,
                os.path.join(self.path, client, os.path.basename(db.zotero)))
            shutil.copy(
                db.bbt,
                os.path.join(self.path, client, os.path.basename(db.bbt)))
Пример #3
0
  def create_profile(self):
    profile = Munch(
      name='BBTZ5TEST'
    )

    profile.path = os.path.expanduser(f'~/.{profile.name}')

    profile.profiles = {
      # 'Linux': os.path.expanduser(f'~/.{self.client}/{self.client}'),
      'Linux': os.path.expanduser(f'~/.{self.client}/zotero'),
      'Darwin': os.path.expanduser('~/Library/Application Support/' + {'zotero': 'Zotero', 'jurism': 'Juris-M'}[self.client]),
    }[platform.system()]
    os.makedirs(profile.profiles, exist_ok = True)

    beta = ''
    if self.beta: beta = '-beta'
    profile.binary = {
      'Linux': f'/usr/lib/{self.client}{beta}/{self.client}',
      'Darwin': f'/Applications/{self.client.title()}{beta}.app/Contents/MacOS/{self.client}',
    }[platform.system()]

    # create profile
    profile.ini = os.path.join(profile.profiles, 'profiles.ini')

    ini = configparser.RawConfigParser()
    ini.optionxform = str
    if os.path.exists(profile.ini): ini.read(profile.ini)

    if not ini.has_section('General'): ini.add_section('General')

    profile.id = None
    for p in ini.sections():
      for k, v in ini.items(p):
        if k == 'Name' and v == profile.name: profile.id = p

    if not profile.id:
      free = 0
      while True:
        profile.id = f'Profile{free}'
        if not ini.has_section(profile.id): break
        free += 1
      ini.add_section(profile.id)
      ini.set(profile.id, 'Name', profile.name)

    ini.set(profile.id, 'IsRelative', 0)
    ini.set(profile.id, 'Path', profile.path)
    ini.set(profile.id, 'Default', None)
    with open(profile.ini, 'w') as f:
      ini.write(f, space_around_delimiters=False)

    # layout profile
    if self.config.profile:
      profile.firefox = webdriver.FirefoxProfile(os.path.join(ROOT, 'test/db', self.config.profile))
      profile.firefox.set_preference('extensions.zotero.dataDir', os.path.join(profile.path, self.client))
      profile.firefox.set_preference('extensions.zotero.useDataDir', True)
      profile.firefox.set_preference('extensions.zotero.translators.better-bibtex.removeStock', False)
    else:
      profile.firefox = webdriver.FirefoxProfile(os.path.join(FIXTURES, 'profile', self.client))

    self.install_xpis(os.path.join(ROOT, 'xpi'), profile.firefox)
    self.install_xpis(os.path.join(ROOT, 'other-xpis'), profile.firefox)
    if self.config.db: self.install_xpis(os.path.join(ROOT, 'test/db', self.config.db, 'xpis'), profile.firefox)
    if self.config.profile: self.install_xpis(os.path.join(ROOT, 'test/db', self.config.profile, 'xpis'), profile.firefox)

    profile.firefox.set_preference('extensions.zotero.translators.better-bibtex.testing', self.testing)
    profile.firefox.set_preference('extensions.zotero.translators.better-bibtex.workers', self.workers)
    profile.firefox.set_preference('extensions.zotero.debug-bridge.password', self.password)
    profile.firefox.set_preference('dom.max_chrome_script_run_time', self.config.timeout)
    utils.print(f'dom.max_chrome_script_run_time={self.config.timeout}')

    with open(os.path.join(os.path.dirname(__file__), 'preferences.toml')) as f:
      preferences = toml.load(f)
      for p, v in nested_dict_iter(preferences['general']):
        profile.firefox.set_preference(p, v)

      if self.config.locale == 'fr':
        for p, v in nested_dict_iter(preferences['fr']):
          profile.firefox.firefox.set_preference(p, v)

    if not self.config.first_run:
      profile.firefox.set_preference('extensions.zotero.translators.better-bibtex.citekeyFormat', '[auth][shorttitle][year]')

    if self.client == 'jurism':
      utils.print('\n\n** WORKAROUNDS FOR JURIS-M IN PLACE -- SEE https://github.com/Juris-M/zotero/issues/34 **\n\n')
      profile.firefox.set_preference('extensions.zotero.dataDir', os.path.join(profile.path, 'jurism'))
      profile.firefox.set_preference('extensions.zotero.useDataDir', True)
      profile.firefox.set_preference('extensions.zotero.translators.better-bibtex.removeStock', False)

    profile.firefox.update_preferences()

    shutil.rmtree(profile.path, ignore_errors=True)
    shutil.move(profile.firefox.path, profile.path)
    profile.firefox = None

    if self.config.db:
      self.needs_restart = True
      utils.print(f'restarting using {self.config.db}')
      dbs = os.path.join(ROOT, 'test', 'db', self.config.db)
      if not os.path.exists(dbs): os.makedirs(dbs)

      db_zotero = os.path.join(dbs, f'{self.client}.sqlite')
      db_zotero_alt = os.path.join(dbs, self.client, f'{self.client}.sqlite')
      if not os.path.exists(db_zotero) and not os.path.exists(db_zotero_alt):
        urllib.request.urlretrieve(f'https://github.com/retorquere/zotero-better-bibtex/releases/download/test-database/{self.config.db}.zotero.sqlite', db_zotero)
      if not os.path.exists(db_zotero): db_zotero = db_zotero_alt
      shutil.copy(db_zotero, os.path.join(profile.path, self.client, os.path.basename(db_zotero)))

      db_bbt = os.path.join(dbs, 'better-bibtex.sqlite')
      db_bbt_alt = os.path.join(dbs, self.client, 'better-bibtex.sqlite')
      if not os.path.exists(db_bbt) and not os.path.exists(db_bbt_alt):
        urllib.request.urlretrieve(f'https://github.com/retorquere/zotero-better-bibtex/releases/download/test-database/{self.config.db}.better-bibtex.sqlite', db_bbt)
      if not os.path.exists(db_bbt): db_bbt = db_bbt_alt
      shutil.copy(db_bbt, os.path.join(profile.path, self.client, os.path.basename(db_bbt)))

      # remove any auto-exports that may exist
      db = sqlite3.connect(os.path.join(profile.path, self.client, os.path.basename(db_bbt)))
      ae = None
      for (ae,) in db.execute('SELECT data FROM "better-bibtex" WHERE name = ?', [ 'better-bibtex.autoexport' ]):
        ae = json.loads(ae)
        ae['data'] = []
      if ae:
        db.execute('UPDATE "better-bibtex" SET data = ? WHERE name = ?', [ json.dumps(ae), 'better-bibtex.autoexport' ])
        db.commit()
      db.close()

    return profile