def test_gist_gets_classmethod(self): gist = self._add_gist() user_id = 'testuser' ret = Gist.gets_by_owner(user_id) assert all([isinstance(r, Gist) for r in ret]) gist.fork(user_id) ret = Gist.forks_by_user(user_id) assert all([isinstance(r, Gist) for r in ret]) ret = Gist.publics_by_user(user_id) assert all([isinstance(r, Gist) for r in ret]) ret = Gist.secrets_by_user(user_id) assert all([isinstance(r, Gist) for r in ret])
def patch(self, request): if not self.is_owner: raise api_errors.NotTheAuthorError('gist', 'update') desc = request.data.get('description') if not desc: desc = self.gist.description files = request.data.get('files') file_names = [] file_contents = [] for file_name in self.gist.files: if file_name in files: file = files[file_name] if file: file_names.append(file_name) file_contents.append(file.get("content")) else: file_names.append(file_name) file_contents.append(self.gist.get_file(file_name)) self.gist.update(desc, file_names, file_contents) gist = Gist.get(self.gist.id) return gist_detail(gist, include_forks=True)
def patch(self, request): if not self.is_owner: raise api_errors.NotTheAuthorError("gist", "update") desc = request.data.get("description") if not desc: desc = self.gist.description files = request.data.get("files") file_names = [] file_contents = [] for file_name in self.gist.files: if file_name in files: file = files[file_name] if file: file_names.append(file_name) file_contents.append(file.get("content")) else: file_names.append(file_name) file_contents.append(self.gist.get_file(file_name)) self.gist.update(desc, file_names, file_contents) gist = Gist.get(self.gist.id) return gist_detail(gist, include_forks=True)
def public(self, request): gists = Gist.publics_by_user(self.name, start=self.start, limit=5, sort=self.sort, direction=self.direction) return self._render(request, gists)
def has_permission_handler(username, path, perm): if not username or not path: return False if path.endswith('.git'): path = path[:-4] # gist if path.startswith('gist/'): gist_id = path.rpartition("/")[-1] if username == Gist.get(gist_id).owner_id: return True return False # project project = Project.get_by_name(path) if not project: return False if perm == 'read': return True if not project.can_push: return False if project.has_push_perm(username): return True return False
def has_permission_handler(username, path, perm): if not username or not path: return False if path.endswith(".git"): path = path[:-4] # gist if path.startswith("gist/"): gist_id = path.rpartition("/")[-1] if username == Gist.get(gist_id).owner_id: return True return False # project project = Project.get_by_name(path) if not project: return False if perm == "read": return True if not project.can_push: return False if project.has_push_perm(username): return True return False
def test_gist_delete(self): gist = self._add_gist() gist_id = gist.id gist.delete() ret = Gist.get(gist_id) eq_(ret, None)
def _q_index(self, request): gists = Gist.gets_by_owner(self.name, is_self=self.is_self, start=self.start, limit=5, sort=self.sort, direction=self.direction) return self._render(request, gists)
def gists(self, request): owner_id = self.user.name page = request.get_form_var('page', '1') page = page and page.isdigit() and int(page) or 1 start = (abs(page) - 1) * PAGE_LIMIT gists = Gist.gets_by_owner(owner_id, start=start) ret = [gist_detail(g) for g in gists] return ret
def __init__(self, name): self.name = name self.user = User(name) current_user = request.user self.is_self = current_user and current_user.username == self.name ext = request.get_path().split('/')[-1] (self.page, self.start, self.link_prev, self.link_next, self.sort, self.direction) =\ make_page_args(request, self.name, ext=ext) self.n_all = Gist.count_user_all(self.name, self.is_self) self.n_fork = Gist.count_user_fork(self.name) self.n_star = Gist.count_user_star(self.name) if self.sort not in ('created', 'updated') \ or self.direction not in ('desc', 'asc'): raise TraversalError()
def _q_index(request): user = request.user if request.method == 'POST': desc, is_public, names, contents, oids = _get_req_gist_data(request) user = request.user owner_id = user and user.username or Gist.ANONYMOUS gist = Gist.add(desc, owner_id, is_public, names, contents) return request.redirect(gist.url) tdt = dict(request=request, gists=[], user=user) if user: gists = Gist.gets_by_owner(user.username, limit=4) tdt.update(dict(gists=gists)) if is_mobile_device(request): return st('/m/gist/index.html', **tdt) return st('/gist/index.html', **tdt)
def secret(self, request): current_user = request.user if not current_user or current_user.username != self.name: return request.redirect('/gist/%s' % self.name) gists = Gist.secrets_by_user(self.name, start=self.start, limit=5, sort=self.sort, direction=self.direction) return self._render(request, gists)
def __init__(self, request, id): self.id = id self.gist = Gist.get(self.id) if not self.gist: raise api_errors.NotFoundError("gist") self.is_owner = False self.comments = GistCommentsUI(request, self.gist)
def starred(request): user = request.user if user: gists = Gist.stars_by_user(user.username, start=request.start) else: ret = [] ret = [gist_detail(g) for g in gists] request.response.set_status(200) return json.dumps(ret)
def index_a_gist(cls, id): gist = Gist.get(id) if not gist: return data = gist.as_dict() result = {} if data: serial = str(id) result = cls.c.post( 'doc/gist_%s/' % serial, data=data, params={'refresh': True}) return result
def _get_gist_by_id(id): gist = {} _gist = Gist.get(id) if not _gist: return gist _owner = _get_user_by_name(_gist.owner_id) gist = dict( id=_gist.id, name=_gist.name, owner=_owner, ) if _gist.fork_from: _from_gist = Gist.get(_gist.fork_from) _owner = _get_user_by_name(_from_gist.owner_id) gist['from_gist'] = dict( id=_from_gist.id, name=_from_gist.name, owner=_owner, ) return gist
def test_gist_count_classmethod(self): gist = self._add_gist() user_id = 'testuser' ret = Gist.count_user_all(user_id) eq_(ret, 1) gist.fork(user_id) ret = Gist.count_user_fork(user_id) eq_(ret, 1) gist.star(user_id) ret = Gist.count_user_star(user_id) eq_(ret, 1) ret = Gist.count_public_by_user(user_id) eq_(ret, 2) ret = Gist.count_secret_by_user(user_id) eq_(ret, 0)
def _q_index(request): if request.method == 'POST': desc = request.data.get('description') or request.get_form_var( 'description', '') # DEPRECATED, will removed in future, use json to post data file_names = request.get_form_var('file_name', '') file_contents = request.get_form_var('file_contents', '') if not request.data.get('public'): is_public = PRIVILEGE_SECRET else: is_public = PRIVILEGE_PUBLIC files = request.data.get('files') if files: file_names = [] file_contents = [] for file_name, file in files.iteritems(): file_names.append(file_name) file_contents.append(file.get("content")) if file_names and file_contents: user = request.user user_id = user and user.username or Gist.ANONYMOUS gist = Gist.add(desc, user_id, is_public, file_names, file_contents) ret = gist_detail(gist, include_forks=True) request.response.set_status(201) return json.dumps(ret) else: raise api_errors.UnprocessableEntityError if request.user: gists = Gist.gets_by_owner(request.user.username, start=request.start) else: gists = Gist.discover('discover', start=request.start, limit=5) ret = [gist_detail(g) for g in gists] request.response.set_status(200) return json.dumps(ret)
def _add_gist(self, description='', owner_id='testuser', is_public=1, gist_names=[], gist_contents=[], fork_from=None): return Gist.add(description, owner_id, is_public, gist_names=gist_names, gist_contents=gist_contents, fork_from=fork_from)
def __call__(self, request): resp = request.response resp.set_header("Content-Type", "text/javascript") resp.set_header('Expires', 'Sun, 1 Jan 2006 01:00:00 GMT') resp.set_header('Pragma', 'no-cache') resp.set_header('Cache-Control', 'must-revalidate, no-cache, private') if not self.gist_id.isdigit() or not Gist.get(self.gist_id): return "document.write('<span style=\"color:red;\">NOT EXIST GIST</span>')" # noqa gist = Gist.get(self.gist_id) html = EMBED_CSS + EMBED_HEAD % gist.id for path in gist.files: path = path.encode('utf8') # TODO: clean this src = gist.get_file(path, rev='HEAD') src = highlight_code(path, src) src = src.replace('"', '\"').replace("'", "\'") html += SRC_FORMAT % (src, DOMAIN, gist.id, path, DOMAIN, gist.id, path, path, gist.url, DOMAIN) html += EMBED_FOOTER html = html.replace('\n', '\\n') return "document.write('%s')" % html
def gist_updated_receiver(sender, **kw): gist_id = kw.get('gist_id') gist = Gist.get(gist_id) data = { 'uid': 'gist-update-%s' % gist.id, 'author': gist.owner_id, 'url': gist.url, 'name': gist.full_name, 'desc': gist.description, 'date': gist.updated_at, 'type': 'gist_updated' } feeds = get_related_feeds(gist.owner_id) for feed in feeds: feed.add_action(data)
def gist_updated_receiver(sender, **kw): gist_id = kw.get("gist_id") gist = Gist.get(gist_id) data = { "uid": "gist-update-%s" % gist.id, "author": gist.owner_id, "url": gist.url, "name": gist.full_name, "desc": gist.description, "date": gist.updated_at, "type": "gist_updated", } feeds = get_related_feeds(gist.owner_id) for feed in feeds: feed.add_action(data)
def _discover(request): user = request.user name = inspect.stack()[1][3] (page, start, link_prev, link_next, sort, direction) = make_page_args(request, name) gists = Gist.discover(name, sort, direction, start) tdt = dict(request=request, gists=gists, page=page, link_prev=link_prev, link_next=link_next, sort=sort, direction=direction, user=user) return st('/gist/gists.html', **tdt)
def gist_commented_receiver(sender, **kw): gist_id = kw.get("gist_id") gist = Gist.get(gist_id) comment = kw.get("comment") data = { "uid": "gist-comment-%s" % gist.id, "author": comment.user_id, "name": gist.full_name, "url": comment.url, "content": comment.content, "date": comment.created_at, "type": "gist_commented", } feeds = get_related_feeds("", extra_receivers=[gist.owner_id]) for feed in feeds: feed.add_action(data)
def gist_commented_receiver(sender, **kw): gist_id = kw.get('gist_id') gist = Gist.get(gist_id) comment = kw.get('comment') data = { 'uid': 'gist-comment-%s' % gist.id, 'author': comment.user_id, 'name': gist.full_name, 'url': comment.url, 'content': comment.content, 'date': comment.created_at, 'type': 'gist_commented', } feeds = get_related_feeds('', extra_receivers=[gist.owner_id]) for feed in feeds: feed.add_action(data)
def _discover(request): user = request.user name = inspect.stack()[1][3] (page, start, link_prev, link_next, sort, direction) = make_page_args(request, name) gists = Gist.discover(name, sort, direction, start) tdt = dict( request=request, gists=gists, page=page, link_prev=link_prev, link_next=link_next, sort=sort, direction=direction, user=user ) return st('/gist/gists.html', **tdt)
def gist_starred_receiver(sender, **kw): author = kw.get("author") gist_id = kw.get("gist_id") gist = Gist.get(gist_id) uid = "gist-star-%s-%s" % (gist.id, author) data = { "uid": uid, "author": author, "url": gist.url, "name": gist.full_name, "desc": gist.description, "date": datetime.now(), "type": "gist_starred", } feeds = get_related_feeds(author, extra_receivers=[gist.owner_id]) for feed in feeds: feed.add_action(data)
def gist_starred_receiver(sender, **kw): author = kw.get('author') gist_id = kw.get('gist_id') gist = Gist.get(gist_id) uid = 'gist-star-%s-%s' % (gist.id, author) data = { 'uid': uid, 'author': author, 'url': gist.url, 'name': gist.full_name, 'desc': gist.description, 'date': datetime.now(), 'type': 'gist_starred' } feeds = get_related_feeds(author, extra_receivers=[gist.owner_id]) for feed in feeds: feed.add_action(data)
def _q_lookup(self, request, item): gid = item extend = None if item.count('.') == 1: gid, extend = item.split('.') if not gid.isdigit(): raise TraversalError() gist = Gist.get(gid) if not gist or gist.owner_id != self.name: raise TraversalError() if extend == 'js': return GistEmbedUI(gid) return GistUI(gid)
def gist_forked_receiver(sender, **kw): gist_id = kw.get("gist_id") gist = Gist.get(gist_id) forked_from = gist.forked_from uid = "gist-fork-%s-%s" % (forked_from.id, gist.id) data = { "uid": uid, "author": gist.owner_id, "forked_from_name": forked_from.full_name, "forked_from_url": forked_from.url, "url": gist.url, "name": gist.full_name, "desc": gist.description, "date": gist.created_at, "type": "gist_forked", } feeds = get_related_feeds(gist.owner_id, extra_receivers=[forked_from.owner_id]) for feed in feeds: feed.add_action(data)
def gist_forked_receiver(sender, **kw): gist_id = kw.get('gist_id') gist = Gist.get(gist_id) forked_from = gist.forked_from uid = 'gist-fork-%s-%s' % (forked_from.id, gist.id) data = { 'uid': uid, 'author': gist.owner_id, 'forked_from_name': forked_from.full_name, 'forked_from_url': forked_from.url, 'url': gist.url, 'name': gist.full_name, 'desc': gist.description, 'date': gist.created_at, 'type': 'gist_forked' } feeds = get_related_feeds(gist.owner_id, extra_receivers=[forked_from.owner_id]) for feed in feeds: feed.add_action(data)
def gist_forked_receiver(sender, **kw): gist_id = kw.get('gist_id') gist = Gist.get(gist_id) forked_from = gist.forked_from uid = 'gist-fork-%s-%s' % (forked_from.id, gist.id) data = { 'uid': uid, 'author': gist.owner_id, 'forked_from_name': forked_from.full_name, 'forked_from_url': forked_from.url, 'url': gist.url, 'name': gist.full_name, 'desc': gist.description, 'date': gist.created_at, 'type': 'gist_forked' } feeds = get_related_feeds( gist.owner_id, extra_receivers=[forked_from.owner_id]) for feed in feeds: feed.add_action(data)
def has_permission_handler(environ, path, perm): if DEVELOP_MODE: return True username = environ.get('REMOTE_USER') # if len(path) < 4: # return name = path[:-4] # gist if name.startswith('gist/'): gist_id = name.rpartition("/")[-1] gist = Gist.get(gist_id) if not gist: return if perm == 'read': return True if not username: return return gist.owner_id == username # project project = CodeDoubanProject.get_by_name(name) if not project: return if perm == 'read': return True if not username: return if not project.can_push: # merge only return return project.has_push_perm(username)
def url(self): from vilya.models.gist import Gist return '%s/#comment-%s' % (Gist.get(self.gist_id).url, self.id)
def __init__(self, id): self.id = id self.gist = Gist.get(id)
def __init__(self, id): self.rev = '' self.gist = Gist.get(id)
def starred(self, request): gists = Gist.stars_by_user(self.name, start=self.start, limit=5) return self._render(request, gists)
def __init__(self, gist_id): self.gist = Gist.get(gist_id)
def _gist(self): gist = Gist.add('description', 'testuser', is_public=True) return gist