Beispiel #1
0
 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")
Beispiel #2
0
 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")
Beispiel #3
0
 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))
Beispiel #4
0
 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
Beispiel #5
0
    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.")
Beispiel #7
0
 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")
Beispiel #8
0
    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
Beispiel #9
0
 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")
Beispiel #10
0
    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
Beispiel #11
0
    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
Beispiel #12
0
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
Beispiel #13
0
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])
Beispiel #14
0
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])
Beispiel #15
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
Beispiel #16
0
 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))
Beispiel #17
0
    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))
Beispiel #18
0
 def find(cls):
     return Project.objects()
Beispiel #19
0
 def __init__(self):
     obj = Mongo()
     obj.check_mongo()
     get_mongo_db("manage", DBConnFactory.TYPE_MONGOENGINE)
     self.projects = Project.objects()
     self.users = User.objects()
Beispiel #20
0
 def objects(cls):
     """
     Returns the projects
     """
     return Project.objects()