Example #1
0
 def test_from_url(self):
     self.assertEqual(Library.github_from_url('owner/repo'),
                      ('owner', 'repo'))
     self.assertEqual(
         Library.github_from_url('git+https://github.com/owner/repo.git'),
         ('owner', 'repo'))
     self.assertEqual(
         Library.github_from_url('git://github.com/owner/repo.git'),
         ('owner', 'repo'))
Example #2
0
  def update_registry_info(self):
    # Check if there's a NPM scope or the default scope @@npm.
    assert self.scope.startswith('@')

    response = util.registry_get(self.scope, self.package)
    try:
      package = json.loads(response.content)
    except ValueError:
      return self.error('Could not parse registry metadata', ErrorCodes.Library_parse_registry)

    if response.status_code == 200:
      repository = package.get('repository', {})
      repository_string = repository.get('url', '') if isinstance(repository, dict) else repository
      self.owner, self.repo = Library.github_from_url(repository_string)

      if self.owner == '' or self.repo == '':
        return self.error('No github URL associated with package', ErrorCodes.Library_no_github)

      new_metadata = json.loads(response.content)
      old_metadata = self.library.registry_metadata
      if old_metadata is None or new_metadata.get('_rev') != json.loads(old_metadata).get('_rev'):
        self.library.registry_metadata = response.content
        self.library.registry_metadata_updated = datetime.datetime.now()
        self.library_dirty = True

    elif response.status_code == 404:
      return self.error('Package not found in registry', ErrorCodes.Library_no_package)
    else:
      return self.retry('Could not update registry info (%d)' % response.status_code)
Example #3
0
  def update_registry_info(self):
    # Check if there's a NPM scope or the default scope @@npm.
    assert self.scope.startswith('@')

    response = util.registry_get(self.scope, self.package)
    try:
      package = json.loads(response.content)
    except ValueError:
      return self.error('Could not parse registry metadata', ErrorCodes.Library_parse_registry)

    if response.status_code == 200:
      repository = package.get('repository', {})
      repository_string = repository.get('url', '') if isinstance(repository, dict) else repository
      self.owner, self.repo = Library.github_from_url(repository_string)

      if self.owner == '' or self.repo == '':
        return self.error('No github URL associated with package', ErrorCodes.Library_no_github)

      new_metadata = json.loads(response.content)
      old_metadata = self.library.registry_metadata
      if old_metadata is None or new_metadata.get('_rev') != json.loads(old_metadata).get('_rev'):
        # The maximum datastore entity size is 1048487 bytes, and this NPM
        # registry response can sometimes surpass that limit. Hard fail now if
        # we might get close to the limit, or else we'll fail later with an
        # uncaught error when we commit, which will cause the task to
        # unnecessarily retry (note there is other data in the entity too).
        #
        # TODO(aomarks) Compress or prune the registry metadata of erroring,
        # since this means we are currently skipping some packages.
        if len(response.content) > 1000000:
          return self.error('Registry metadata is too big', ErrorCodes.Library_registry_too_big)
        self.library.registry_metadata = response.content
        self.library.registry_metadata_updated = datetime.datetime.now()
        self.library_dirty = True

    elif response.status_code == 404:
      return self.error('Package not found in registry', ErrorCodes.Library_no_package)
    else:
      return self.retry('Could not update registry info (%d)' % response.status_code)
Example #4
0
 def test_from_url(self):
   self.assertEqual(Library.github_from_url('owner/repo'), ('owner', 'repo'))
   self.assertEqual(Library.github_from_url('git+https://github.com/owner/repo.git'), ('owner', 'repo'))
   self.assertEqual(Library.github_from_url('git://github.com/owner/repo.git'), ('owner', 'repo'))