コード例 #1
0
    def trigger_analysis(self, tag, sha, transactional=False):
        analysis_sha = None
        if self.library.kind == 'collection':
            analysis_sha = sha
        version_key = ndb.Key(Library, self.library.key.id(), Version, tag)

        content = Content.get_by_id('analysis', parent=version_key)
        if content is None or content.status == Status.error:
            Content(id='analysis', parent=version_key,
                    status=Status.pending).put()

        task_url = util.ingest_analysis_task(self.owner, self.repo, tag,
                                             analysis_sha)
        util.new_task(task_url,
                      target='analysis',
                      transactional=transactional,
                      queue_name='analysis')
コード例 #2
0
  def test_analyze_resets_error_content_when_reanalyzing(self):
    library_key = Library(id='owner/repo').put()
    version_key = Version(id='v1.1.1', parent=library_key, sha='sha', status='ready').put()

    content = Content(id='analysis', parent=version_key, status=Status.pending)
    content.status = Status.error
    content.put()

    response = self.app.get('/task/analyze/owner/repo', headers={'X-AppEngine-QueueName': 'default'})
    self.assertEqual(response.status_int, 200)

    content = Content.get_by_id('analysis', parent=version_key)
    self.assertEqual(content.status, Status.pending)

    tasks = self.tasks.get_filtered_tasks()
    self.assertEqual([
        util.ingest_analysis_task('owner', 'repo', 'v1.1.1'),
    ], [task.url for task in tasks])
コード例 #3
0
    def test_compressed(self):
        library_key = Library(id='owner/repo').put()
        version_key = Version(id='v1.1.1',
                              parent=library_key,
                              sha='sha',
                              status='ready').put()

        content = Content(id='analysis',
                          parent=version_key,
                          status=Status.pending)
        content.json = dict({"analyzerData": "some data"})
        content.status = Status.ready
        content.put()

        response = self.app.get(
            '/api/docs/owner/repo/v1.1.1?use_analyzer_data')
        self.assertEqual(response.status_int, 200)
        self.assertEqual(
            json.loads(response.normal_body).get('analysis'), "some data")
コード例 #4
0
ファイル: manage.py プロジェクト: trinhngocdieu/beta
 def update_bower(self):
     response = urlfetch.fetch(util.content_url(self.owner, self.repo,
                                                self.sha, 'bower.json'),
                               validate_certificate=True)
     if response.status_code == 200:
         try:
             bower_json = json.loads(response.content)
         except ValueError:
             return self.error("could not parse bower.json")
         Content(parent=self.version_key,
                 id='bower',
                 content=response.content,
                 status=Status.ready,
                 etag=response.headers.get('ETag', None)).put()
         return bower_json
     elif response.status_code == 404:
         return self.error("missing bower.json")
     else:
         return self.retry('could not access bower.json (%d)' %
                           response.status_code)
コード例 #5
0
    def test_update_indexes(self):
        metadata = """{
      "full_name": "full-name"
    }"""
        collection_library_key = Library(id='my/collection',
                                         status=Status.ready,
                                         kind='collection',
                                         metadata=metadata).put()
        collection_version_key = Version(id='v1.0.0',
                                         parent=collection_library_key,
                                         sha='sha',
                                         status=Status.ready).put()
        Content(id='bower',
                parent=collection_version_key,
                content="""{"dependencies": {
      "a": "org/element-1#1.0.0",
      "b": "org/element-2#1.0.0"
    }}""").put()
        VersionCache.update(collection_library_key)

        response = self.app.get(util.update_indexes_task('my', 'collection'),
                                headers={'X-AppEngine-QueueName': 'default'})
        self.assertEqual(response.status_int, 200)

        # Triggers ingestions
        tasks = self.tasks.get_filtered_tasks()
        self.assertEqual([
            util.ensure_library_task('org', 'element-1'),
            util.ensure_library_task('org', 'element-2'),
        ], [task.url for task in tasks])

        # Ensures collection references
        ref1 = CollectionReference.get_by_id(id="my/collection/v1.0.0",
                                             parent=ndb.Key(
                                                 Library, "org/element-1"))
        self.assertIsNotNone(ref1)

        ref2 = CollectionReference.get_by_id(id="my/collection/v1.0.0",
                                             parent=ndb.Key(
                                                 Library, "org/element-2"))
        self.assertIsNotNone(ref2)
コード例 #6
0
    def update_pages(self):
        bower = Content.get_by_id('bower', parent=self.version_key)
        if bower is None:
            return

        bower_json = json.loads(bower.content)

        for _, path in bower_json.get('pages', {}).iteritems():
            response = util.github_get('repos',
                                       self.owner,
                                       self.repo,
                                       'contents/' + path,
                                       params={'ref': self.sha})

            if response.status_code == 200:
                response_json = json.loads(response.content)
                markdown = None
                # Ensure a file was returned
                if isinstance(response_json,
                              dict) and response_json.get('type') == 'file':
                    markdown = base64.b64decode(response_json.get('content'))
            elif response.status_code == 404:
                markdown = None
            else:
                return self.retry('error fetching page %s (%d)' %
                                  (path, response.status_code))

            if markdown is not None:
                response = util.github_markdown(markdown)
                if response.status_code == 200:
                    Content(parent=self.version_key,
                            id='page-' + path,
                            content=response.content,
                            status=Status.ready,
                            etag=response.headers.get('ETag', None)).put()
                else:
                    return self.retry(
                        'error converting page to markdown %s (%d)' %
                        (path, response.status_code))
コード例 #7
0
  def test_analyzer_index(self):
    metadata = """{
      "full_name": "full-name"
    }"""
    library_key = Library(id='owner/repo', metadata=metadata).put()
    version_key = Version(id='v1.1.1', parent=library_key, sha='sha', status='ready').put()

    content = Content(id='analysis', parent=version_key, status=Status.pending)
    data = {
        "analyzerData": {
            "elements": [{"tagname": "my-element"}, {"classname": "another-element"}],
            "metadata": {
                "polymer": {"behaviors": [{"name": "polymer-behavior"}]}
            }
        }
    }
    content.json = data
    content.status = Status.ready
    content.put()

    VersionCache.update(library_key)

    response = self.app.get(util.update_indexes_task('owner', 'repo'), headers={'X-AppEngine-QueueName': 'default'})
    self.assertEqual(response.status_int, 200)

    index = search.Index('repo')
    document = index.get('owner/repo')
    self.assertIsNotNone(document)
    self.assertTrue(len(document.fields) > 0)

    elements = [field for field in document.fields if field.name == 'element']
    self.assertEqual(len(elements), 1)
    self.assertEqual(len(elements[0].value.split(' ')), 2)

    behaviors = [field for field in document.fields if field.name == 'behavior']
    self.assertEqual(len(behaviors), 1)
    self.assertEqual(len(behaviors[0].value.split(' ')), 1)