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}))
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
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)}))
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)