Пример #1
0
def get_mongo_db(mongo_collection, clientType=MONGOCLIENT):
    """
    Read in the mongo db information from the cloudmesh_server.yaml
    """
    # DEBUG
    # try:
    #    import sys
    #    _args = locals()
    #    del(_args['self'])
    #    log.debug("[{0}()] called with [{1}]".format(sys._getframe().f_code.co_name,
    #                                    str(_args)))
    #except:
    #    pass

    db_name = get_mongo_dbname_from_collection(mongo_collection)

    conn = None

    db = DBConnFactory.getconn(db_name, clientType)

    if db:
        conn = db[mongo_collection]
    else:
        try:
            log.debug("connection failed to {0}".format(db_name))
        except:
            pass

    return conn
Пример #2
0
class Review(CloudmeshObject):
    db_name = get_mongo_dbname_from_collection("manage")
    if db_name:
        meta = {'db_alias': db_name}

    project_id = StringField()
    reviews = ListField(StringField())
Пример #3
0
class User(CloudmeshObject):
    db_name = get_mongo_dbname_from_collection("manage")
    if db_name:
        meta = {'db_alias': db_name}

    """
    Hidden Fields
    """
    status = StringField(required=True, default='pending')
    userid = UUIDField()
    roles = ListField(StringField())
    
    """
    User Fields
    """
    username = StringField(required=True)
    email = EmailField(required=True)
    password = StringField()
    confirm = StringField()
    title = StringField(required=True)
    firstname = StringField(required=True)
    lastname = StringField(required=True)
    phone = StringField(required=True)
    url = StringField(required=True)
    citizenship = StringField(required=True)
    bio = StringField(required=True)
    institution = StringField(required=True)
    institutionrole = StringField(required=True)
    department = StringField(required=True)
    address = StringField(required=True)
    advisor = StringField(required=True)
    country = StringField(required=True)
    projects = ListField(ReferenceField('Project'))
Пример #4
0
def get_mongo_db(mongo_collection, clientType=MONGOCLIENT):
    """
    Read in the mongo db information from the cloudmesh_server.yaml
    """
    # DEBUG
    # try:
    #    import sys
    #    _args = locals()
    #    del(_args['self'])
    #    log.debug("[{0}()] called with [{1}]".format(sys._getframe().f_code.co_name,
    #                                    str(_args)))
    #except:
    #    pass

    db_name = get_mongo_dbname_from_collection(mongo_collection)

    conn = None

    db = DBConnFactory.getconn(db_name, clientType)

    if db:
        conn = db[mongo_collection]
    else:
        try:
            log.debug("connection failed to {0}".format(db_name))
        except:
            pass

    return conn
Пример #5
0
class Committee(CloudmeshObject):
    db_name = get_mongo_dbname_from_collection("manage")
    if db_name:
        meta = {'db_alias': db_name}

    reviewers = ListField(ReferenceField('User'))
    reviews = ListField(StringField())
Пример #6
0
 def setup(self):
     # HEADING()
     db_name = get_mongo_dbname_from_collection("manage")
     if db_name:
         meta = {'db_alias': db_name}
     obj = Mongo()
     obj.check_mongo()
     get_mongo_db("manage", DBConnFactory.TYPE_MONGOENGINE)
     pass
Пример #7
0
    def __init__(self):
        # config = ConfigDict(filename=config_file("/cloudmesh_server.yaml"))
        # port = config['cloudmesh']['server']['mongo']['port']

        # db = connect('manage', port=port)
        self.users = User.objects()

        db_name = get_mongo_dbname_from_collection("manage")
        if db_name:
            meta = {'db_alias': db_name}
