Added fake/testing data generation
This commit is contained in:
		
							parent
							
								
									b209344e87
								
							
						
					
					
						commit
						065461300d
					
				
					 7 changed files with 109 additions and 5 deletions
				
			
		|  | @ -41,6 +41,9 @@ Make commands | |||
|   enhanced compared to `./manage.py runserver`. | ||||
|   Open [127.0.0.1:8000](127.0.0.1:8000). | ||||
| 
 | ||||
| * `./manage.py testdata` - create pseudo-random seminar data and admin/admin | ||||
|   user. | ||||
| 
 | ||||
| * `./manage.py test` - run the tests. | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ class SkolaAdmin(admin.ModelAdmin): | |||
|         (u'Interní ID',     {'fields': ['aesop_id', 'izo'], 'classes': ['collapse']}), | ||||
|         (u'Adresa',         {'fields': ['ulice', 'mesto', 'psc', 'stat']}), | ||||
|         ] | ||||
|     list_display = ['nazev', 'aesop_id', 'mesto'] | ||||
|     list_display = ['nazev', 'aesop_id', 'mesto', 'ulice', 'stat'] | ||||
|     search_fields = ['nazev', 'mesto', 'ulice'] | ||||
| 
 | ||||
| admin.site.register(Skola, SkolaAdmin) | ||||
|  | @ -93,7 +93,7 @@ class ReseniAdmin(admin.ModelAdmin): | |||
|         (None,              {'fields': ['problem', 'resitel', 'body', 'cislo_body', 'timestamp']}), | ||||
|         ] | ||||
|     list_display = ['problem', 'resitel', 'body', 'timestamp'] | ||||
|     list_filter = ['problem', 'resitel', 'body', 'timestamp'] | ||||
|     list_filter = ['body', 'timestamp'] | ||||
|     search_fields = [] | ||||
|     inlines = [PrilohaReseniInline] | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										0
									
								
								seminar/management/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								seminar/management/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										
											BIN
										
									
								
								seminar/management/commands/.testdata.py.swp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								seminar/management/commands/.testdata.py.swp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								seminar/management/commands/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								seminar/management/commands/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										99
									
								
								seminar/management/commands/testdata.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								seminar/management/commands/testdata.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,99 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import datetime | ||||
| import os | ||||
| import random | ||||
| 
 | ||||
| from django.core.management.base import NoArgsCommand | ||||
| from django.core.management import call_command | ||||
| from django.conf import settings | ||||
| 
 | ||||
| class Command(NoArgsCommand): | ||||
|     help = "Clear database and load testing data." | ||||
| 
 | ||||
|     def handle_noargs(self, **options): | ||||
|         assert settings.DEBUG == True | ||||
|         dbfile = settings.DATABASES['default']['NAME'] | ||||
|         if os.path.exists(dbfile): | ||||
|             os.rename(dbfile, dbfile + '.old') | ||||
|             self.stderr.write('Stara databaze prejmenovana na "%s"' % (dbfile + '.old')) | ||||
|         call_command('migrate', noinput=True) | ||||
|         self.load_testing_data() | ||||
| 
 | ||||
|     def load_testing_data(self): | ||||
|         from seminar import models as sm | ||||
|         import django.contrib.auth | ||||
|         User = django.contrib.auth.get_user_model() | ||||
| 
 | ||||
|         self.stderr.write('Vytvarim uzivatele "admin" (heslo "admin")') | ||||
| 
 | ||||
|         # pevna pseudo-nahodnost | ||||
|         rnd = random.Random(x=42) | ||||
| 
 | ||||
|         # users | ||||
|         admin = User.objects.create_superuser(username='admin', email='', password='admin') | ||||
| 
 | ||||
|         self.stderr.write('Vytvarim pseudo-nahodna data') | ||||
| 
 | ||||
|         orgs = [] | ||||
|         for org in ['anet', 'bara', 'cyril', 'david', 'eva', 'filip']: | ||||
|             o = User.objects.create_user(username=org, password=org) | ||||
|             o.first_name = org.capitalize() | ||||
|             o.save() | ||||
|             orgs.append(o) | ||||
| 
 | ||||
|         # skoly | ||||
|         sm.Skola.objects.create(mesto = u'Praha', stat='CZ', psc='101 00', ulice=u'Krátká 5', nazev=u'První SŠ') | ||||
|         sm.Skola.objects.create(mesto = u'Praha', stat='CZ', psc='102 00', ulice=u'Dlouhá 5', nazev=u'Druhá SŠ') | ||||
|         sm.Skola.objects.create(mesto = u'Praha', stat='CZ', psc='103 00', ulice=u'Široká 3', nazev=u'Třetí SŠ') | ||||
|         sm.Skola.objects.create(mesto = u'Ostrava', stat='CZ', psc='700 00', ulice=u'Hluboká 42', nazev=u'Hutní gympl') | ||||
|         sm.Skola.objects.create(mesto = u'Humenné', stat='SK', psc='012 34', ulice=u'Pltká 1', nazev=u'Sredná škuola') | ||||
| 
 | ||||
