Example #1
0
 def test_tilde_ranges(self):
     self.assertTrue(versiontag.match('1.0.0', '~1'))
     self.assertTrue(versiontag.match('1.1.0', '~1'))
     self.assertTrue(versiontag.match('1.0.1', '~1'))
     self.assertTrue(versiontag.match('1.0.1-pre', '~1'))
     self.assertFalse(versiontag.match('2.0.0', '~1'))
     self.assertFalse(versiontag.match('0.1.0', '~1'))
     self.assertFalse(versiontag.match('0.0.1', '~1'))
     self.assertFalse(versiontag.match('0.0.1-pre', '~1'))
Example #2
0
 def test_tilde_ranges(self):
   self.assertTrue(versiontag.match('1.0.0', '~1'))
   self.assertTrue(versiontag.match('1.1.0', '~1'))
   self.assertTrue(versiontag.match('1.0.1', '~1'))
   self.assertTrue(versiontag.match('1.0.1-pre', '~1'))
   self.assertFalse(versiontag.match('2.0.0', '~1'))
   self.assertFalse(versiontag.match('0.1.0', '~1'))
   self.assertFalse(versiontag.match('0.0.1', '~1'))
   self.assertFalse(versiontag.match('0.0.1-pre', '~1'))
Example #3
0
 def collections_for_key_async(version_key):
   library_key = version_key.parent()
   collection_references = yield CollectionReference.query(ancestor=library_key).fetch_async()
   collection_version_futures = [ref.collection_version_key().get_async() for ref in collection_references]
   # If there are multiple versions of a collection we want to find the most recent one that applies.
   result_map = {}
   for i, version_future in enumerate(collection_version_futures):
     collection_version = yield version_future
     if collection_version is None:
       # Remove the stale reference.
       yield collection_references[i].key.delete_async()
     elif versiontag.match(version_key.id(), collection_references[i].semver):
       collection_id = collection_version.key.parent().id()
       existing_version = result_map.get(collection_id, None)
       if existing_version is None or versiontag.compare(collection_version.key.id(), existing_version.key.id()) > 0:
         result_map[collection_id] = collection_version
   raise ndb.Return(result_map.values())
Example #4
0
 def collections_for_key_async(version_key):
   library_key = version_key.parent()
   collection_references = yield CollectionReference.query(ancestor=library_key).fetch_async()
   collection_version_futures = [ref.collection_version_key().get_async() for ref in collection_references]
   # If there are multiple versions of a collection we want to find the most recent one that applies.
   result_map = {}
   for i, version_future in enumerate(collection_version_futures):
     collection_version = yield version_future
     if collection_version is None:
       # Remove the stale reference.
       yield collection_references[i].key.delete_async()
     elif versiontag.match(version_key.id(), collection_references[i].semver):
       collection_id = collection_version.key.parent().id()
       existing_version = result_map.get(collection_id, None)
       if existing_version is None or versiontag.compare(collection_version.key.id(), existing_version.key.id()) > 0:
         result_map[collection_id] = collection_version
   raise ndb.Return(result_map.values())
Example #5
0
 def matches(version, spec):
   try:
     return versiontag.match(version, spec)
   except ValueError:
     # FIXME: What other cases do we need to support here?
     return False
Example #6
0
    def test_x_ranges(self):
        self.assertTrue(versiontag.match('1.1.2', '1.1.x'))
        self.assertTrue(versiontag.match('1.0.0', '1.x.x'))
        self.assertTrue(versiontag.match('1.1.0', '1.x.x'))
        self.assertTrue(versiontag.match('1.0.1', '1.x.x'))
        self.assertTrue(versiontag.match('1.0.0', '1.x'))
        self.assertTrue(versiontag.match('1.1.0', '1.x'))
        self.assertTrue(versiontag.match('1.0.1', '1.x'))
        self.assertTrue(versiontag.match('1.0.1-pre', '1.x'))

        self.assertFalse(versiontag.match('1.1.0', '1.0.x'))
        self.assertFalse(versiontag.match('0.1.0', '1.0.x'))
        self.assertFalse(versiontag.match('2.0.0', '1.0.x'))
        self.assertFalse(versiontag.match('2.0.0-pre', '1.0.x'))

        self.assertFalse(versiontag.match('2.0.0', '1.x'))
        self.assertFalse(versiontag.match('0.0.1', '1.x'))
