Skip to content
This repository has been archived by the owner on Jul 24, 2018. It is now read-only.

Commit

Permalink
Some defaults for new users.
Browse files Browse the repository at this point in the history
  • Loading branch information
ralphbean committed Jan 15, 2014
1 parent 6f58fbd commit aa6f56d
Show file tree
Hide file tree
Showing 2 changed files with 139 additions and 3 deletions.
130 changes: 130 additions & 0 deletions fmn/lib/defaults.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
import logging
import fmn.lib.models

log = logging.getLogger(__name__)

generic_rule_path_defaults = [

# Intentionally leaving this one out of the defaults
#('My ansible playbook runs', 'fmn.rules.....')

# I am intentionally leaving out:
# - ansible
# - compose
# - fedocal
# - meetbot

('My askbot posts', 'fmn.rules:askbot_post_edited'),

('My bodhi comments', 'fmn.rules:bodhi_update_comment'),

('My wiki edits', 'fmn.rules:wiki_article_edit'),
('My wiki uploads', 'fmn.rules:wiki_upload_complete'),

('My copr builds', 'fmn.rules:copr_build_end'),

('Edits to my fas account', 'fmn.rules:fas_user_update'),
('Role changes for my fas account', 'fmn.rules:fas_role_update'),

('Badges!', 'fmn.rules:fedbadges_badge_award'),

('My blog posts!', 'fmn.rules:planet_post_new'),

]

package_rule_path_defaults = [
('Buildroot overrides on my packages',
'fmn.rules:bodhi_buildroot_override_tag'),
('Bodhi comments on my packages',
'fmn.rules:bodhi_update_comment'),
('Bodhi requests for testing on packages I own',
'fmn.rules:bodhi_update_request_testing'),
('Bodhi requests for stable on packages I own',
'fmn.rules:bodhi_update_request_stable'),
('Bodhi request revocations on packages I own',
'fmn.rules:bodhi_update_request_revoke'),
('Bodhi requests to obsolete updates I own',
'fmn.rules:bodhi_update_request_obsolete'),
('Bodhi requests to unpush updates of packages I own',
'fmn.rules:bodhi_update_request_unpush'),

('Koji builds for packages I own',
'fmn.rules:koji_build_state_change'),

('SCM commits to packages that I own',
'fmn.rules:git_receive'),
('New sources uploaded for packages that I own',
'fmn.rules:git_lookaside_new'),
('New git branches created for packages that I own',
'fmn.rules:git_branch'),

('New Tagger tags on packages I own',
'fmn.rules:fedoratagger_tag_create'),
('Tagger votes on packages I own',
'fmn.rules:fedoratagger_tag_update'),
('Tagger rating changes on packages I own',
'fmn.rules:fedoratagger_tag_create'),

('ACL updates on packages I own',
'fmn.rules:pkgdb_acl_update'),
('Users removed from packages I own',
'fmn.rules:pkgdb_acl_user_remove'),
('New branches for packages I own',
'fmn.rules:pkgdb_branch_clone'),
('Critpath status changes to packages I own',
'fmn.rules:pkgdb_critpath_update'),
('Owner changes to packages I own',
'fmn.rules:pkgdb_owner_update'),
('Retirement of packages I own',
'fmn.rules:pkgdb_package_retire'),
('pkgdb metadata updates to packages I own',
'fmn.rules:pkgdb_package_update'),
]

def create_defaults_for(session, user):
""" Create a sizable amount of defaults for a new user. """

if not user.openid.endswith('id.fedoraproject.org'):
log.warn("New user not from fedoraproject.org. No defaults set.")
return

# the openid is of the form USERNAME.id.fedoraproject.org
nick = user.openid.split('.')[0]

# TODO -- make the root here configurable.
valid_paths = fmn.lib.load_rules(root='fmn.rules')

def rule_maker(path, **kw):
""" Shorthand function, used inside loops below. """
return fmn.lib.models.Rule.create_from_code_path(
session, valid_paths, path, **kw)


def contexts():
for name in ['email', 'irc']:
context = fmn.lib.models.Context.get(session, name)
if context:
yield context
else:
log.warn("No such context %r is in the DB." % name)

for context in contexts():
pref = fmn.lib.models.Preference.load(session, user, context)
if not pref:
pref = fmn.lib.models.Preference.create(session, user, context)

qualifier_path = 'fmn.rules:user_filter'
for name, rule_path in generic_rule_path_defaults:
filt = fmn.lib.models.Filter.create(session, name)
filt.add_rule(session, valid_paths, rule_path)
filt.add_rule(session, valid_paths, qualifier_path, fasnick=nick)

pref.add_filter(session, filt)

qualifier_path = 'fmn.rules:user_package_filter'
for name, rule_path in package_rule_path_defaults:
filt = fmn.lib.models.Filter.create(session, name)
filt.add_rule(session, valid_paths, rule_path)
filt.add_rule(session, valid_paths, qualifier_path, fasnick=nick)

pref.add_filter(session, filt)
12 changes: 9 additions & 3 deletions fmn/lib/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@

import fedmsg.utils

import fmn.lib.defaults

BASE = declarative_base()

log = logging.getLogger(__name__)
Expand Down Expand Up @@ -172,17 +174,21 @@ def all(cls, session):
return session.query(cls).all()

@classmethod
def get_or_create(cls, session, openid, openid_url):
def get_or_create(cls, session, openid, openid_url, create_defaults=True):
user = cls.by_openid(session, openid)
if not user:
user = cls.create(session, openid, openid_url)
user = cls.create(session, openid, openid_url, create_defaults)
return user

@classmethod
def create(cls, session, openid, openid_url):
def create(cls, session, openid, openid_url, create_defaults):
user = cls(openid=openid, openid_url=openid_url)
session.add(user)
session.flush()

if create_defaults:
fmn.lib.defaults.create_defaults_for(session, user)

return user


Expand Down

0 comments on commit aa6f56d

Please sign in to comment.