|         # resitele | ||||
|         for i in range(20): | ||||
|             skola = rnd.choice(sm.Skola.objects.all()) | ||||
|             pohlavi = rnd.randint(0,1) | ||||
|             sm.Resitel.objects.create(skola = skola, datum_prihlaseni = datetime.date(rnd.randint(2002, 2014), rnd.randint(1,12), 1), | ||||
|                     jmeno = u'Řešitel' if pohlavi else u'Řešitelka', prijmeni = 'Číslo-%s' % (i), rok_maturity = rnd.randint(2015, 2019), | ||||
|                     stat = skola.stat, zasilat = sm.Resitel.ZASILAT_NIKAM, pohlavi_muz = pohlavi) | ||||
| 
 | ||||
|         # rocniky | ||||
|         for ri in range(17, 22): | ||||
|             r = sm.Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri) | ||||
| 
 | ||||
|             # cisla | ||||
|             cisel = rnd.randint(4, 6) | ||||
|             cs = {} | ||||
|             for ci in range(1, cisel + 1): | ||||
|                 vydano = datetime.date(r.prvni_rok, ci + 6, 1) | ||||
|                 deadline = datetime.date(r.prvni_rok, ci + 8, 1) if ci + 2 < cisel else None | ||||
|                 c = sm.Cislo.objects.create(rocnik = r, cislo = str(ci), datum_vydani=vydano, datum_deadline=deadline) | ||||
|                 cs[ci] = c | ||||
| 
 | ||||
|                 # problemy resene v ci | ||||
|                 seq='#ABCDEFGHIJKLMNOPQRSTUVWXYZ' | ||||
|                 if ci >= 3: | ||||
|                     for pi in range(1, 4): | ||||
|                         p = sm.Problem.objects.create(autor = rnd.choice(orgs), cislo_zadani=cs[ci-2], cislo_reseni=cs[ci], | ||||
|                                 opravovatel = rnd.choice(orgs), kod = str(pi), nazev = u'Dummy úloha %s-%s' % (seq[ci], seq[pi]), | ||||
|                                 stav = sm.Problem.STAV_ZADANY, typ = sm.Problem.TYP_ULOHA, body = rnd.randint(1, 5)) | ||||
| 
 | ||||
|                         for resi in range(rnd.randint(0, 7)): | ||||
|                             res = sm.Reseni.objects.create(problem = p, resitel = rnd.choice(sm.Resitel.objects.all()), | ||||
|                                     body = rnd.randint(0, p.body), cislo_body = cs[ci]) | ||||
| 
 | ||||
|         nastaveni = sm.Nastaveni.objects.create(aktualni_rocnik = sm.Rocnik.objects.last(), | ||||
|                 aktualni_cislo = sm.Cislo.objects.last()) | ||||
| 
 | ||||
|         self.stderr.write('Vytvoreno %d uzivatelu, %d skol, %d resitelu, %d rocniku, %d cisel, %d problemu, %d reseni.' % | ||||
|                 (User.objects.count(), sm.Skola.objects.count(), sm.Resitel.objects.count(), sm.Rocnik.objects.count(), | ||||
|                 sm.Cislo.objects.count(), sm.Problem.objects.count(), sm.Reseni.objects.count())) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -56,7 +56,7 @@ class Skola(models.Model): | |||
| 
 | ||||
|     # ISO 3166-1 dvojznakovy kod zeme velkym pismem (CZ, SK) | ||||
|     # Ekvivalentní s CharField(max_length=2, default='CZ', ...) | ||||
|     stat = CountryField(u'kód státu', default='CZ', | ||||
|     stat = CountryField(u'stát', default='CZ', | ||||
|         help_text=u'ISO 3166-1 kód zeme velkými písmeny (CZ, SK, ...)') | ||||
| 
 | ||||
|     def __str__(self): | ||||
|  | @ -85,7 +85,7 @@ class Resitel(models.Model): | |||
|     # Pohlaví. Že ho neznáme se snad nestane (a ušetří to práci při programování) | ||||
|     pohlavi_muz = models.BooleanField(u'pohlaví (muž)', default=False) | ||||
| 
 | ||||
|     skola = models.OneToOneField(Skola, blank=True, null=True, verbose_name=u'škola') | ||||
|     skola = models.ForeignKey(Skola, blank=True, null=True, verbose_name=u'škola') | ||||
| 
 | ||||
|     # Očekávaný rok maturity a vyřazení z aktivních řešitelů | ||||
|     rok_maturity = models.IntegerField(u'rok maturity') | ||||
|  | @ -126,7 +126,7 @@ class Resitel(models.Model): | |||
| 
 | ||||
|     # ISO 3166-1 dvojznakovy kod zeme velkym pismem (CZ, SK) | ||||
|     # Ekvivalentní s CharField(max_length=2, default='CZ', ...) | ||||
|     stat = CountryField(u'kód státu', default='CZ', | ||||
|     stat = CountryField(u'stát', default='CZ', | ||||
|         help_text=u'ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)') | ||||
| 
 | ||||
|     def plne_jmeno(self): | ||||
|  | @ -242,6 +242,8 @@ class Problem(models.Model): | |||
|     cislo_reseni = models.ForeignKey(Cislo, verbose_name=u'číslo řešení', blank=True, null=True, related_name=u'resene_problemy', | ||||
|         help_text=u'Číslo s řešením úlohy, jen pro úlohy') | ||||
| 
 | ||||
|     body = models.IntegerField(u'maximum bodů', blank=True, null=True) | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return force_unicode(u'%s (%s)' % (self.nazev, self.stav)) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Tomas Gavenciak
						Tomas Gavenciak