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
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())
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'))
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())
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
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}
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)
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}
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
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())
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)