Пример #8
0
class Project(CloudmeshObject):
    db_name = get_mongo_dbname_from_collection("manage")
    if db_name:
        meta = {'db_alias': db_name}
    """
    Hidden Fields
    """
    status = StringField(required=True, default='pending')
    project_id = UUIDField()
    """
    Project Fields
    """
    title = StringField(required=True)
    categories = ListField(required=True)
    keywords = ListField(required=True)
    lead = ListField(ReferenceField('User'))
    managers = ListField(ReferenceField('User'))
    members = ListField(ReferenceField('User'))
    alumnis = ListField(required=True)
    contact = StringField(required=True)
    orientation = StringField(required=True)
    primary_discipline = StringField(required=True)
    abstract = StringField(required=True)
    intellectual_merit = StringField(required=True)
    broader_impact = StringField(required=True)
    url = StringField(required=True)
    results = StringField(required=True)
    agreement_use = BooleanField(required=True)
    agreement_slides = BooleanField(required=True)
    agreement_support = BooleanField(required=True)
    agreement_software = BooleanField(required=True)
    agreement_documentation = BooleanField(required=True)
    grant_organization = ListField(StringField(choices=GRANT_ORGANIZATION),
                                   required=True)
    grant_id = StringField()
    grant_url = URLField()
    resources_services = ListField(StringField(choices=RESOURCES_SERVICES),
                                   required=True)
    resources_software = ListField(StringField(choices=RESOURCES_SOFTWARE),
                                   required=True)
    resources_clusters = ListField(StringField(choices=RESOURCES_CLUSTERS),
                                   required=True)
    resources_provision = ListField(StringField(choices=RESOURCES_PROVISION),
                                    required=True)
    comment = StringField(required=True)
    use_of_fs = StringField(required=True)
    scale_of_use = StringField(required=True)
    comments = StringField(required=True)
    join_open = BooleanField(required=True)
    join_notification = BooleanField(required=True)
    loc_name = StringField(required=True)
    loc_street = StringField(required=True)
    loc_additional = StringField(required=True)
    loc_state = StringField(required=True)
    loc_country = StringField(required=True)
Пример #9
0
class ExampleRecord(Document):
    '''
    an example mongonengine docoment class
    The class name has to be unique within one db where it stores
    '''
    # define fields first
    city = StringField(required=True)
    country = StringField(required=True)
    description = StringField(max_length=50)
    #
    # 'example' is one of the collection names defined in the cloudmesh_database.yaml file
    # This will give the dbname, as well as the named alias of the connection for objects
    # from this document class.
    dbname = get_mongo_dbname_from_collection("example")
    #
    # by default using named alias instead of the 'default' db
    if dbname:
        meta = {'db_alias': dbname}
Пример #10
0
def get_current_user_role():
    filename = path_expand("~/.cloudmesh/{0}/{1}".format("accounts", ".config"))
    with open(filename, 'r') as yamlfile:
        cfg = yaml.load(yamlfile)
        username = cfg['user']
    db_name = get_mongo_dbname_from_collection("manage")
    if db_name:
        meta = {'db_alias': db_name}
    ##
    ##
    obj = Mongo()
    obj.check_mongo()
    ##
    ##
    get_mongo_db("manage", DBConnFactory.TYPE_MONGOENGINE)
    found = User.objects(username=username).only('roles').first()
    return found.roles
    pass
