def set_project_status(cls, project_id, status): if project_id: try: Project.objects(project_id=project_id).update_one(set__status=status) except: Console.error("Oops! Something went wrong while trying to amend project status") else: Console.error("Please specify the project to be amended")
def remove_project_reviewer(cls, project_id, username): if project_id: try: found = User.objects(username=username) if found.count() > 0: Project.objects(project_id=project_id).update_one(pull__reviewers=username) Console.info("User `{0}` removed as Reviewer.".format(username)) else: Console.error("Please specify a valid user") except: Console.error("Oops! Something went wrong while trying to remove project reviewer") else: Console.error("Please specify the project to be amended")
def display(cls, user_dicts=None, user_name=None): if bool(user_dicts): values = [] table = Texttable(max_width=180) for entry in user_dicts: items = [] headers = [] for key, value in entry.iteritems(): if key == "projects": project_entry = "" if value: for itm in value: user_project = Project.objects(id=ObjectId(itm.get('$oid'))).only('title', 'project_id').first() project_entry = project_entry + user_project.title + ", " items.append(project_entry) elif key == "roles": role_entry = "" if value: for itm in value: role_entry = role_entry+itm + ", " role_entry = role_entry.rstrip(', ') items.append(role_entry) else: items.append(value) headers.append(key.replace('_', ' ').title()) values.append(items) table.add_row(items) table.header(headers) print table.draw() else: if user_name: Console.error("No user in the system with name '{0}'".format(user_name))
def display_two_columns(cls, table_dict=None): if table_dict: ignore_fields = ['_cls', '_id', 'date_modified', 'date_created', 'password', 'confirm'] table = Texttable(max_width=100) rows = [['Property', 'Value']] for key, value in table_dict.iteritems(): if key not in ignore_fields: items = [key.replace('_', ' ').title()] if isinstance(value, list): if value: if key == "projects": project_entry = "" for itm in value: user_project = Project.objects(id=ObjectId(itm.get('$oid'))) \ .only('title', 'project_id').first() project_entry = project_entry + user_project.title + ", " project_entry.strip(', ') items.append(project_entry) else: items.append(' , '.join(value)) else: items.append('None') else: items.append(value) rows.append(items) try: if rows: table.add_rows(rows) except: print sys.exc_info()[0] print table.draw() pass
def display(cls, committee_dict=None): if bool(committee_dict): values = [] for entry in committee_dict: items = [] headers = [] for key, value in entry.iteritems(): if key == "project_id": entry = "" if value: items.append(value) headers.append("Project ID") project = Project.objects(project_id=value).first() entry += project.title # for item in value: # project = Project.objects.get(id=ObjectId(item.get('$oid'))) # entry += project.title # entry = entry.strip(',') items.append(entry) headers.append("Project Name") elif key == "reviewers": entry = "" if value: for item in value: user = User.objects.get( id=ObjectId(item.get('$oid'))) if user.username != "super": entry += user.firstname + " " + user.lastname + ", " entry = entry.strip(', ') if entry: items.append(entry) else: items.append("No reviewers yet.") else: items.append("No reviewers yet.") headers.append(key.replace('_', ' ').title()) values.append(items) # Re-order the columns as per our requirement # header order 1, 2, 0 => project name, project_id, reviewers header_order = [0] headers = [headers[i] for i in header_order] new_values = [[x[0]] for x in values] table_fmt = "fancy_grid" table = tabulate(new_values, headers, table_fmt) separator = '' try: seperator = table.split("\n")[1].replace("|", "+") except: separator = "-" * 50 print separator print table print separator else: Console.error("No Committees to display.")
def display(cls, committee_dict=None): if bool(committee_dict): values = [] for entry in committee_dict: items = [] headers = [] for key, value in entry.iteritems(): if key == "project_id": entry = "" if value: items.append(value) headers.append("Project ID") project = Project.objects(project_id=value).first() entry += project.title # for item in value: # project = Project.objects.get(id=ObjectId(item.get('$oid'))) # entry += project.title # entry = entry.strip(',') items.append(entry) headers.append("Project Name") elif key == "reviewers": entry = "" if value: for item in value: user = User.objects.get(id=ObjectId(item.get('$oid'))) if user.username != "super": entry += user.firstname + " " + user.lastname + ", " entry = entry.strip(', ') if entry: items.append(entry) else: items.append("No reviewers yet.") else: items.append("No reviewers yet.") headers.append(key.replace('_', ' ').title()) values.append(items) # Re-order the columns as per our requirement # header order 1, 2, 0 => project name, project_id, reviewers header_order = [0] headers = [headers[i] for i in header_order] new_values = [[x[0]] for x in values] table_fmt = "fancy_grid" table = tabulate(new_values, headers, table_fmt) separator = '' try: seperator = table.split("\n")[1].replace("|", "+") except: separator = "-" * 50 print separator print table print separator else: Console.error("No Committees to display.")
def get_project_status(cls, project_id): if project_id: try: project = Project.objects(project_id=project_id).only('status') if project: for entry in project: return entry.status except: Console.error("Oops! Something went wrong while trying to get user status") else: Console.error("Please specify the user get status")
def find_by_id(cls, id): ''' finds projects by if :param id: the project id :type id: uuid ''' """Finds a project by the given id""" found = Project.objects(projectid=id) if found.count() > 0: return found[0].to_json() else: return None
def delete_project(cls, project_id=None): if project_id: try: project = Project.objects(project_id=project_id) if project: project.delete() Console.info("Project with id `{0}` removed from the database.".format(project_id)) else: Console.error("Project with id `{0}` does not exist.".format(project_id)) except: Console.error("Oops! Something went wrong while trying to remove a project") else: Console.error("Please specify the project to be removed")
def find_by_keyword(cls, keyword): ''' finds a projects matching a keyword :param keyword: a keyword :type keyword: String ''' """Finds and returns all projects with the entered keyword""" found = Project.objects(keyword=keyword) if found.count() > 0: return found[0].to_json() else: return None
def find_by_category(cls, category): ''' find the project by category :param category: the category :type category: String ''' """Finds and returns all project in that category""" found = Project.objects(categories=category) if found.count() > 0: return found[0].to_json() else: return None
def random_project(): """ Generates a random project in dict :rtype: dict """ user = User.objects.first() data = Project(title=fake.sentence()[:30], categories=['FutureSystems'], keywords=['sqllite'], lead=[user], managers=[user], members=[user], alumnis=[fake.name()], contact=fake.name() + "\n" + fake.address(), orientation="Lot's of all make", primary_discipline="other", abstract=fake.paragraph(), intellectual_merit=fake.paragraph(), broader_impact=fake.paragraph(), url=fake.url(), results=fake.sentence(), agreement_use=True, agreement_slides=True, agreement_support=True, agreement_software=True, agreement_documentation=True, grant_organization=["NSF"], grant_id="1001", grant_url=fake.url(), resources_services=['Hadoop'], resources_software=['Other'], resources_clusters=['India'], resources_provision=['PaaS'], comment=fake.sentence(), use_of_fs=fake.paragraph(), scale_of_use=fake.paragraph(), comments=fake.sentence(), join_open=True, join_notification=True, loc_name=fake.country(), loc_street=fake.street_name(), loc_additional="None", loc_state=fake.state(), loc_country=fake.country(), active=False, project_id=uuid.uuid4(), status="pending") return data
def main(): """ Test function to create 10 users and 3 projects """ # generate_users(10) generate_projects(3) print 70 * "=" print users.find() print 70 * "=" print 70 * "&" print users.find()[0] _projects = Project.objects() print _projects.count() pprint(_projects[0])
def list_projects(cls, display_fmt=None, project_id=None): req_fields = ["title", "status", "lead", "managers", "members", "project_id"] try: if project_id is None: projects_json = Project.objects.only(*req_fields).to_json() projects_dict = json.loads(projects_json) if projects_dict: if display_fmt != 'json': cls.display(projects_dict, project_id) else: cls.display_json(projects_dict, project_id) else: Console.info("No projects in the database.") else: projects_json = Project.objects(project_id=project_id).to_json() projects_list = json.loads(projects_json) for item in projects_list: projects_dict = item cls.display_two_column(projects_dict) except: Console.error("Oops.. Something went wrong in the list projects method " + sys.exc_info()) pass
def remove_user(cls, user_name, project_id, role): if role not in ROLES_LIST: Console.error("Invalid role `{0}`".format(role)) return user = User.objects(username=user_name).first() if user and role != "alumni": if role == "member": Project.objects(project_id=project_id).update_one(pull__members=user) Console.info("User `{0}` removed as Project member.".format(user_name)) elif role == "lead": Project.objects(project_id=project_id).update_one(pull__lead=user) Console.info("User `{0}` removed as Project lead.".format(user_name)) elif role == "alumni": Project.objects(project_id=project_id).update_one(pull__alumnis=user) Console.info("User `{0}` removed as alumni.".format(user_name)) else: Console.error("The user `{0}` has not registered with Future Systems".format(user_name))
def add_user(cls, user_name, project_id, role): """ Adds a member to the project. :param role: the role of the user :type role: String :param user_name: the username :type user_name: String :param project_id: the project id """ if role not in ROLES_LIST: Console.error("Invalid role `{0}`".format(role)) return """adds members to a particular project""" user = User.objects(username=user_name).first() project = Project.objects(project_id=project_id).first() if project: if user and role != 'alumni': if role == "member": Project.objects(project_id=project_id).update_one(push__members=user) User.objects(username=user_name).update_one(push__projects=project) Console.info("User `{0}` added as Project member.".format(user_name)) elif role == "lead": Project.objects(project_id=project_id).update_one(push__lead=user) Console.info("User `{0}` set as Lead.".format(user_name)) else: Console.error("Role `{0}` cannot be amended".format(role)) elif role == "alumni": Project.objects(project_id=project_id).update_one(push__alumnis=user_name) Console.info("User `{0}` added as Alumni.".format(user_name)) else: Console.error("The user `{0}` has not registered with Future Systems".format(user_name)) else: Console.error("The project `{0}` is not registered with Future Systems".format(project_id))
def find(cls): return Project.objects()
def __init__(self): obj = Mongo() obj.check_mongo() get_mongo_db("manage", DBConnFactory.TYPE_MONGOENGINE) self.projects = Project.objects() self.users = User.objects()
def objects(cls): """ Returns the projects """ return Project.objects()