def load_maybes(self): r = self.redis for key in r.lrange('event:%s:maybes' % self.key, 0, -1): u = User(redis=self.redis) u.load(key) self.maybes.append(u) self._load_maybes_count()
def _reload_comments(self): r = self.redis self.comments_count = r.llen('event:%s:comments' % self.key) for key in r.lrange('event:%s:comments' % self.key, 0, -1): comment = json.loads(r.get('comment:%s' % key)) u = User(redis=self.redis) u.load(comment['user']) comment['user'] = u comment['date_date'] = comment['date'][:10] comment['date_time'] = comment['date'][11:16] comment['key'] = key self.comments.append(comment)
def user_updates(username): u = User(redis=g.r) try: u.load_by_username(username) except UserNotFoundError: abort(404) if u.username in g.user.contacts: state = "contact" else: state = "nocontact" return render_template( "timeline.html", timeline=u.updates, user=u, state=state, title="%s" % username, disable_input=True )
def load(self, key=False): if key: self.key = key if not self.redis.exists('message:%s' % self.key): raise MessageError("404, message %s not found." % self.key) m = self.redis.get('message:%s' % self.key) self.data = json.loads(m) self.thread = self.data['thread'] sender = User(redis=self.redis) sender.load_by_username(self.data['sender']) self.sender = sender self.data['date_date'] = self.data['date'][:10] self.data['date_time'] = self.data['date'][11:16] try: self.data['encrypted'] self.encrypted = True self.decrypted = False except KeyError: self.encrypted = False
def __init__(self, redis=False, user=False): self.redis = redis self.user = user self.data = { 'image': 'default.png' } self.date = str(datetime.now()) self.validation_errors = [] self.key = False self.comments = [] self.comment_count = 0 self.attendees = [] self.attendees_count = 0 self.maybes = [] self.maybes_count = 0 self.creator = User(redis=redis)
def edit_user(new=False): if not new: try: g.user.username except AttributeError: abort(401) if new: u = User(redis=g.r) else: u = g.user if request.method == "POST": u.update(request.form, new=new) try: avatar = request.files.get("avatar") if avatar: try: u.avatar = upload_avatar(avatar) flash("Upload successful.", "success") except UploadNotAllowed: flash("Upload not allowed.", "error") u.save() if new: flash( '"User "%s" created successfully. \ You may now log in.' % u.username, "success", ) return redirect(url_for("intro")) else: flash("Profile updated.", "success") return redirect(url_for("edit_user")) except UserValidationError: for error in u.validation_errors: flash(error, "error") return render_template("forms/user.html", new=new, user=u)
class Event: def __init__(self, redis=False, user=False): self.redis = redis self.user = user self.data = { 'image': 'default.png' } self.date = str(datetime.now()) self.validation_errors = [] self.key = False self.comments = [] self.comment_count = 0 self.attendees = [] self.attendees_count = 0 self.maybes = [] self.maybes_count = 0 self.creator = User(redis=redis) def list(self, limit=-1, start=0): if limit > 0: limit = start + limit keys = self.redis.lrange('_list:events', start, limit) count = self.redis.llen('_list:events') events = [] for key in keys: e = Event(redis=self.redis, user=self.user) e.load(key) events.append(e) return events, count def update(self, data): form_fields = [ 'name', 'date', 'time', 'location', 'meeting_place', 'description', ] for field in form_fields: try: self.data[field] = data[field] except KeyError: self.data[field] = "" def save(self): r = self.redis self._validate() if not self.key: self.data['creator'] = self.user.username self.key = autoinc(self.redis, 'event') r.lpush('_list:events', self.key) r.lpush('user:%s:events' % self.user.key, self.key) if len(self.data['location']) < 1: self.data['location'] = 'Undisclosed Location' self._load_creator() r.set('event:%s' % self.key, json.dumps(self.data)) def _load_creator(self): self.creator.load_by_username(self.data['creator']) def add_comment(self, message): if not self.key: raise EventMustLoadError() r = self.redis if len(message) < 1: raise EventCommentError("Message must be at least one character.") comment_id = autoinc(r, 'comment') r.set('comment:%s' % comment_id, json.dumps({ 'user': self.user.key, 'text': message, 'date': self.date })) r.lpush('event:%s:comments' % self.key, comment_id) def del_comment(self, comment_id): r = self.redis r.lrem('event:%s:comments' % self.key, comment_id, 0) r.delete('comment:%s' % comment_id) def comment_user(self, comment_id): r = self.redis c = json.loads(r.get('comment:%s' % comment_id)) return c['user'] def load(self, event_id): r = self.redis if r.exists('event:%s' % event_id): self.key = event_id self.data = json.loads(r.get('event:%s' % self.key)) else: raise EventNotFoundError() if len(self.data['meeting_place']) > 0: self.show_meeting_place = True else: self.show_meeting_place = False self._load_attendees_count() self._load_maybes_count() self._reload_comments() self._load_creator() def delete(self): r = self.redis r.lrem('_list:events', self.key, 0) self.load_attendees() self.load_maybes() for attendee in self.attendees: r.lrem('user:%s:attending' % attendee.key, self.key, 0) for maybe in self.maybes: r.lrem('user:%s:maybe' % maybe.key, self.key, 0) r.delete('event:%s' % self.key) r.delete('event:%s:attendees' % self.key) r.delete('event:%s:maybes' % self.key) def _reload_comments(self): r = self.redis self.comments_count = r.llen('event:%s:comments' % self.key) for key in r.lrange('event:%s:comments' % self.key, 0, -1): comment = json.loads(r.get('comment:%s' % key)) u = User(redis=self.redis) u.load(comment['user']) comment['user'] = u comment['date_date'] = comment['date'][:10] comment['date_time'] = comment['date'][11:16] comment['key'] = key self.comments.append(comment) def load_attendees(self): r = self.redis for key in r.lrange('event:%s:attendees' % self.key, 0, -1): u = User(redis=self.redis) u.load(key) self.attendees.append(u) self._load_attendees_count() def load_maybes(self): r = self.redis for key in r.lrange('event:%s:maybes' % self.key, 0, -1): u = User(redis=self.redis) u.load(key) self.maybes.append(u) self._load_maybes_count() def set_attending(self): if self.user.get_event_state(self.key) == 'attending': return False r = self.redis r.lpush('event:%s:attendees' % self.key, self.user.key) r.lrem('event:%s:maybes' % self.key, self.user.key, 0) self.user.set_attending(self.key) def set_unattending(self): if self.user.get_event_state(self.key) == 'unattending': return False r = self.redis r.lrem('event:%s:attendees' % self.key, self.user.key, 0) r.lrem('event:%s:maybes' % self.key, self.user.key, 0) self.user.set_unattending(self.key) def set_maybe(self): if self.user.get_event_state(self.key) == 'maybe': return False r = self.redis r.lpush('event:%s:maybes' % self.key, self.user.key) r.lrem('event:%s:attendees' % self.key, self.user.key, 0) self.user.set_maybe(self.key) def _load_attendees_count(self): self.attendees_count = self.redis.llen('event:%s:attendees' % self.key) def _load_maybes_count(self): self.maybes_count = self.redis.llen('event:%s:maybes' % self.key) def _validate(self): if len(self.data['name']) < 1: self.validation_errors.append("Event name must be set.") if len(self.validation_errors) > 0: raise EventValidationError()