SkoolOS/CLI/t-git.py
2020-06-08 00:18:46 -04:00

208 lines
7.3 KiB
Python

import subprocess
import os
import requests
#git clone student directory ==> <student-id>/classes/assignments
'''
{
"url": "http://127.0.0.1:8000/teachers/eharris1/",
"first_name": "Errin",
"last_name": "Harris",
"classes": [
{
"url": "http://127.0.0.1:8000/classes/1/",
"name": "Math5",
"assignments": [
{
"name": "Week1_HW",
"due_date": "2020-06-07T07:46:30.537197Z",
"url": "http://127.0.0.1:8000/assignments/1/",
"files": [
{
"name": "instructions.txt"
}
]
},
{
"name": "Week2_HW",
"due_date": "2020-06-07T07:46:30.548596Z",
"url": "http://127.0.0.1:8000/assignments/2/",
"files": [
{
"name": "instructions.txt"
}
]
}
],
"repo": ""
}
],
"git": "therealraffi",
"ion_user": "eharris1"
},
'''
#get teacher info from api
def getData(ion_user):
URL = "http://127.0.0.1:8000/students/" + ion_user + "/"
r = requests.get(url = URL, auth=('student','_$YFE#34.9_37jr'))
if(r.status_code == 200):
data = r.json()
return data
elif(r.status_code == 404):
return None
print("Make new account!")
elif(r.status_code == 403):
return None
print("Invalid username/password")
else:
return None
print(r.status_code)
class Teacher:
def __init__(self, data):
# teacher info already stored in API
# intitialze fields after GET request
self.first_name=data['first_name']
self.last_name=data['last_name']
self.classes=data['classes']
self.git=data['git']
self.username=data['ion_user']
self.url= "http://127.0.0.1:8000/teachers/" + self.username + "/"
self.data=data
if(os.path.exists(self.username )):
print("Already synced to: " + str(self.username))
return
os.mkdir(self.username)
classes = self.classes
# make classes directory
for c in classes:
cname= c['name'] + "_" + self.username
cpath = self.username + "/" + cname
if(os.path.exists(cpath)):
print(cpath + " already exists...")
else:
#make class directory
os.mkdir(cpath)
#make default files for each class
for filename in c['default_file']:
f=open(cpath+"/"+filename, "w")
f.close()
#make assignments directory
for a in c['assignments']:
path = cpath + "/" + a['name']
print(path)
if(os.path.exists(path)):
print(path + " already exists...")
else:
os.mkdir(path)
f=open(path + "/README.md", "w")
f.close()
#push to remote repo
os.chdir(cpath)
process = subprocess.Popen(['git', 'init'], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
process = subprocess.Popen(['git', 'add', '.'], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
process = subprocess.Popen(['git', 'commit', '-m', "Hello Class!"], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
#git remote add origin git@github.com:alexpchin/<reponame>.git
process = subprocess.Popen(['git', 'remote', 'add', "origin", "git@github.com:" + self.git + "/" + cname + ".git"], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
process = subprocess.Popen(['git', 'push', '-u', 'origin','master'], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
#update API and Github
def update(self):
data = {
"url": self.url,
"first_name": self.first_name,
"last_name": self.first_name,
"classes": self.classes,
"git": self.git,
"ion_user": self.username
},
r = requests.put(url = self.url, data= data, headers={'Content-type': 'application/json'} ,auth=('raffukhondaker','hackgroup1'))
def command(self, command):
ar = []
command = command.split(" ")
for c in command:
ar.append(c)
process = subprocess.Popen(ar, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.wait()
#class name format: <course-name>_<ion_user>
#turn existing directory into class
def addClas(self, path):
cname = path.split("/")
if(os.path.exists(cname)):
print("Already synced to: " + str(self.username))
return
#make a new class from scratch
def makeClass(self, subject):
cname = subject + "_" + self.username
os.chdir(self.username)
#check if class exists
if(os.path.exists(cname)):
print("Already synced to: " + str(self.username))
return
else:
os.mkdir(cname)
f=open(cname + "/README.md", "w")
f.close()
#push to remote repo
os.chdir(cname)
command(self, 'git init')
command(self, 'git add .')
command(self, 'git commit -m "Hello Class!"')
#git remote add origin git@github.com:alexpchin/<reponame>.git
command(self, 'git remote add origin git@github.com:'+ self.git + "/" + cname + ".git")
command(self, 'git push -u origin master')
cinfo=[
{
"name":subject,
"assignments":[],
"repo": "https://github.com:" + self.git + "/" + cname + ".git",
"default_file": [
{
"name":"README.md"
}
]
}
]
#update rest API
self.classes.append(cinfo)
update(self)
def addAsignment(self, class_name, name):
os.chdir(self.username+"/")
#make student repo by student id
def addStudent(stid, teacher):
os.mkdir(stid)
os.chdir(os.getcwd() + "/" + stid)
process = subprocess.Popen(['git', 'init'], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.communicate()
process = subprocess.Popen(['git', 'add', '.'], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.communicate()
process = subprocess.Popen(['git', 'commit', '-m', "First Commit"], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
process.communicate()
def updateAssignment(name):
print(name)
def comment(filename, text):
print(text)