Example #7
0
File: api.py Project: keanulee/v2
 def get(self, owner, repo, ver=None):
   owner = owner.lower()
   repo = repo.lower()
   library = Library.get_by_id('%s/%s' % (owner, repo), read_policy=ndb.EVENTUAL_CONSISTENCY)
   if library is None or library.error is not None:
     self.response.write(str(library))
     self.response.set_status(404)
     return
   versions = library.versions()
   if ver is None:
     ver = versions[-1]
   version = Version.get_by_id(ver, parent=library.key, read_policy=ndb.EVENTUAL_CONSISTENCY)
   if version is None or version.error is not None:
     self.response.write(str(version))
     self.response.set_status(404)
     return
   metadata = json.loads(library.metadata)
   dependencies = []
   bower = Content.get_by_id('bower', parent=version.key, read_policy=ndb.EVENTUAL_CONSISTENCY)
   if bower is not None:
     try:
       bower_json = json.loads(bower.content)
     # TODO: Which exception is this for?
     # pylint: disable=bare-except
     except:
       bower_json = {}
   readme = Content.get_by_id('readme.html', parent=version.key, read_policy=ndb.EVENTUAL_CONSISTENCY)
   full_name_match = re.match(r'(.*)/(.*)', metadata['full_name'])
   result = {
       'version': ver,
       'versions': versions,
       'readme': None if readme is None else readme.content,
       'subscribers': metadata['subscribers_count'],
       'stars': metadata['stargazers_count'],
       'forks': metadata['forks'],
       'contributors': library.contributor_count,
       'open_issues': metadata['open_issues'],
       'updated_at': metadata['updated_at'],
       'owner': full_name_match.groups()[0],
       'repo': full_name_match.groups()[1],
       'bower': None if bower is None else {
           'description': bower_json.get('description', ''),
           'license': bower_json.get('license', ''),
           'dependencies': bower_json.get('dependencies', []),
           'keywords': bower_json.get('keywords', []),
       },
       'collections': []
   }
   for collection in library.collections:
     if not versiontag.match(ver, collection.semver):
       continue
     collection_version = collection.version.id()
     collection_library = collection.version.parent().get()
     collection_metadata = json.loads(collection_library.metadata)
     collection_name_match = re.match(r'(.*)/(.*)', collection_metadata['full_name'])
     result['collections'].append({
         'owner': collection_name_match.groups()[0],
         'repo': collection_name_match.groups()[1],
         'version': collection_version
     })
   if library.kind == 'collection':
     dependencies = []
     version_futures = []
     for dep in version.dependencies:
       parsed_dep = Dependency.fromString(dep)
       dep_key = ndb.Key(Library, "%s/%s" % (parsed_dep.owner.lower(), parsed_dep.repo.lower()))
       version_futures.append(Library.versions_for_key_async(dep_key))
     for i, dep in enumerate(version.dependencies):
       parsed_dep = Dependency.fromString(dep)
       versions = version_futures[i].get_result()
       versions.reverse()
       while len(versions) > 0 and not versiontag.match(versions[0], parsed_dep.version):
         versions.pop()
       if len(versions) == 0:
         dependencies.append({
             'error': 'unsatisfyable dependency',
             'owner': parsed_dep.owner,
             'repo': parsed_dep.repo,
             'versionSpec': parsed_dep.version
         })
       else:
         dependencies.append(brief_metadata_from_datastore(parsed_dep.owner, parsed_dep.repo, versions[0]))
     result['dependencies'] = dependencies
   self.response.headers['Access-Control-Allow-Origin'] = '*'
   self.response.headers['Content-Type'] = 'application/json'
   self.response.write(json.dumps(result))
Example #8
0
  def test_x_ranges(self):
    self.assertTrue(versiontag.match('1.1.2', '1.1.x'))
    self.assertTrue(versiontag.match('1.0.0', '1.x.x'))
    self.assertTrue(versiontag.match('1.1.0', '1.x.x'))
    self.assertTrue(versiontag.match('1.0.1', '1.x.x'))
    self.assertTrue(versiontag.match('1.0.0', '1.x'))
    self.assertTrue(versiontag.match('1.1.0', '1.x'))
    self.assertTrue(versiontag.match('1.0.1', '1.x'))
    self.assertTrue(versiontag.match('1.0.1-pre', '1.x'))

    self.assertFalse(versiontag.match('1.1.0', '1.0.x'))
    self.assertFalse(versiontag.match('0.1.0', '1.0.x'))
    self.assertFalse(versiontag.match('2.0.0', '1.0.x'))
    self.assertFalse(versiontag.match('2.0.0-pre', '1.0.x'))

    self.assertFalse(versiontag.match('2.0.0', '1.x'))
    self.assertFalse(versiontag.match('0.0.1', '1.x'))