| |
@@ -137,17 +137,11 @@
|
| |
class Hub(BASE):
|
| |
__tablename__ = 'hubs'
|
| |
name = sa.Column(sa.String(50), primary_key=True)
|
| |
- summary = sa.Column(sa.String(128))
|
| |
created_on = sa.Column(sa.DateTime, default=datetime.datetime.utcnow)
|
| |
widgets = relation('Widget', cascade='all,delete', backref='hub')
|
| |
- left_width = sa.Column(sa.Integer, nullable=False, default=8)
|
| |
+ config = relation('HubConfig', uselist=False, cascade='all,delete', backref='hub')
|
| |
archived = sa.Column(sa.Boolean, default=False)
|
| |
user_hub = sa.Column(sa.Boolean, default=False)
|
| |
-
|
| |
- # A URL to the "avatar" for this hub.
|
| |
- avatar = sa.Column(sa.String(256), default=placekitten)
|
| |
- header_img = sa.Column(sa.String(256), default=randomheader)
|
| |
-
|
| |
# Timestamps about various kinds of "freshness"
|
| |
last_refreshed = sa.Column(sa.DateTime, default=datetime.datetime.utcnow)
|
| |
last_edited = sa.Column(sa.DateTime, default=datetime.datetime.utcnow)
|
| |
@@ -244,10 +238,11 @@
|
| |
|
| |
@classmethod
|
| |
def create_user_hub(cls, session, username, fullname):
|
| |
- hub = cls(name=username, summary=fullname,
|
| |
- avatar=username2avatar(username),
|
| |
- user_hub=True)
|
| |
+ hub = cls(name=username, user_hub=True)
|
| |
session.add(hub)
|
| |
+ hub_config = HubConfig(
|
| |
+ hub=hub, summary=fullname, avatar=username2avatar(username))
|
| |
+ session.add(hub_config)
|
| |
|
| |
hubs.defaults.add_user_widgets(session, hub, username, fullname)
|
| |
|
| |
@@ -257,20 +252,17 @@
|
| |
|
| |
@classmethod
|
| |
def create_group_hub(cls, session, name, summary, **extra):
|
| |
- hub = cls(name=name, summary=summary,
|
| |
- # TODO -- do something else, smarter for group avatars
|
| |
- avatar=username2avatar(name),
|
| |
- user_hub=False)
|
| |
+ hub = cls(name=name, user_hub=False)
|
| |
session.add(hub)
|
| |
+ # TODO -- do something else, smarter for group avatars
|
| |
+ hub_config = HubConfig(
|
| |
+ hub=hub, summary=summary, avatar=username2avatar(name))
|
| |
+ session.add(hub_config)
|
| |
|
| |
hubs.defaults.add_group_widgets(session, hub, name, summary, **extra)
|
| |
return hub
|
| |
|
| |
@property
|
| |
- def right_width(self):
|
| |
- return 12 - self.left_width
|
| |
-
|
| |
- @property
|
| |
def left_widgets(self):
|
| |
return sorted(
|
| |
[w for w in self.widgets
|
| |
@@ -287,11 +279,9 @@
|
| |
def __json__(self):
|
| |
return {
|
| |
'name': self.name,
|
| |
- 'summary': self.summary,
|
| |
- 'avatar': self.avatar,
|
| |
+ 'config': self.config.__json__(),
|
| |
|
| |
'widgets': [widget.idx for widget in self.widgets],
|
| |
- 'left_width': self.left_width,
|
| |
|
| |
'owners': [u.username for u in self.owners],
|
| |
'members': [u.username for u in self.members],
|
| |
@@ -299,7 +289,34 @@
|
| |
}
|
| |
|
| |
|
| |
- def _config_default(context):
|
| |
+ class HubConfig(BASE):
|
| |
+ __tablename__ = 'hubs_config'
|
| |
+ id = sa.Column(sa.Integer, primary_key=True)
|
| |
+ hub_id = sa.Column(sa.String(50), sa.ForeignKey('hubs.name'),
|
| |
+ nullable=False)
|
| |
+ summary = sa.Column(sa.String(128))
|
| |
+ left_width = sa.Column(sa.Integer, nullable=False, default=8)
|
| |
+ # A URL to the "avatar" for this hub.
|
| |
+ avatar = sa.Column(sa.String(256), default=placekitten)
|
| |
+ header_img = sa.Column(sa.String(256), default=randomheader)
|
| |
+ chat_channel = sa.Column(sa.String(256), nullable=True)
|
| |
+ chat_domain = sa.Column(sa.String(256), nullable=True)
|
| |
+
|
| |
+ def __json__(self):
|
| |
+ return {
|
| |
+ 'summary': self.summary,
|
| |
+ 'left_width': self.left_width,
|
| |
+ 'avatar': self.avatar,
|
| |
+ 'chat_channel': self.chat_channel,
|
| |
+ 'chat_domain': self.chat_domain,
|
| |
+ }
|
| |
+
|
| |
+ @property
|
| |
+ def right_width(self):
|
| |
+ return 12 - self.left_width
|
| |
+
|
| |
+
|
| |
+ def _widget_config_default(context):
|
| |
widget_name = context.current_parameters['plugin']
|
| |
widget = hubs.widgets.registry[widget_name]
|
| |
return json.dumps(dict([
|
| |
@@ -313,7 +330,7 @@
|
| |
plugin = sa.Column(sa.String(50), nullable=False)
|
| |
created_on = sa.Column(sa.DateTime, default=datetime.datetime.utcnow)
|
| |
hub_id = sa.Column(sa.String(50), sa.ForeignKey('hubs.name'))
|
| |
- _config = sa.Column(sa.String(256), default=_config_default)
|
| |
+ _config = sa.Column(sa.String(256), default=_widget_config_default)
|
| |
|
| |
index = sa.Column(sa.Integer, nullable=False)
|
| |
left = sa.Column(sa.Boolean, nullable=False, default=False)
|
| |
Neat, I didn't know about this.