Esempio n. 1
0
    def __init__(self,
                 login_or_token,
                 base_url,
                 password=None,
                 deferred_save=False):
        # TODO: Validate URL

        self._requester = Requester(login_or_token, password,
                                    base_url.rstrip("/"))
        self._deferred_save = deferred_save
Esempio n. 2
0
class Chisubmit(object):
    def __init__(self,
                 login_or_token,
                 base_url,
                 password=None,
                 deferred_save=False,
                 ssl_verify=True):
        # TODO: Validate URL

        self._requester = Requester(login_or_token, password,
                                    base_url.rstrip("/"), ssl_verify)
        self._deferred_save = deferred_save

    def get_courses(self, include_archived=False):
        """
        :calls: GET /courses/
        :rtype: List of :class:`chisubmit.client.course.Course`
        """

        if include_archived:
            params = {"include_archived": "true"}
        else:
            params = None

        headers, data = self._requester.request("GET",
                                                "/courses/",
                                                params=params)
        return [
            chisubmit.client.course.Course(self, headers, elem)
            for elem in data
        ]

    def get_course(self,
                   course_id,
                   include_users=False,
                   include_assignments=False,
                   include_teams=False):
        """
        :calls: GET /courses/:course
        :param course_id: string
        :rtype: :class:`chisubmit.client.course.Course`
        """
        assert isinstance(course_id, (str, str)), course_id

        include = []

        if include_users:
            include.append("instructors")
            include.append("students")
            include.append("graders")

        if include_assignments:
            include.append("assignments")
            include.append("assignments__rubric")

        if include_teams:
            include.append("teams")

        if len(include) > 0:
            params = {"include": include}
        else:
            params = None

        headers, data = self._requester.request("GET",
                                                "/courses/" + course_id,
                                                params=params)
        return chisubmit.client.course.Course(self, headers, data)

    def create_course(self,
                      course_id,
                      name,
                      git_usernames=None,
                      git_staging_usernames=None,
                      extension_policy=None,
                      default_extensions=None):
        """
        :calls: POST /courses/
        :param course_id: string
        :param name: string
        :param git_usernames: string
        :param git_staging_usernames: string
        :param extension_policy: string
        :param default_extensions: int
        :rtype: :class:`chisubmit.client.course.Course`
        """
        assert isinstance(course_id, (str, str)), course_id

        post_data = {"course_id": course_id, "name": name}

        if git_usernames is not None:
            post_data["git_usernames"] = git_usernames
        if git_staging_usernames is not None:
            post_data["git_staging_usernames"] = git_staging_usernames
        if extension_policy is not None:
            post_data["extension_policy"] = extension_policy
        if default_extensions is not None:
            post_data["default_extensions"] = default_extensions

        headers, data = self._requester.request("POST",
                                                "/courses/",
                                                data=post_data)
        return chisubmit.client.course.Course(self, headers, data)

    def get_users(self):
        """
        :calls: GET /users/
        :rtype: List of :class:`chisubmit.client.users.User`
        """

        headers, data = self._requester.request("GET", "/users/")
        return [
            chisubmit.client.users.User(self, headers, elem) for elem in data
        ]

    def get_user(self, username=None):
        """
        :calls: GET /users/:username or GET /user
        :param username: string
        :rtype: :class:`chisubmit.client.users.User`
        """
        assert isinstance(username, (str, str)) or username is None, username

        if username is None:
            headers, data = self._requester.request("GET", "/user")
        else:
            headers, data = self._requester.request("GET",
                                                    "/users/" + username)
        return chisubmit.client.users.User(self, headers, data)

    def get_user_token(self, username=None, reset=False):
        """
        :calls: GET /users/:username/token or GET /user/token
        :param username: string
        :rtype: token: string, created: bool
        """
        assert isinstance(username, (str, str)) or username is None, username

        if reset:
            params = {"reset": "true"}
        else:
            params = {}

        if username is None:
            headers, data = self._requester.request("GET",
                                                    "/user/token",
                                                    params=params)
        else:
            headers, data = self._requester.request("GET",
                                                    "/users/" + username +
                                                    "/token",
                                                    params=params)

        return data["token"], data["new"]

    def create_user(self, username, first_name, last_name, email):
        """
        :calls: POST /users/
        :param username: string
        :param first_name: string
        :param last_name: string
        :param email: string
        :rtype: :class:`chisubmit.client.users.User`
        """
        assert isinstance(username, (str, str)), username

        post_data = {
            "username": username,
            "first_name": first_name,
            "last_name": last_name,
            "email": email
        }

        headers, data = self._requester.request("POST",
                                                "/users/",
                                                data=post_data)
        return chisubmit.client.users.User(self, headers, data)
