himanshu208

Untitled

Oct 24th, 2018
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.18 KB | None | 0 0
  1. # how to run file > python3 manage.py generatedata -un 2 -an 4 -s 6 -y 2018
  2. # 2- number of units
  3. # 4 - number of assignments in each unit
  4. # 6 - seed
  5. # 2018 -year
  6.  
  7. import random
  8. import sys
  9. from django.core.management.base import BaseCommand, CommandError, CommandParser
  10. from decentmark.models import Unit,Assignment,Submission,UnitUsers
  11. from datetime import date,timedelta
  12. import datetime
  13. from django.contrib.auth.models import User
  14. from django.utils import timezone
  15. import sys
  16. import warnings
  17.  
  18. if not sys.warnoptions:
  19. warnings.simplefilter("ignore")
  20.  
  21.  
  22. users = User.objects.all()
  23. feedback = ['Wrong', 'Partially correct', 'Incomplete', 'Complete', 'Correct', "Excellent"]
  24.  
  25. def next_weekday(d, weekday):
  26. days_ahead = weekday - d.weekday()
  27. if days_ahead <= 0: # Target day already happened this week
  28. days_ahead += 7
  29. return d + datetime.timedelta(days_ahead)
  30.  
  31. class Command(BaseCommand):
  32. help = 'Generate/regenerate unit with random content'
  33.  
  34. def add_arguments(self, parser: CommandParser):
  35. parser.add_argument('-un', '--unit-number', type=str, required=True,
  36. help="Number of units generated",dest="un")
  37. parser.add_argument('-an', '--assignment-number', type=str, required=True,
  38. help="Number of assignment generated",dest="an")
  39. parser.add_argument('-s', '--seed', type=str, required=True,
  40. help="seed for random data",dest="seed")
  41. parser.add_argument('-y', '--year', type=int, required=True,
  42. help="Number of submission generated",dest="year")
  43.  
  44. def handle(self, *args, **options):
  45. # print(date.today())
  46. # Generate a random seed (Source: https://stackoverflow.com/a/5012617)
  47. un = int(options['un'])
  48. an = int(options['an'])
  49. seed = int(options['seed'])
  50. year = int(options['year'])
  51. #create units
  52. d = datetime.date(year, 1, 1)
  53. unit_start = next_weekday(d, 0)
  54. unit_end = unit_start + timedelta(days=30)
  55. unit_end = next_weekday(unit_end, 4)
  56. random.seed(seed)
  57. print("seed is "+str(seed))
  58. for x in range(0,un):
  59. unit_end = unit_start + timedelta(days=30)
  60. unit_end = next_weekday(unit_end, 4)
  61. random.seed(seed)
  62. unit = Unit.objects.create(
  63. name = "Unit "+ str(x+1),
  64. description="Description about the Unit",
  65. start = unit_start,
  66. end = unit_end + timedelta(days=30),
  67. deleted = 0
  68. )
  69. unit.save()
  70. print("Unit:"+str(unit.name))
  71. usernumber = 0
  72. #make a user teacher
  73. unituser = UnitUsers.objects.create(
  74. unit = unit,
  75. user = users[usernumber],
  76. create = True,
  77. mark = False,
  78. submit = False
  79. )
  80. unituser.save()
  81. random.seed(seed)
  82. #create assignments with user teacher
  83. assignment_start = unit_start
  84. assignment_end = next_weekday(unit_start,4)
  85. for y in range(0,an):
  86. assignment = Assignment.objects.create(
  87. unit = unit,
  88. name = "Assignment" + str(y+1),
  89. start = assignment_start,
  90. end = assignment_end,
  91. description="Description about the Assignment",
  92. total = 100,
  93. test = "random test here! ",
  94. solution = "random solution here! ",
  95. template = "random template here! ",
  96. deleted = False
  97. )
  98. assignment.save()
  99. print("Assignment:"+str(assignment.name))
  100. assignment_start = next_weekday(assignment_start,0)
  101. assignment_end = next_weekday(assignment_start,4)
  102. usernumber = usernumber+1
  103. #assign 2 marker users for the unit
  104. for x in range(0,2):
  105. unituser = UnitUsers.objects.create(
  106. unit = unit,
  107. user = users[usernumber],
  108. create = False,
  109. mark = True,
  110. submit = False
  111. )
  112. unituser.save()
  113. usernumber = usernumber+1
  114. temp_user = usernumber
  115. print("User:"+str(users[usernumber])+"created to mark this unit")
  116. random.seed(seed)
  117. assignment_start = date.today() +timedelta(days=int(10*(random.random())))
  118. #assign 10 student users for the unit
  119. for x in range(0,9):
  120. unituser = UnitUsers.objects.create(
  121. unit = unit,
  122. user = users[usernumber],
  123. create = False,
  124. mark = False,
  125. submit = True
  126. )
  127. unituser.save()
  128. assignmentcount = Assignment.objects.all().filter(unit=unit).count()
  129. assignments = Assignment.objects.all().filter(unit=unit)
  130. for xy in range (0,assignmentcount):
  131. sn = random.randint(0,5)
  132. submission_date = assignments[xy].start +timedelta(days=random.randint(0,5))
  133. for x in range(0,sn):
  134. submission = Submission.objects.create(
  135. user = users[usernumber],
  136. assignment = assignments[xy],
  137. date = submission_date,
  138. mark = random.randrange(0, 100),
  139. feedback = random.choice(feedback)
  140. )
  141. #some random strings
  142. submission.save()
  143. print("Submission: "+str(submission)+ "Assignment"+str(assignments[xy])+ "User:"+str(users[usernumber])+ "Submission Number"+str(sn))
  144. usernumber = usernumber+1
  145. unit_start = unit_end
  146. unit_start = next_weekday(unit_start, 0)
Add Comment
Please, Sign In to add comment