예제 #1
0
    def get(self):
        author = users.get_current_user()
        name = self.request.get('name')
        query = Algorithm.query(ancestor=ndb.Key('Python Algorithms', 'scrap')) \
            .filter(Algorithm.author == author) \
            .filter(Algorithm.name == name) \
            .order(Algorithm.date)
        self.response.content_type = 'application/json'
        try:
            for algo in query.fetch(None):
                algo.public = True
                algo.put()
            msg = 'User %s shared "%s".' % (author.email(), name)

            result = Executor(algo.script, algo.viz, False)
            if result.events:
                step = max(1, len(result.events) / 10)
                events = result.events[2::step] + [result.events[-1]]
                events = [viz for lineno, viz, output in events]
                algo.events = str(events)
                algo.put()
                msg += '\nAdded %d preview events' % len(events)
            else:
                msg += '\nNo preview events were recorded'
            info(msg)
            notify(author, 'share', algo.name, algo.script, algo.viz)
            self.response.write(json.encode({'result': msg}))
        except Exception as e:
            msg = 'Cannot publish "%s": %s' % (name, e)
            error(msg)
            self.response.write(json.encode({'result': msg}))
예제 #2
0
 def loadScript(self, name, user=None):
     query = Algorithm.query(ancestor=ndb.Key('Python Algorithms', 'scrap')) \
         .filter(Algorithm.name == name) \
         .order(-Algorithm.date)
     algo = None
     for algo in query.fetch(None):
         if algo.public or not user or algo.author == user:
             break
     if algo:
         logging.info('Load script ' + str(algo.date))
         return algo.name, algo.script, algo.viz, algo.author
     else:
         logging.info('No algo found for ' + name)
         return name, "# Cannot find: '" + name + "'", "", user
예제 #3
0
 def get(self):
     author = users.get_current_user()
     name = self.request.get('name')
     query = Algorithm.query(ancestor=ndb.Key('Python Algorithms', 'scrap')) \
         .filter(Algorithm.author == author) \
         .filter(Algorithm.name == name)
     self.response.content_type = 'application/json'
     try:
         for version in query.fetch(None):
             version.key.delete()
         self.response.write(json.encode({'result': 'Deleted "%s"' % name}))
         info('User %s deleted "%s"' % (
             author.email(),
             self.request.get('name'),
         ))
     except Exception as e:
         self.response.write(
             json.encode(
                 {'result': 'Could not delete "%s": %s' % (name, e)}))
예제 #4
0
    def load(self, filter):
        query = Algorithm.query(ancestor=ndb.Key('Python Algorithms', 'scrap')) \
            .filter(filter)

        def info(pair):
            n, algo = pair
            return (
                algo.name,
                algo.author.nickname(),
                algo.author.user_id(),
                algo.events or '[]',
                n,
                'not yet shared' if not algo.public else '',
            )

        algos = reversed(sorted(query.fetch(None), key=lambda algo: algo.date))
        algos = map(info, enumerate(algos))
        found = set()
        result = []
        for algo in algos:
            if algo[0] not in found:
                found.add(algo[0])
                result.append(algo)
        return sorted(result)