Пример #11
0
class User(CloudmeshObject):
    """
    This class is used to represent a Cloudmesh User
    """

    db_name = get_mongo_dbname_from_collection("manage")
    if db_name:
        meta = {'db_alias': db_name}
    #
    # defer the connection to where the object is instantiated
    # get_mongo_db("manage", DBConnFactory.TYPE_MONGOENGINE)

    """
    User fields
    """

    username = StringField(required=True)
    email = EmailField(required=True)
    password = StringField()
    confirm = StringField()
    title = StringField(required=True)
    firstname = StringField(required=True)
    lastname = StringField(required=True)
    phone = StringField(required=True)
    url = StringField(required=True)
    citizenship = StringField(required=True)
    bio = StringField(required=True)
    institution = StringField(required=True)
    institutionrole = StringField(required=True)
    department = StringField(required=True)
    address = StringField(required=True)
    advisor = StringField(required=True)
    country = StringField(required=True)

    """
    Hidden fields
    """

    status = StringField(required=True, default='pending')
    userid = UUIDField()
    # projects = ListField(ReferenceField(Project))

    """
    Message received from either reviewers,
    committee or other users. It is a list because
    there might be more than one message
    """

    message = ListField(StringField())

    @classmethod
    def order(cls):
        """
        Order the attributes to be printed in the display
        method
        """
        try:
            return [
                ("username", cls.username),
                ("status", cls.status),
                ("title", cls.title),
                ("firstname", cls.firstname),
                ("lastname", cls.lastname),
                ("email", cls.email),
                ("url", cls.url),
                ("citizenship", cls.citizenship),
                ("bio", cls.bio),
                ("password", cls.password),
                ("phone", cls.phone),
                ("projects", cls.projects),
                ("institution", cls.institution),
                ("department", cls.department),
                ("address", cls.address),
                ("country", cls.country),
                ("advisor", cls.advisor),
                ("date_modified", cls.date_modified),
                ("date_created", cls.date_created),
                ("date_approved", cls.date_approved),
                ("date_deactivated", cls.date_deactivated),
            ]
        except:
            return None

    @classmethod
    def hidden(cls):
        """
        Hidden attributes
        """
        return [
            "userid",
            "active",
            "message",
        ]

    def is_active(self):
        """
        Check if the user is active
        """
        # d1 = datetime.datetime.now()
        return self.active and (datetime.datetime.now() < self.date_deactivate)

    @classmethod
    def set_password(cls, password):
        """
        Not implemented

        :param password:
        :type password:
        """
        # self.password_hash = generate_password_hash(password)
        pass

    @classmethod
    def check_password(cls, password):
        """
        Not implemented

        :param password:
        :type password:
        """
        # return check_password_hash(self.password_hash, password)
        pass

    @classmethod
    def json(cls):
        """
        Returns a json representation of the object
        """
        d = {}
        order_iterator = iter(cls.order())
        for (field, value) in order_iterator:
            try:
                d[field] = value
            except:
                pass
        return d

    @classmethod
    def yaml(cls):
        """
        Returns the yaml object of the object.
        """
        # return cls.__str__(fields=True, all=True)
        return cls.__str__(User())