Esempio n. 3
0
 def __init__(self, login_or_token, base_url, password = None, deferred_save = False):
     # TODO: Validate URL 
     
     self._requester = Requester(login_or_token, password, base_url.rstrip("/"))
     self._deferred_save = deferred_save
Esempio n. 4
0
class Chisubmit(object):
    
    def __init__(self, login_or_token, base_url, password = None, deferred_save = False):
        # TODO: Validate URL 
        
        self._requester = Requester(login_or_token, password, base_url.rstrip("/"))
        self._deferred_save = deferred_save
    
    def get_courses(self):
        """
        :calls: GET /courses/
        :rtype: List of :class:`chisubmit.client.course.Course`
        """
        
        headers, data = self._requester.request(
            "GET",
            "/courses/"
        )
        return [chisubmit.client.course.Course(self, headers, elem) for elem in data]    
    
    def get_course(self, course_id, include_users=False, include_assignments=False, include_teams=False):
        """
        :calls: GET /courses/:course
        :param course_id: string
        :rtype: :class:`chisubmit.client.course.Course`
        """
        assert isinstance(course_id, (str, unicode)), course_id
        
        include = []
        
        if include_users:
            include.append("instructors")
            include.append("students")
            include.append("graders")

        if include_assignments:
            include.append("assignments")
            include.append("assignments__rubric")
            
        if include_teams:
            include.append("teams")
            
        if len(include) > 0:
            params = {"include": include}
        else:
            params = None            
        
        headers, data = self._requester.request(
            "GET",
            "/courses/" + course_id,
            params = params
        )
        return chisubmit.client.course.Course(self, headers, data)
 
    def create_course(self, course_id, name, git_usernames = None, git_staging_usernames = None, 
                      extension_policy = None, default_extensions = None):
        """
        :calls: POST /courses/
        :param course_id: string
        :param name: string
        :param git_usernames: string
        :param git_staging_usernames: string
        :param extension_policy: string
        :param default_extensions: int
        :rtype: :class:`chisubmit.client.course.Course`
        """
        assert isinstance(course_id, (str, unicode)), course_id
        
        post_data = {"course_id": course_id,
                     "name": name}
        
        if git_usernames is not None:
            post_data["git_usernames"] = git_usernames
        if git_staging_usernames is not None:
            post_data["git_staging_usernames"] = git_staging_usernames
        if extension_policy is not None:
            post_data["extension_policy"] = extension_policy
        if default_extensions is not None:
            post_data["default_extensions"] = default_extensions
        
        headers, data = self._requester.request(
            "POST",
            "/courses/",
            data = post_data
        )
        return chisubmit.client.course.Course(self, headers, data)

    def get_users(self):
        """
        :calls: GET /users/
        :rtype: List of :class:`chisubmit.client.users.User`
        """
        
        headers, data = self._requester.request(
            "GET",
            "/users/"
        )
        return [chisubmit.client.users.User(self, headers, elem) for elem in data]    
    
    def get_user(self, username = None):
        """
        :calls: GET /users/:username or GET /user
        :param username: string
        :rtype: :class:`chisubmit.client.users.User`
        """
        assert isinstance(username, (str, unicode)) or username is None, username
        
        if username is None:
            headers, data = self._requester.request(
                "GET",
                "/user"
            )            
        else:        
            headers, data = self._requester.request(
                "GET",
                "/users/" + username
            )
        return chisubmit.client.users.User(self, headers, data)
    
    def get_user_token(self, username = None, reset=False):
        """
        :calls: GET /users/:username/token or GET /user/token
        :param username: string
        :rtype: token: string, created: bool
        """
        assert isinstance(username, (str, unicode)) or username is None, username
        
        if reset:
            params = {"reset":"true"}
        else:
            params = {}
        
        if username is None:
            headers, data = self._requester.request(
                "GET",
                "/user/token",
                params = params
            )            
        else:        
            headers, data = self._requester.request(
                "GET",
                "/users/" + username + "/token",
                params = params
            )
        
        return data["token"], data["new"]    
    
    def create_user(self, username, first_name, last_name, email):
        """
        :calls: POST /users/
        :param username: string
        :param first_name: string
        :param last_name: string
        :param email: string
        :rtype: :class:`chisubmit.client.users.User`
        """
        assert isinstance(username, (str, unicode)), username
        
        post_data = {"username": username,
                     "first_name": first_name,
                     "last_name": last_name,
                     "email": email}
        
        headers, data = self._requester.request(
            "POST",
            "/users/",
            data = post_data
        )
        return chisubmit.client.users.User(self, headers, data)