def test_hideawards_macro(): p_nbhd = M.Neighborhood.query.get(name='Projects') app_config_id = ObjectId() award = M.Award(app_config_id=app_config_id) award.short = u'Award short' award.full = u'Award full' award.created_by_neighborhood_id = p_nbhd._id project = M.Project.query.get(neighborhood_id=p_nbhd._id, shortname=u'test') M.AwardGrant(award=award, award_url='http://award.org', comment='Winner!', granted_by_neighborhood=p_nbhd, granted_to_project=project) ThreadLocalORMSession.flush_all() with h.push_context(p_nbhd.neighborhood_project._id): r = g.markdown_wiki.convert('[[projects]]') assert_in( '<div class="feature"> <a href="http://award.org" rel="nofollow" title="Winner!">' 'Award short</a> </div>', squish_spaces(r)) r = g.markdown_wiki.convert('[[projects show_awards_banner=False]]') assert_not_in('Award short', r)
def grant(self, grant=None, recipient=None): require_access(self.neighborhood, 'admin') grant_q = M.Award.query.find( dict(short=grant, created_by_neighborhood_id=self.neighborhood._id)).first() recipient_q = M.Project.query.find( dict(neighborhood_id=self.neighborhood._id, shortname=recipient, deleted=False)).first() if grant_q and recipient_q: app_config_id = ObjectId() award = M.AwardGrant(app_config_id=app_config_id) award.award_id = grant_q._id award.granted_to_project_id = recipient_q._id award.granted_by_neighborhood_id = self.neighborhood._id with h.push_context(recipient_q._id): g.post_event('project_updated') redirect(request.referer)
def test_hideawards_macro(): p_nbhd = M.Neighborhood.query.get(name='Projects') app_config_id = ObjectId() tool_version = {'neighborhood': '0'} award = M.Award(app_config_id=app_config_id, tool_version=tool_version) award.short = u'Award short' award.full = u'Award full' award.created_by_neighborhood_id = p_nbhd._id project = M.Project.query.get(neighborhood_id=p_nbhd._id, name=u'test') award_grant = M.AwardGrant(award=award, granted_by_neighborhood=p_nbhd, granted_to_project=project) ThreadLocalORMSession.flush_all() with h.push_context(p_nbhd.neighborhood_project._id): r = g.markdown_wiki.convert('[[projects]]') assert '<div class="feature">Award short</div>' in r, r r = g.markdown_wiki.convert('[[projects show_awards_banner=False]]') assert '<div class="feature">Award short</div>' not in r, r
project.labels = p.labels or project.labels project.trove_root_database = trove_ids(project.trove_root_database, p.trove_root_databases) project.trove_developmentstatus = trove_ids(project.trove_developmentstatus, p.trove_developmentstatuses) project.trove_audience = trove_ids(project.trove_audience, p.trove_audiences) project.trove_license = trove_ids(project.trove_license, p.trove_licenses) project.trove_os = trove_ids(project.trove_os, p.trove_oses) project.trove_language = trove_ids(project.trove_language, p.trove_languages) project.trove_topic = trove_ids(project.trove_topic, p.trove_topics) project.trove_natlanguage = trove_ids(project.trove_natlanguage, p.trove_natlanguages) project.trove_environment = trove_ids(project.trove_environment, p.trove_environments) project.tool_data.update(p.tool_data) for a in p.awards: M.AwardGrant(app_config_id=bson.ObjectId(), award_id=a._id, granted_to_project_id=project._id, granted_by_neighborhood_id=nbhd._id) if p.icon: with open(p.icon) as icon_file: project.save_icon(p.icon, icon_file) project.notifications_disabled = False with h.push_config(c, project=project, user=p.admin): ThreadLocalORMSession.flush_all() g.post_event('project_updated') session(project).clear() return 0 def create_projects(projects, nbhd, options):
def create_project(p, nbhd, options): worker_name = multiprocessing.current_process().name M.session.artifact_orm_session._get().skip_mod_date = True shortname = p.shortname or p.name.shortname project = M.Project.query.get(shortname=shortname, neighborhood_id=nbhd._id) project_template = nbhd.get_project_template() if project and not (options.update and p.shortname): log.warning( '[%s] Skipping existing project "%s". To update an existing ' 'project you must provide the project shortname and run ' 'this script with --update.' % (worker_name, shortname)) return 0 if not project: log.info('[%s] Creating project "%s".' % (worker_name, shortname)) try: project = nbhd.register_project(shortname, p.admin, project_name=p.name.name, private_project=p.private) except Exception as e: log.exception('[%s] %s' % (worker_name, str(e))) return 0 else: log.info('[%s] Updating project "%s".' % (worker_name, shortname)) project.notifications_disabled = True if options.ensure_tools and 'tools' in project_template: for i, tool in enumerate(six.iterkeys(project_template['tools'])): tool_config = project_template['tools'][tool] if project.app_instance(tool_config['mount_point']): continue tool_options = tool_config.get('options', {}) for k, v in six.iteritems(tool_options): if isinstance(v, six.string_types): tool_options[k] = string.Template(v).safe_substitute( project.root_project.__dict__.get('root_project', {})) project.install_app(tool, mount_label=tool_config['label'], mount_point=tool_config['mount_point'], **tool_options) project.summary = p.summary project.short_description = p.description project.external_homepage = p.external_homepage project.video_url = p.video_url project.last_updated = datetime.datetime.utcnow() # These properties may have been populated by nbhd template defaults in # register_project(). Overwrite if we have data, otherwise keep defaults. project.labels = p.labels or project.labels project.trove_root_database = trove_ids(project.trove_root_database, p.trove_root_databases) project.trove_developmentstatus = trove_ids( project.trove_developmentstatus, p.trove_developmentstatuses) project.trove_audience = trove_ids(project.trove_audience, p.trove_audiences) project.trove_license = trove_ids(project.trove_license, p.trove_licenses) project.trove_os = trove_ids(project.trove_os, p.trove_oses) project.trove_language = trove_ids(project.trove_language, p.trove_languages) project.trove_topic = trove_ids(project.trove_topic, p.trove_topics) project.trove_natlanguage = trove_ids(project.trove_natlanguage, p.trove_natlanguages) project.trove_environment = trove_ids(project.trove_environment, p.trove_environments) project.tool_data.update(p.tool_data) for a in p.awards: M.AwardGrant(app_config_id=bson.ObjectId(), award_id=a._id, granted_to_project_id=project._id, granted_by_neighborhood_id=nbhd._id) if p.icon: with open(p.icon, 'rb') as icon_file: project.save_icon(p.icon, icon_file) project.notifications_disabled = False with h.push_config(c, project=project, user=p.admin): ThreadLocalORMSession.flush_all() g.post_event('project_updated') session(project).clear() return 0
# These properties may have been populated by nbhd template defaults in # register_project(). Overwrite if we have data, otherwise keep defaults. project.labels = p.labels or project.labels project.trove_root_database = trove_ids(project.trove_root_database, p.trove_root_databases) project.trove_developmentstatus = trove_ids(project.trove_developmentstatus, p.trove_developmentstatuses) project.trove_audience = trove_ids(project.trove_audience, p.trove_audiences) project.trove_license = trove_ids(project.trove_license, p.trove_licenses) project.trove_os = trove_ids(project.trove_os, p.trove_oses) project.trove_language = trove_ids(project.trove_language, p.trove_languages) project.trove_topic = trove_ids(project.trove_topic, p.trove_topics) project.trove_natlanguage = trove_ids(project.trove_natlanguage, p.trove_natlanguages) project.trove_environment = trove_ids(project.trove_environment, p.trove_environments) for a in p.awards: M.AwardGrant(app_config_id=bson.ObjectId(), tool_version=dict(neighborhood='0'), award_id=a._id, granted_to_project_id=project._id, granted_by_neighborhood_id=nbhd._id) project.notifications_disabled = False with h.push_config(c, project=project, user=user): ThreadLocalORMSession.flush_all() g.post_event('project_updated') session(project).clear() return 0 def create_projects(projects, nbhd, user, options): for p in projects: r = create_project(Object(p), nbhd, user, options) if r != 0: sys.exit(r) def main(options):
def create_project_with_attrs(p, nbhd, update=False, ensure_tools=False): # type: (object, M.Neighborhood, bool, bool) -> Union[M.Project|bool] M.session.artifact_orm_session._get().skip_mod_date = True shortname = p.shortname project = M.Project.query.get(shortname=shortname, neighborhood_id=nbhd._id) project_template = nbhd.get_project_template() if project and not update: log.warning('Skipping existing project "%s"' % (shortname)) return False if not project: creating = True project = nbhd.register_project( shortname, p.admin, project_name=p.name, private_project=p.private, omit_event= True, # because we'll fire it later after setting other fields ) else: creating = False log.info('Updating project "%s".' % (shortname)) project.notifications_disabled = True if ensure_tools and 'tools' in project_template: for i, tool in enumerate(six.iterkeys(project_template['tools'])): tool_config = project_template['tools'][tool] if project.app_instance(tool_config['mount_point']): continue tool_options = tool_config.get('options', {}) for k, v in six.iteritems(tool_options): if isinstance(v, six.string_types): tool_options[k] = string.Template(v).safe_substitute( project.root_project.__dict__.get('root_project', {})) project.install_app(tool, mount_label=tool_config['label'], mount_point=tool_config['mount_point'], **tool_options) project.summary = p.summary project.short_description = p.description project.external_homepage = p.external_homepage project.video_url = p.video_url project.last_updated = datetime.datetime.utcnow() # These properties may have been populated by nbhd template defaults in # register_project(). Overwrite if we have data, otherwise keep defaults. project.labels = p.labels or project.labels project.trove_root_database = trove_ids(project.trove_root_database, p.trove_root_databases) project.trove_developmentstatus = trove_ids( project.trove_developmentstatus, p.trove_developmentstatuses) project.trove_audience = trove_ids(project.trove_audience, p.trove_audiences) project.trove_license = trove_ids(project.trove_license, p.trove_licenses) project.trove_os = trove_ids(project.trove_os, p.trove_oses) project.trove_language = trove_ids(project.trove_language, p.trove_languages) project.trove_topic = trove_ids(project.trove_topic, p.trove_topics) project.trove_natlanguage = trove_ids(project.trove_natlanguage, p.trove_natlanguages) project.trove_environment = trove_ids(project.trove_environment, p.trove_environments) project.tool_data.update(p.tool_data) for a in p.awards: M.AwardGrant(app_config_id=bson.ObjectId(), award_id=a._id, granted_to_project_id=project._id, granted_by_neighborhood_id=nbhd._id) if p.icon_url: req = requests.get(p.icon_url) req.raise_for_status() project.save_icon(urlparse(p.icon_url).path, BytesIO(req.content), content_type=req.headers.get('Content-Type')) elif getattr(p, 'icon', None): with open(p.icon, 'rb') as icon_file: project.save_icon(p.icon, icon_file) project.notifications_disabled = False with h.push_config(c, project=project, user=p.admin): ThreadLocalORMSession.flush_all() if creating: g.post_event('project_created') else: g.post_event('project_updated') return project