Пример #12
0
class Project(CloudmeshObject):
    # named connection (not 'default')
    db_name = get_mongo_dbname_from_collection("manage")
    if db_name:
        meta = {'db_alias': db_name}

    '''
    The project object with its fields. The current fields include

    Attributes:

        title
        abstract
        intellectual_merit
        broader_impact
        use_of_fg
        scale_of_use
        categories
        keywords
        primary_discipline
        orientation
        contact
        url
        comment
        active
        projectid
        status
        lead
        managers
        members
        alumnis
        grant_organization
        grant_id
        grant_url
        results
        agreement_use
        agreement_slides
        agreement_support
        agreement_software
        agreement_documentation
        comments
        join_open
        join_notification
        resources_services
        resources_software
        resources_clusters
        resources_provision

    '''

    # -------------------------------------------------------------------
    # Project Information
    # -------------------------------------------------------------------
    title = StringField(max_length=30, required=REQUIRED)

    # -------------------------------------------------------------------
    # Project Vocabulary
    # -------------------------------------------------------------------

    categories = ListField(StringField(choices=CATEGORY), required=REQUIRED)
    keywords = ListField(StringField(), required=REQUIRED)

    # -------------------------------------------------------------------
    # Project Contact
    # -------------------------------------------------------------------

    # lead_institutional_role =  StringField(choices=INSTITUTE_ROLE, required=REQUIRED)
    lead = ListField(ReferenceField(User))
    managers = ListField(ReferenceField(User))
    members = ListField(ReferenceField(User))
    alumnis = ListField(StringField(), default=None)
    contact = StringField(required=REQUIRED)
    # active_members = lead u managers u members - alumnis
    # if not active : active_members = None

    # -------------------------------------------------------------------
    # Project Details
    # -------------------------------------------------------------------

    orientation = StringField(required=REQUIRED)
    primary_discipline = StringField(choices=DISCIPLINE, required=REQUIRED)
    abstract = StringField(required=REQUIRED)
    intellectual_merit = StringField(required=REQUIRED)
    broader_impact = StringField(required=REQUIRED)
    url = URLField(required=REQUIRED)
    results = StringField()

    # -------------------------------------------------------------------
    # Agreements
    # -------------------------------------------------------------------
    agreement_use = BooleanField(default=True)
    agreement_slides = BooleanField(default=True)
    agreement_support = BooleanField(default=True)
    agreement_software = BooleanField(default=True)
    agreement_documentation = BooleanField(default=True)

    # -------------------------------------------------------------------
    # Grant Information
    # -------------------------------------------------------------------
    grant_organization = StringField(choices=GRANT_ORG)
    grant_id = StringField()
    grant_url = URLField()

    # -------------------------------------------------------------------
    # Resources
    # -------------------------------------------------------------------
    resources_services = ListField(
        StringField(choices=SERVICES), required=REQUIRED)
    resources_software = ListField(
        StringField(choices=SOFTWARE), required=REQUIRED)
    resources_clusters = ListField(
        StringField(choices=CLUSTERS), required=REQUIRED)
    resources_provision = ListField(
        StringField(choices=PROVISIONING), required=REQUIRED)
    comment = StringField()
    use_of_fg = StringField(required=REQUIRED)
    scale_of_use = StringField(required=REQUIRED)

    # -------------------------------------------------------------------
    # Other
    # -------------------------------------------------------------------

    comments = StringField()

    # -------------------------------------------------------------------
    # Project Membership Management
    # -------------------------------------------------------------------
    join_open = BooleanField()
    join_notification = BooleanField()

    # -------------------------------------------------------------------
    # Location
    # -------------------------------------------------------------------

    loc_name = StringField()
    loc_street = StringField()
    loc_additional = StringField()
    loc_state = StringField()
    loc_country = StringField()

    # example search in a list field
    # Project.objects(categories__contains='education')

    active = BooleanField(required=REQUIRED)
    project_id = UUIDField()

    status = StringField(choices=STATUS, required=REQUIRED)

    def to_json(self):
        """
        prints the project as a json object
        """

        d = {
            "title": self.title,
            "categories": self.categories,
            "keywords": self.keywords,
            "lead": self.lead,
            "managers": self.managers,
            "members": self.members,
            "alumnis": self.alumnis,
            "contact": self.contact,
            "orientation": self.orientation,
            "primary_discipline": self.primary_discipline,
            "abstract": self.abstract,
            "intellectual_merit": self.intellectual_merit,
            "broader_impact": self.broader_impact,
            "url": self.url,
            "results": self.results,
            "agreement_use": self.agreement_use,
            "agreement_slides": self.agreement_slides,
            "agreement_support": self.agreement_support,
            "agreement_software": self.agreement_software,
            "agreement_documentation": self.agreement_documentation,
            "grant_organization": self.grant_organization,
            "grant_id": self.grant_id,
            "grant_url": self.grant_url,
            "resources_services": self.resources_services,
            "resources_software": self.resources_software,
            "resources_clusters": self.resources_clusters,
            "resources_provision": self.resources_provision,
            "comment": self.comment,
            "use_of_fg": self.use_of_fg,
            "scale_of_use": self.scale_of_use,
            "comments": self.comments,
            "join_open": self.join_open,
            "join_notification": self.join_notification,
            "loc_name": self.loc_name,
            "loc_street": self.loc_street,
            "loc_additional": self.loc_additional,
            "loc_state": self.loc_state,
            "loc_country": self.loc_country,
            "active": self.active,
            "project_id": self.project_id,
            "status": self.status
        }
        return d

    def __str__(self):
        """
        Printing the object as a string
        """
        d = self.to_json()
        return str(d)