def package_orphan(package, collection): ''' Gives the possibility to orphan or take a package. ''' packagename = package package = None try: package_acl = pkgdblib.get_acl_package(SESSION, packagename) package = pkgdblib.search_package(SESSION, packagename, limit=1)[0] except NoResultFound: SESSION.rollback() flask.flash('No package of this name found.', 'errors') return flask.render_template('msg.html') except IndexError: flask.flash('No package of this name found.', 'errors') return flask.render_template('msg.html') for acl in package_acl: if acl.collection.branchname == collection: try: pkgdblib.update_pkg_poc(session=SESSION, pkg_name=package.name, clt_name=acl.collection.branchname, pkg_poc='orphan', user=flask.g.fas_user) flask.flash( 'You are no longer point of contact on branch: %s' % collection) except pkgdblib.PkgdbException, err: flask.flash(err.message, 'error') break
def package_orphan(package, collection): ''' Gives the possibility to orphan or take a package. ''' packagename = package package = None try: package_acl = pkgdblib.get_acl_package(SESSION, packagename) package = pkgdblib.search_package(SESSION, packagename, limit=1)[0] except NoResultFound: SESSION.rollback() flask.flash('No package of this name found.', 'errors') return flask.render_template('msg.html') except IndexError: flask.flash('No package of this name found.', 'errors') return flask.render_template('msg.html') for acl in package_acl: if acl.collection.branchname == collection: try: pkgdblib.update_pkg_poc( session=SESSION, pkg_name=package.name, clt_name=acl.collection.branchname, pkg_poc='orphan', user=flask.g.fas_user ) flask.flash( 'You are no longer point of contact on branch: %s' % collection) except pkgdblib.PkgdbException, err: flask.flash(err.message, 'error') break
def api_package_orphan(): """ Orphan a list of packages. :arg packagenames: List of string of the packages name. :arg branches: List of string of the branches name in which these packages will be orphaned. :arg all_pkgs: boolean (defaults to False) stipulating if all the packages of the user (you or someon else if you are admin) are getting orphaned. """ httpcode = 200 output = {} form = forms.PackageOwnerForm(csrf_enabled=False) if form.validate_on_submit(): pkg_names = form.pkg_name.data.split(",") pkg_branchs = form.clt_name.data.split(",") pkg_owner = form.pkg_owner.data try: for pkg_name, pkg_branch in itertools.product(pkg_names, pkg_branchs): message = pkgdblib.update_pkg_poc( SESSION, pkg_name=pkg_name, clt_name=clt_name, pkg_owner="orphan", user=flask.g.fas_user ) SESSION.commit() output["output"] = "ok" output["messages"] = [message] except pkgdblib.PkgdbException, err: SESSION.rollback() output["output"] = "notok" output["error"] = err httpcode = 500
def api_acl_reassign(): ''' ``/api/package/acl/reassign/`` Reassign the specified packages from one user to another. Accept POST queries only. :arg packages: List of strings of the package name to reassign. :arg branches: List of strings of the branchname of the Collection on which to reassign the point of contact. :arg user_target: User name of the new point of contact. ''' httpcode = 200 output = {} packages = flask.request.args.get('packages', None) branches = flask.request.args.get('branches', '').split(',') user_target = flask.request.args.get('user_target', '').split(',') if not packages or not branches or not user_target: output['output'] = 'notok' output['error'] = 'Invalid input submitted' httpcode = 500 else: try: messages = [] for (package, branch) in itertools.product(packages, branches): messages.append( pkgdblib.update_pkg_poc( session=SESSION, pkg_name=package, clt_name=branch, pkg_poc=user_target, user=flask.g.fas_user ) ) SESSION.commit() output['output'] = 'ok' output['messages'] = messages except pkgdblib.PkgdbException, err: SESSION.rollback() output['output'] = 'notok' output['error'] = err httpcode = 500
def api_acl_reassign(): ''' ``/api/package/acl/reassign/`` Reassign the specified packages from one user to another. Accept POST queries only. :arg packages: List of strings of the package name to reassign. :arg branches: List of strings of the branchname of the Collection on which to reassign the point of contact. :arg user_target: User name of the new point of contact. ''' httpcode = 200 output = {} packages = flask.request.args.get('packages', None) branches = flask.request.args.get('branches', '').split(',') user_target = flask.request.args.get('user_target', '').split(',') if not packages or not branches or not user_target: output['output'] = 'notok' output['error'] = 'Invalid input submitted' httpcode = 500 else: try: messages = [] for (package, branch) in itertools.product(packages, branches): messages.append( pkgdblib.update_pkg_poc(session=SESSION, pkg_name=package, clt_name=branch, pkg_poc=user_target, user=flask.g.fas_user)) SESSION.commit() output['output'] = 'ok' output['messages'] = messages except pkgdblib.PkgdbException, err: SESSION.rollback() output['output'] = 'notok' output['error'] = err httpcode = 500
def api_package_orphan(): ''' Orphan a list of packages. :arg packagenames: List of string of the packages name. :arg branches: List of string of the branches name in which these packages will be orphaned. :arg all_pkgs: boolean (defaults to False) stipulating if all the packages of the user (you or someon else if you are admin) are getting orphaned. ''' httpcode = 200 output = {} form = forms.PackageOwnerForm(csrf_enabled=False) if form.validate_on_submit(): pkg_names = form.pkg_name.data.split(',') pkg_branchs = form.clt_name.data.split(',') pkg_owner = form.pkg_owner.data try: for pkg_name, pkg_branch in itertools.product( pkg_names, pkg_branchs): message = pkgdblib.update_pkg_poc( SESSION, pkg_name=pkg_name, clt_name=clt_name, pkg_owner='orphan', user=flask.g.fas_user, ) SESSION.commit() output['output'] = 'ok' output['messages'] = [message] except pkgdblib.PkgdbException, err: SESSION.rollback() output['output'] = 'notok' output['error'] = err httpcode = 500
def package_give(package): ''' Gives the PoC of a package to someone else. ''' packagename = package package = None try: package_acl = pkgdblib.get_acl_package(SESSION, packagename) package = pkgdblib.search_package(SESSION, packagename, limit=1)[0] except NoResultFound: SESSION.rollback() flask.flash('No package of this name found.', 'errors') return flask.render_template('msg.html') except IndexError: flask.flash('No package of this name found.', 'errors') return flask.render_template('msg.html') # Restrict the branch to the one current user is PoC of (unless admin # or group) collect_name = [] for acl in package_acl: if acl.point_of_contact != flask.g.fas_user.username and \ not is_pkgdb_admin(flask.g.fas_user) and \ not acl.point_of_contact.startswith('group::'): pass else: if acl.point_of_contact.startswith('group::'): group = acl.point_of_contact.split('group::')[0] if group not in flask.g.fas_user.groups: pass else: collect_name.append(acl.collection.branchname) form = pkgdb.forms.GivePoCForm(collections=collect_name) acls = ['commit', 'watchbugzilla', 'watchcommits', 'approveacls'] if form.validate_on_submit(): collections = form.pkg_branch.data pkg_poc = form.pkg_poc.data if pkg_poc.startswith('group::'): acls = ['commit', 'watchbugzilla', 'watchcommits'] try: for pkg_collection in collections: message = pkgdblib.update_pkg_poc( SESSION, pkg_name=packagename, clt_name=pkg_collection, pkg_poc=pkg_poc, user=flask.g.fas_user, ) flask.flash(message) for acl in acls: pkgdblib.set_acl_package( SESSION, pkg_name=packagename, clt_name=pkg_collection, pkg_user=pkg_poc, acl=acl, status='Approved', user=flask.g.fas_user ) SESSION.commit() except pkgdblib.PkgdbException, err: SESSION.rollback() flask.flash(err.message, 'error') return flask.redirect( flask.url_for('.package_info', package=packagename) )
def test_update_pkg_poc(self): """ Test the update_pkg_poc function. """ self.test_add_package() # Package must exists self.assertRaises( pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='test', clt_name='F-17', user=FakeFasUser(), pkg_poc='toshio', ) self.session.rollback() # Collection must exists self.assertRaises( pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='guake', clt_name='F-16', user=FakeFasUser(), pkg_poc='toshio', ) self.session.rollback() # User must be the actual Point of Contact (or an admin of course, # or part of the group) self.assertRaises( pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='guake', clt_name='F-18', user=FakeFasUser(), pkg_poc='toshio', ) self.session.rollback() # Groups must end with -sig user = FakeFasUser() user.username = '******' self.assertRaises( pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='group::perl', ) self.session.rollback() # Change PoC to a group pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='group::perl-sig', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'group::perl-sig') # User must be in the group it gives the PoC to self.assertRaises( pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='ralph', ) self.session.rollback() user.groups.append('perl-sig') pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='ralph', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'ralph') # PoC can change PoC user = FakeFasUser() user.username = '******' pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='toshio', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'toshio') # Admin can change PoC pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='F-18', user=FakeFasUserAdmin(), pkg_poc='kevin', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'kevin') # Orphan -> status changed to Orphaned user = FakeFasUser() user.username = '******' pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='orphan', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'orphan') self.assertEqual(pkg_acl[0].status, 'Orphaned') # Take orphaned package -> status changed to Approved pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='F-18', user=FakeFasUser(), pkg_poc=FakeFasUser().username, ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'pingou') self.assertEqual(pkg_acl[0].status, 'Approved')
def test_unorphan_package(self): """ Test the unorphan_package function. """ create_package_acl(self.session) # Wrong package name self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='asd', clt_name='devel', pkg_user='******', user=FakeFasUser()) # Wrong collection self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='guake', clt_name='asd', pkg_user='******', user=FakeFasUser()) # Package is not orphaned self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='guake', clt_name='devel', pkg_user='******', user=FakeFasUser()) # Orphan package pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='devel', user=FakeFasUserAdmin(), pkg_poc='orphan', ) # User cannot unorphan for someone else self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='guake', clt_name='devel', pkg_user='******', user=FakeFasUser()) # User must be a packager user = FakeFasUser() user.groups = ['cla_done'] self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='guake', clt_name='devel', pkg_user='******', user=user) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[1].collection.branchname, 'devel') self.assertEqual(pkg_acl[1].package.name, 'guake') self.assertEqual(pkg_acl[1].point_of_contact, 'orphan') self.assertEqual(pkg_acl[1].status, 'Orphaned') pkgdblib.unorphan_package(self.session, pkg_name='guake', clt_name='devel', pkg_user='******', user=FakeFasUser()) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[1].collection.branchname, 'devel') self.assertEqual(pkg_acl[1].package.name, 'guake') self.assertEqual(pkg_acl[1].point_of_contact, 'pingou') self.assertEqual(pkg_acl[1].status, 'Approved')
def api_acl_reassign(): ''' Reassign packages ----------------- Reassign the specified packages from one user to another. :: /api/package/acl/reassign/ Accept POST queries only. :arg packages: List of strings of the package name to reassign. :arg branches: List of strings of the branchname of the Collection on which to reassign the point of contact. :arg user_target: User name of the new point of contact. Sample response: :: { "output": "ok", "messages": ["User: $USER changed poc of package: $PACKAGE from " "$PREVIOUS_POC to $NEW_POC on branch: $BRANCH"] } { "output": "notok", "error": ["You are not allowed to change the point of contact."] } ''' httpcode = 200 output = {} packages = flask.request.form.get('packages', '').split(',') branches = flask.request.form.get('branches', '').split(',') user_target = flask.request.form.get('user_target', None) if not packages or not branches or not user_target: output['output'] = 'notok' output['error'] = 'Invalid input submitted' httpcode = 500 else: try: messages = [] for (package, branch) in itertools.product(packages, branches): messages.append( pkgdblib.update_pkg_poc( session=SESSION, pkg_name=package, pkg_branch=branch, pkg_poc=user_target, user=flask.g.fas_user ) ) SESSION.commit() output['output'] = 'ok' output['messages'] = messages except pkgdblib.PkgdbException, err: SESSION.rollback() output['output'] = 'notok' output['error'] = err.message httpcode = 500
def package_give(package): ''' Gives the PoC of a package to someone else. ''' packagename = package package = None try: package_acl = pkgdblib.get_acl_package(SESSION, packagename) package = pkgdblib.search_package(SESSION, packagename, limit=1)[0] except NoResultFound: SESSION.rollback() flask.flash('No package of this name found.', 'errors') return flask.render_template('msg.html') except IndexError: flask.flash('No package of this name found.', 'errors') return flask.render_template('msg.html') # Restrict the branch to the one current user is PoC of (unless admin # or group) collect_name = [] for acl in package_acl: if acl.point_of_contact != flask.g.fas_user.username and \ not is_pkgdb_admin(flask.g.fas_user) and \ not acl.point_of_contact.startswith('group::'): pass else: if acl.point_of_contact.startswith('group::'): group = acl.point_of_contact.split('group::')[0] if group not in flask.g.fas_user.groups: pass else: collect_name.append(acl.collection.branchname) form = pkgdb.forms.GivePoCForm(collections=collect_name) acls = ['commit', 'watchbugzilla', 'watchcommits', 'approveacls'] if form.validate_on_submit(): collections = form.pkg_branch.data pkg_poc = form.pkg_poc.data if pkg_poc.startswith('group::'): acls = ['commit', 'watchbugzilla', 'watchcommits'] try: for pkg_collection in collections: message = pkgdblib.update_pkg_poc( SESSION, pkg_name=packagename, clt_name=pkg_collection, pkg_poc=pkg_poc, user=flask.g.fas_user, ) flask.flash(message) for acl in acls: pkgdblib.set_acl_package(SESSION, pkg_name=packagename, clt_name=pkg_collection, pkg_user=pkg_poc, acl=acl, status='Approved', user=flask.g.fas_user) SESSION.commit() except pkgdblib.PkgdbException, err: SESSION.rollback() flask.flash(err.message, 'error') return flask.redirect( flask.url_for('.package_info', package=packagename))
def test_update_pkg_poc(self): """ Test the update_pkg_poc function. """ self.test_add_package() # Package must exists self.assertRaises(pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='test', clt_name='F-17', user=FakeFasUser(), pkg_poc='toshio', ) self.session.rollback() # Collection must exists self.assertRaises(pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='guake', clt_name='F-16', user=FakeFasUser(), pkg_poc='toshio', ) self.session.rollback() # User must be the actual Point of Contact (or an admin of course, # or part of the group) self.assertRaises(pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='guake', clt_name='F-18', user=FakeFasUser(), pkg_poc='toshio', ) self.session.rollback() # Groups must end with -sig user = FakeFasUser() user.username = '******' self.assertRaises(pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='group::perl', ) self.session.rollback() # Change PoC to a group pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='group::perl-sig', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'group::perl-sig') # User must be in the group it gives the PoC to self.assertRaises(pkgdblib.PkgdbException, pkgdblib.update_pkg_poc, self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='ralph', ) self.session.rollback() user.groups.append('perl-sig') pkgdblib.update_pkg_poc( self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='ralph', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'ralph') # PoC can change PoC user = FakeFasUser() user.username = '******' pkgdblib.update_pkg_poc(self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='toshio', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'toshio') # Admin can change PoC pkgdblib.update_pkg_poc(self.session, pkg_name='guake', clt_name='F-18', user=FakeFasUserAdmin(), pkg_poc='kevin', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'kevin') # Orphan -> status changed to Orphaned user = FakeFasUser() user.username = '******' pkgdblib.update_pkg_poc(self.session, pkg_name='guake', clt_name='F-18', user=user, pkg_poc='orphan', ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'orphan') self.assertEqual(pkg_acl[0].status, 'Orphaned') # Take orphaned package -> status changed to Approved pkgdblib.update_pkg_poc(self.session, pkg_name='guake', clt_name='F-18', user=FakeFasUser(), pkg_poc=FakeFasUser().username, ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'F-18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'pingou') self.assertEqual(pkg_acl[0].status, 'Approved')
def test_unorphan_package(self): """ Test the unorphan_package function. """ create_package_acl(self.session) # Wrong package name self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='asd', clt_name='devel', pkg_user='******', user=FakeFasUser() ) # Wrong collection self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='guake', clt_name='asd', pkg_user='******', user=FakeFasUser() ) # Package is not orphaned self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='guake', clt_name='devel', pkg_user='******', user=FakeFasUser() ) # Orphan package pkgdblib.update_pkg_poc(self.session, pkg_name='guake', clt_name='devel', user=FakeFasUserAdmin(), pkg_poc='orphan', ) # User cannot unorphan for someone else self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='guake', clt_name='devel', pkg_user='******', user=FakeFasUser() ) # User must be a packager user = FakeFasUser() user.groups = ['cla_done'] self.assertRaises(pkgdblib.PkgdbException, pkgdblib.unorphan_package, self.session, pkg_name='guake', clt_name='devel', pkg_user='******', user=user ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[1].collection.branchname, 'devel') self.assertEqual(pkg_acl[1].package.name, 'guake') self.assertEqual(pkg_acl[1].point_of_contact, 'orphan') self.assertEqual(pkg_acl[1].status, 'Orphaned') pkgdblib.unorphan_package( self.session, pkg_name='guake', clt_name='devel', pkg_user='******', user=FakeFasUser() ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[1].collection.branchname, 'devel') self.assertEqual(pkg_acl[1].package.name, 'guake') self.assertEqual(pkg_acl[1].point_of_contact, 'pingou') self.assertEqual(pkg_acl[1].status, 'Approved')