Exemplo n.º 1
0
class ActivityReportRow(db.Model):
	__tablename__ = 'activity_report_rows'
	id = db.Column(db.Integer, primary_key=True)
	datetime_utc = db.Column(db.DateTime, nullable=False)
	user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
	slack_conversation_read_count = db.Column(db.Integer, nullable=True)
	slack_user_event_count = db.Column(db.Integer, nullable=True)
	google_calendar_event_id = db.Column(db.Integer, db.ForeignKey('google_calendar_events.id', \
	                                                               ondelete='SET NULL'), nullable=True)
	google_calendar_event_count = db.Column(db.Integer, nullable=True)
	is_workday_time = db.Column(db.Boolean, nullable=True, default=False)
	focused_work_period_start_utc = db.Column(db.DateTime, nullable=True)
	is_focus_time = db.Column(db.Boolean, nullable=True)
	is_refocus_time = db.Column(db.Boolean, nullable=True)
	is_collaborative_time = db.Column(db.Boolean, nullable=True)

	__table_args__ = ( \
	                  Index('activity_report_unique_user_datetime', 'user_id', \
	                        'datetime_utc', unique=True),)
	def __repr__(self):
		return f'ActivityReportRow({self.id}, {self.datetime_utc}, {self.user_id})'

	def to_json(self):
		props = self.__dict__
		props.pop('_sa_instance_state')
		props['datetime_utc'] = props['datetime_utc'].isoformat()
		return props
Exemplo n.º 2
0
class SlackUser(db.Model, EnhancedDBModel):
	__tablename__ = 'slack_users'
	id = db.Column(db.Integer, primary_key=True)
	slack_user_api_id = db.Column(db.String(100), nullable=False)
	slack_team_id = db.Column(db.Integer, db.ForeignKey('slack_teams.id'), nullable=False)
	slack_email_address = db.Column(db.String(300))
	first_name = db.Column(db.String(100))
	last_name = db.Column(db.String(100))
	slack_username = db.Column(db.String(100), nullable=False)
	is_authenticated = db.Column(db.Boolean, nullable=False, default=False)
	authentication_oauth_access_token = db.Column(db.String(200))
	is_deleted_on_slack = db.Column(db.Boolean, nullable=False, default=False)
	created_date = db.Column(db.DateTime, nullable=False)
	last_updated = db.Column(db.DateTime, onupdate=datetime.utcnow, nullable=False)
	slack_timezone_label = db.Column(db.String(100))
	slack_timezone_offset = db.Column(db.Integer)
	user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

	def slack_team(self):
		return SlackTeam.query.filter(SlackTeam.id == self.slack_team_id).one()

	def __repr__(self):
			return 'SlackUser(%s, %s, %s)' % (self.first_name + self.last_name, self.id, self.slack_user_api_id)

	def slack_client(self):
		if self.is_authenticated:
			return slack.WebClient(self.authentication_oauth_access_token)
		else:
			return None
Exemplo n.º 3
0
class SlackConversationRead(db.Model):
	__tablename__ = 'slack_conversation_reads'
	id = db.Column(db.Integer, primary_key=True)
	slack_conversation_query_id = db.Column(db.Integer, db.ForeignKey('slack_conversation_queries.id'), nullable=False, unique=True)
	slack_user_id = db.Column(db.Integer, db.ForeignKey('slack_users.id'), nullable=False)
	slack_conversation_id = db.Column(db.Integer, db.ForeignKey('slack_conversations.id'), nullable=False)
	period_start_datetime = db.Column(db.DateTime, nullable=False)
	period_end_datetime = db.Column(db.DateTime, nullable=False)
	last_updated = db.Column(db.DateTime, onupdate=datetime.utcnow, nullable=False)
Exemplo n.º 4
0
class SlackConversationQuery(db.Model):
  __tablename__ = 'slack_conversation_queries'
  id = db.Column(db.Integer, primary_key=True)
  slack_user_id = db.Column(db.Integer, db.ForeignKey('slack_users.id'), nullable=False)
  slack_conversation_id = db.Column(db.Integer, db.ForeignKey('slack_conversations.id'), nullable=False)
  query_datetime = db.Column(db.DateTime, nullable=False)
  last_read_datetime = db.Column(db.DateTime, nullable=False)
  last_updated = db.Column(db.DateTime, onupdate=datetime.utcnow, nullable=False)
  slack_conversation_query_run_id = db.Column(db.Integer, db.ForeignKey('slack_conversation_query_runs.id'), nullable=False)
Exemplo n.º 5
0
class SlackUserEvent(db.Model, EnhancedDBModel):
	__tablename__ = 'slack_user_events'
	id = db.Column(db.Integer, primary_key=True)
	slack_user_id = db.Column(db.Integer, db.ForeignKey('slack_users.id'), nullable=False)
	raw_slack_event_id = db.Column(db.Integer, db.ForeignKey('raw_slack_events.id')) # may be null if polled from Slack API
	slack_event_api_id = db.Column(db.String(100), nullable=False)
	event_datetime = db.Column(db.DateTime, nullable=False)
	last_updated = db.Column(db.DateTime, onupdate=datetime.utcnow, nullable=False)
	slack_event_type = db.Column(db.String(100), nullable=False)
	slack_event_subtype = db.Column(db.String(100))

	def __repr__(self):
		return "SlackUserEvent(id: %s, slack_user_id: %s, slack_event_api_id: %s, slack_event_type: %s, slack_event_subtype: %s)" % \
			(self.id, self.slack_user_id, self.slack_event_api_id, self.slack_event_type, self.slack_event_subtype or '')
Exemplo n.º 6
0
class GoogleCalendarEvent(db.Model, EnhancedDBModel):
	__tablename__ = 'google_calendar_events'
	id = db.Column(db.Integer, primary_key=True)
	google_id = db.Column(db.String(200), nullable=False)
	ical_uid = db.Column(db.String(200), nullable=False)
	start_time = db.Column(db.DateTime, nullable=False)
	end_time = db.Column(db.DateTime, nullable=False)
	summary = db.Column(db.String(300), nullable=False)
	description = db.Column(db.Text)
	organizer_email = db.Column(db.String(200), nullable=False)
	organizer_self = db.Column(db.Boolean, default=False)
	json_data = db.Column(db.JSON)
	created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
	updated_at = db.Column(db.DateTime, onupdate=datetime.utcnow)
	google_calendar_user_id = db.Column(db.Integer, db.ForeignKey('google_calendar_users.id'))
	FOCUS_TIME_EVENT_SUMMARY_NAME = 'Focus Time'

	@hybrid_property
	def marked_busy(self):
		if (not self.json_data): return False
		json_data = json.loads(self.json_data) if type(self.json_data) == str else self.json_data
		if bool(json_data.get('transparency')) & (json_data.get('transparency') == 'transparent'):
			return False
		return True

	@hybrid_property
	def is_focus_time_event(self):
		return self.summary == self.FOCUS_TIME_EVENT_SUMMARY_NAME

	def __repr__(self):
		return "GoogleCalendarEvent('%s','%s','%s','%s')" % (self.organizer_email, self.start_time, self.end_time, self.google_calendar_user_id)
Exemplo n.º 7
0
class SlackConversation(db.Model, EnhancedDBModel):
	__tablename__ = 'slack_conversations'
	id = db.Column(db.Integer, primary_key=True)
	slack_conversation_api_id = db.Column(db.String(100), nullable=False)
	slack_team_id = db.Column(db.Integer, db.ForeignKey('slack_teams.id'), nullable=False)
	conversation_type = db.Column(db.String(100), nullable=False) # 'im', 'mpim', 'channel', 'private_channel'
	conversation_name = db.Column(db.String(100)) # can be null for IM conversation
	is_deleted = db.Column(db.Boolean, nullable=False, default=False)
	last_updated = db.Column(db.DateTime, onupdate=datetime.utcnow, nullable=False)
Exemplo n.º 8
0
class Post(db.Model):
	__tablename__ = 'posts' # follows general table name paradigm in database (plural)
	id = db.Column(db.Integer, primary_key=True)
	title = db.Column(db.String(100), nullable=False)
	date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
	content = db.Column(db.Text, nullable=False)
	user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
	last_updated = db.Column(db.DateTime, onupdate=datetime.utcnow, default=datetime.utcnow)

	def __repr__(self):
		return "Post('%s', '%s')" % (self.title, self.date_posted)

	def date_to_string(self):
		return self.date_posted.strftime("%a %b %d %Y %l:%M%p")
Exemplo n.º 9
0
class GitHubUser(db.Model, EnhancedDBModel):
	__tablename__ = 'github_users'
	id = db.Column(db.Integer, primary_key=True)
	github_api_user_id = db.Column(db.Integer, nullable=False)
	github_oauth_access_token = db.Column(db.String(200))
	github_email_address = db.Column(db.String(300))
	github_username = db.Column(db.String(100), nullable=True)
	is_authenticated = db.Column(db.Boolean, nullable=False, default=False)
	is_deleted_on_github = db.Column(db.Boolean, nullable=False, default=False)
	created_at = db.Column(db.DateTime, nullable=True)
	updated_at = db.Column(db.DateTime, onupdate=datetime.utcnow, nullable=True)
	user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

	def __repr__(self):
		return 'GitHubUser(%s, %s, %s)' % (self.github_username, self.id, self.user_id)
Exemplo n.º 10
0
class GoogleCalendarUser(db.Model, EnhancedDBModel):
	__tablename__ = 'google_calendar_users'
	id = db.Column(db.Integer, primary_key=True)
	google_email = db.Column(db.String(300), nullable=False)
	auth_token = db.Column(db.String(300), nullable=False)
	refresh_token = db.Column(db.String(300))
	scopes = db.Column(db.String(300), nullable=False)
	primary_timeZone = db.Column(db.String(300), nullable=False)
	primary_etag = db.Column(db.String(300), nullable=False)
	primary_color_id = db.Column(db.Integer, nullable=False)
	created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
	updated_at = db.Column(db.DateTime, onupdate=datetime.utcnow)
	user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
	google_calendar_events = db.relationship('GoogleCalendarEvent', backref='google_calendar_user', lazy=True)

	def __repr__(self):
		return "GoogleCalendarUser('%s','%s','%s')" % (self.google_email, self.primary_timeZone, self.created_at)
Exemplo n.º 11
0
class SlackConversationQueryRun(db.Model, EnhancedDBModel):
	__tablename__ = 'slack_conversation_query_runs'
	id = db.Column(db.Integer, primary_key=True)
	query_start_time = db.Column(db.DateTime, nullable=False)
	query_end_time = db.Column(db.DateTime)
	slack_user_id = db.Column(db.Integer, db.ForeignKey('slack_users.id'), nullable=False)