def handle(self, *args, **options): logger.setLevel(logging.INFO) handler = logging.StreamHandler() handler.setLevel(logging.INFO) logger.addHandler(handler) formatter = logging.Formatter('%(levelname)s: %(name)s: %(message)s') handler.setFormatter(formatter) f = open(options['data_file'], 'rb') measurements = [] unrecognised_units = set() for line in f: datum = json.loads(line) datetime = date_parser.parse(datum[0]) sensor = datum[2] if sensor == {}: continue if '@' not in sensor: logger.warning('sensor_id not found in: {}'.format(line)) sensor_id = sensor['@'] loop_id = sensor['+'] if '+' in sensor else None for key, val in sensor.iteritems(): if key in ['@', '+']: continue split = key.split('|') measurement_type = split[0] units = split[1] if len(split) == 2 else None measurement = Measurement( **{ 'datetime': datetime, 'sensor_id': sensor_id, 'loop_id': loop_id, 'type': measurement_type, 'units': units, 'val': val, 'val_converted': convert_units(val, units) }) if measurement.val_converted == None: unrecognised_units.add(units) measurements.append(measurement) # measurement.save() logger.info('measurements: {}'.format(len(measurements))) logger.info('measurements[:10]: {}'.format(measurements[:10])) logger.info('unrecognised_units: {}'.format(unrecognised_units)) for i, measurement in enumerate(measurements): # print i, # sys.stdout.flush() try: measurement.save() except IntegrityError as e: logger.error(e)
def do(self): with open(os.path.join(DATA_DIR, 'waterData.json')) as data_file: waterData = json.load(data_file) waterData = scripts.byteify(waterData) print waterData for body in waterData: measurement = Measurement(value=body['value'], measured_at=body['dateTime'], body_id=int(body['id'])) try: measurement.save() except: print "there was a problem saving the measurement"
def handle(self, *args, **options): logger.setLevel(logging.INFO) handler = logging.StreamHandler() handler.setLevel(logging.INFO) logger.addHandler(handler) formatter = logging.Formatter('%(levelname)s: %(name)s: %(message)s') handler.setFormatter(formatter) f = open(options['data_file'], 'rb') measurements = [] unrecognised_units = set() for line in f: datum = json.loads(line) datetime = date_parser.parse(datum[0]) sensor = datum[2] if sensor == {}: continue if '@' not in sensor: logger.warning('sensor_id not found in: {}'.format(line)) sensor_id = sensor['@'] loop_id = sensor['+'] if '+' in sensor else None for key, val in sensor.iteritems(): if key in ['@', '+']: continue split = key.split('|') measurement_type = split[0] units = split[1] if len(split) == 2 else None measurement = Measurement(**{ 'datetime': datetime, 'sensor_id': sensor_id, 'loop_id': loop_id, 'type': measurement_type, 'units': units, 'val': val, 'val_converted': convert_units(val, units) }) if measurement.val_converted == None: unrecognised_units.add(units) measurements.append(measurement) # measurement.save() logger.info('measurements: {}'.format(len(measurements))) logger.info('measurements[:10]: {}'.format(measurements[:10])) logger.info('unrecognised_units: {}'.format(unrecognised_units)) for i, measurement in enumerate(measurements): # print i, # sys.stdout.flush() try: measurement.save() except IntegrityError as e: logger.error(e)
def get(self, *args, **kwargs): response = HttpResponse(content_type="text/csv") response[ "Content-Disposition"] = 'attachment; filename="tabela_pomiarow.csv"' writer = csv.writer(response, delimiter="|") writer.writerow(["Tabela pomiarów ciśnienia krwi"]) writer.writerow([ "Lp.", "Ciśnienie skurczowe", "Ciśnienie rozkurczowe", "Tętno", "Data pomiaru", ]) for id, measurement in enumerate( Measurement.queryset_for_user(self, self.request.user), 1): row = [ id, measurement.systolic_pressure, measurement.diastolic_pressure, measurement.pulse, measurement.measurement_time.strftime("%H:%M %d %b %Y"), ] writer.writerow(row) return response
def pubsvn(github): u = users.objects.get(svn=github) if Group.objects.filter(name="Commit").exists(): g = Group.objects.get(name="Commit") else: Group(name="Commit").save() g = Group.objects.get(name="Commit") if Entity.objects.filter(name="Commit", group=g).exists(): en = Entity.objects.get(name="Commit") else: Entity(name="Commit", group=g).save() en = Entity.objects.get(name="Commit") r = svn.remote.RemoteClient('http://svn.apache.org/repos/asf/') entries = r.list() for filename in entries: r = svn.remote.RemoteClient('http://svn.apache.org/repos/asf/' + filename) if Project.objects.filter(name=filename).exists(): pr = Project.objects.get(name=filename) #UserParticipation(user=u, project=pr).save() else: p = Project(name=filename, description=filename) p.save() pr = Project.objects.get(name=filename) #UserParticipation(user=u, project=pr) e = r.list() for file in e: if file == "trunk/": a = svn.remote.RemoteClient('http://svn.apache.org/repos/asf/' + filename + "trunk") i = 0 for log in a.log_default(): if log[3] == github: if Measurement.objects.filter(value=log[2]).exists(): continue else: i=i+1 Activity(comments="SVN commit " + str(i) + " " + str(filename) +" " + str(github), entity=en).save() ac = Activity.objects.get(comments="SVN commit " + str(i) + " " + str(filename) +" " + str(github)) Measurement(activity=ac, type="char", name="Type", value="SVN Commit").save() Measurement(activity=ac, type='char', name="User", value=github).save() Measurement(activity=ac, type="char", name="Scommit_ID", value=log[2]).save() if log[1]: Measurement(activity=ac, type="char", name="Scommit_message", value=log[1]).save() else: Measurement(activity=ac, type="char", name="Scommit_message", value="Nothing").save() return HttpResponse("Done")
def import_weather(data_mode: DataMode, full_path_to_file: str) -> List[Measurement]: assert data_mode == DataMode.per_hour, 'Measurements per day not yet implemented' hourly_measurements = [] stations = {station.code: station for station in Station.objects.all()} with open(full_path_to_file, 'r') as f: csv_reader = csv.reader(f, delimiter=',', quotechar=None, skipinitialspace=True) for line in csv_reader: if line[0].startswith('#'): continue line = [value or None for value in line] station_code, day, hour, wind_direction, wind_speed, _, gust_of_wind, temperature, _, dew_temperature, \ sunshine, radiation, precipitation_duration, precipitation, air_pressure, visibility, cloud_cover, \ relative_humidity, _, _, mist, rain, snow, lightning, icing = line station = stations[station_code] day = datetime.strptime(day, '%Y%m%d') hourly_measurements.append( Measurement( station=station, day=day, hour=hour, time=datetime_from_day_and_hour(day, int(hour) - 1), wind_direction=Knmi._parse_number(wind_direction), wind_speed=Knmi._parse_number(wind_speed), gust_of_wind=Knmi._parse_number(gust_of_wind), temperature=Knmi._parse_number(temperature), dew_temperature=Knmi._parse_number(dew_temperature), sunshine=Knmi._parse_number(sunshine), radiation=radiation, precipitation_duration=Knmi._parse_number( precipitation_duration), precipitation=Knmi._parse_number(precipitation), air_pressure=Knmi._parse_number(air_pressure), visibility=visibility, cloud_cover=cloud_cover, relative_humidity=relative_humidity, mist=mist or False, rain=rain or False, snow=snow or False, lightning=lightning or False, icing=icing or False)) if not hourly_measurements: return [] with transaction.atomic(): Measurement.objects.all().delete() Measurement.objects.bulk_create(hourly_measurements) return hourly_measurements
def svna(github,urls): u = users.objects.get(svn=github) if Group.objects.filter(name="Commit").exists(): g = Group.objects.get(name="Commit") else: Group(name="Commit").save() g = Group.objects.get(name="Commit") if Entity.objects.filter(name="Commit", group=g).exists(): en = Entity.objects.get(name="Commit") else: Entity(name="Commit", group=g).save() en = Entity.objects.get(name="Commit") for url in urls.split(','): r = svn.remote.RemoteClient(url) info=r.info() if Project.objects.filter(name=info['entry_path']).exists(): pr = Project.objects.get(name=info['entry_path']) #UserParticipation(user=u, project=pr).save() else: p = Project(name=info['entry_path'], description=info['entry_path']) p.save() pr = Project.objects.get(name=info['entry_path']) #UserParticipation(user=u, project=pr) i=0 for log in r.log_default(): if log[3] == github: if Measurement.objects.filter(value=log[1]).exists(): continue else: i = i + 1 Activity(comments="SVN commit " + str(i) + " " + str(info['entry_path']) +" " + str(github), entity=en).save() ac = Activity.objects.get(comments="SVN commit " + str(i) + " " + str(info['entry_path']) +" " + str(github)) Measurement(activity=ac, type="char", name="Type", value="SVN Commit").save() Measurement(activity=ac, type='char', name="User", value=github).save() Measurement(activity=ac, type="char", name="Scommit_ID", value=log[2]).save() if log[1]: Measurement(activity=ac, type="char", name="Scommit_message", value=log[1]).save() else: Measurement(activity=ac, type="char", name="Scommit_message", value="Nothing").save() return HttpResponse("Done")
def add(request): if request.method == 'POST': form = AddMeasurementToDeviceForm(request.POST, user=request.user) if form.is_valid(): time = form.cleaned_data['times'] device = form.cleaned_data['devices'] measurement = form.cleaned_data['measurement'] new_measurement = Measurement(date=datetime.date.today(), value=measurement) new_measurement.time_id = time.id new_measurement.device_id = device.id new_measurement.facility_id = request.user.facilities.all()[:1].get().id new_measurement.save() return render(request, 'measurements/index.html') form = AddMeasurementToDeviceForm(user=request.user) return render(request, 'measurements/add.html', {'form': form})
def post(self, *args, **kwargs): try: userdata = UserData.objects.get(user=self.request.user) doctordata = DoctorData.objects.get(userdata=userdata) measurements = Measurement.queryset_for_user( self, self.request.user) except: messages.add_message(self.request, messages.WARNING, "Błąd pobierania danych") return redirect(reverse("homepage:index")) if send_email(self, self.request.user, userdata, doctordata, measurements): messages.add_message(self.request, messages.SUCCESS, "Pomyślnie wysłano email") else: messages.add_message(self.request, messages.WARNING, "Nie udało się wysłać wiadomości") return redirect(reverse("homepage:index"))
def handle(self, *args, **options): area_data = [[1, "Grand Canyon", 20, 30], [2, "Boca Raton", 40, 50], [3, "Kennesaw", 60, 70], [4, "Mount Hood", 80, 90], [5, "Mount Rainer", 46.5, 121.5], [6, "Saint Olaf", 44, 93], [7, "Mount St. Helens", 46, 122]] for ad in area_data: a = Area(name=ad[1], id=ad[0], longitude=ad[2], latitude=ad[3]) a.save() location_data = [ [11, "South rim", 200, 1], [12, "North rim", 300, 1], [13, "Phantom Ranch", 100, 1], [14, "Waterfront", 10, 2], [15, "Town center", 15, 2], [16, "Town center", 310, 3], [17, "University", 320, 3], [18, "Mall", 330, 3], [19, "Airport", 350, 3], [20, "South pass", 3500, 4], [21, "North rim", 4500, 4], [22, "Crater", 4000, 4], [23, "North pass", 14000, 5], [24, "South glacier", 15000, 5], [25, "Ranger station", 16000, 5], [26, "Summit", 17000, 5], [27, "Yttrboe", 250, 6], [28, "Science", 250, 6], ] no_measurements_location_ids = [23] for locd in location_data: loc = Location(id=locd[0], name=locd[1], altitude=locd[2]) a = Area.objects.get(pk=locd[3]) loc.area = a loc.save() category_data = [[ 31, "Volcanos", "Areas that are on volcanoes", [4, 5] ], [32, "East", "Areas that are in the east", [2, 3]], [33, "West", "Areas that are in the west", [1, 4, 5]], [34, "Wetlands", "Areas that are wetlands", []]] for catd in category_data: cat = Category(id=catd[0], name=catd[1], description=catd[2]) cat.save() for memb_id in catd[3]: a = Area.objects.get(pk=memb_id) cat.members.add(a) cat.save() num_meas_per_loc = 10 for locd in location_data: loc_id = locd[0] if loc_id not in no_measurements_location_ids: loc = Location.objects.get(pk=loc_id) for meas_id in range(loc_id * 100, loc_id * 100 + num_meas_per_loc): val = random.uniform(5 + loc_id * 3, 15 + loc_id * 3) meas = Measurement(value=val, id=meas_id, date=timezone.now()) meas.location = loc meas.save()
def bit(github): root = tkinter.Tk() root.withdraw() bitpassword = simpledialog.askstring("Password", "Enter Password", show='*') headers = {'Content-Type': 'application/json'} A = bitbuckted_project(github,bitpassword) u = users.objects.get(bitbucket=github) if Group.objects.filter(name="Commit").exists(): g = Group.objects.get(name="Commit") else: Group(name="Commit").save() g = Group.objects.get(name="Commit") if Group.objects.filter(name="Issue").exists(): g1 = Group.objects.get(name="Issue") else: Group(name="Issue").save() g1 = Group.objects.get(name="Issue") if Entity.objects.filter(name="Commit", group=g).exists(): e = Entity.objects.get(name="Commit") else: Entity(name="Commit", group=g).save() e = Entity.objects.get(name="Commit") if Entity.objects.filter(name="Issue", group=g1).exists(): e1 = Entity.objects.get(name="Issue") else: Entity(name="Issue", group=g1).save() e1 = Entity.objects.get(name="Issue") if Activity.objects.filter(comments="BitBucketCommit").exists(): a = Activity.objects.get(comments="BitBucketCommit") else: Activity(comments="BitBucketCommit", entity=e).save() a = Activity.objects.get(comments="BitBucketCommit") if Activity.objects.filter(comments="BitBucketissue").exists(): a1 = Activity.objects.get(comments="BitBucketissue") else: Activity(comments="BitBucketissue", entity=e1).save() a1 = Activity.objects.get(comments="BitBucketissue") message = [] count = 0 for i in A: if Project.objects.filter(name=i).exists(): pr = Project.objects.get(name=i) #UserParticipation(user=u, project=pr).save() else: p = Project(name=i, description=i) p.save() pr = Project.objects.get(name=i) #UserParticipation(user=u, project=pr) comm, mess, date, br = bitbuckted_commit(github,bitpassword) r = requests.get("https://api.bitbucket.org/2.0/repositories/%s" % github, auth=(github, bitpassword), headers=headers) repos = json.loads(r.content) for m in repos['values']: r = requests.get("https://api.bitbucket.org/2.0/repositories/" + github + "/" + m['name'],auth=(github, bitpassword), headers=headers ) r = json.loads(r.content) if r['has_issues']: r = json.loads(requests.get(r['links']['issues']['href'],auth=(github, bitpassword), headers=headers).content) for i in r['values']: if Measurement.objects.filter(value=i['id']).exists(): continue else: Measurement(activity=a, type="char", name="BitBucketCommit_ID", value=i['id']).save() Measurement(activity=a, type="char", name="BitBucketCommit_kind", value=i['kind']).save() Measurement(activity=a, type="char", name="BitBucketCommit_name", value=i['repository']['name']).save() Measurement(activity=a, type="char", name="BitBucketCommit_priority", value=i['priority']).save() Measurement(activity=a, type="char", name="BitBucketCommit_title", value=i['title']).save() for i in range(len(comm)): if Measurement.objects.filter(value=comm[i]).exists(): continue else: da = date[i].split("T")[0] t = date[i].split("T")[1].split('+')[0] da = datetime.datetime.strptime(da, '%Y-%m-%d').strftime('%A') if 6 <= int(t.split(":")[0]) and int(t.split(":")[0]) < 12: time = 1 elif 12 <= int(t.split(":")[0]) and int(t.split(":")[0]) < 18: time = 2 elif 18 <= int(t.split(":")[0]) and int(t.split(":")[0]) < 24: time = 3 elif 0 <= int(t.split(":")[0]) and int(t.split(":")[0]) < 6: time = 4 da = Day(da) Measurement(activity=a, type="char", name="BitBucketCommit_ID", value=comm[i]).save() Measurement(activity=a, type="char", name="BitBucketCommit_Day", value=da).save() Measurement(activity=a, type="char", name="BitBucketCommit_Time", value=t).save() Measurement(activity=a, type="char", name="BitBucketCommit_branch", value=br[i]).save() Measurement(activity=a, type="char", name="BitBucketCommit_message", value=mess[i]).save() return HttpResponse(str("Done"))
def git(github): u = users.objects.get(githubid=github) root = tkinter.Tk() root.withdraw() access = simpledialog.askstring("Accesstoken", "Accesstoken") if Group.objects.filter(name="Commit").exists(): g = Group.objects.get(name="Commit") else: Group(name="Commit").save() g = Group.objects.get(name="Commit") if Group.objects.filter(name="Issue").exists(): gi = Group.objects.get(name="Issue") else: Group(name="Issue").save() gi = Group.objects.get(name="Issue") if Entity.objects.filter(name="Commit", group=g).exists(): e = Entity.objects.get(name="Commit") else: Entity(name="Commit", group=g).save() e = Entity.objects.get(name="Commit") if Entity.objects.filter(name="Issue", group=gi).exists(): ei = Entity.objects.get(name="Issue") else: Entity(name="Issue", group=gi).save() ei = Entity.objects.get(name="Issue") for repo in count_user_commits(access): if Project.objects.filter(name=repo['name']).exists(): pr = Project.objects.get(name=repo['name']) #UserParticipation(user=u, project=pr).save() else: p = Project(name=repo['name'], description=repo['name']) p.save() pr = Project.objects.get(name=repo['name']) #UserParticipation(user=u, project=pr) r = json.loads(requests.get(repo['commits_url'][:-6]+'?access_token=%s' % access).content) r1 = json.loads(requests.get(repo['issue_comment_url'][:-9]+'?access_token=%s' % access).content) for k in range(0, len(r1)): if Measurement.objects.filter(value=r[i]['id']).exists(): continue else: Activity(comments="Git Issue " + str(k) + " " + str(repo['name']), entity=ei).save() a = Activity.objects.get(comments="Git Issue " + str(i) + " " + str(repo['name'])) Measurement(activity=a, type="char", name="Type", value="Git Issue").save() Measurement(activity=a, type="char", name="GIssue_ID", value=r[i]['id']).save() Measurement(activity=a, type="char", name="GIssue_ID", value=r[i]['body']).save() for i in range(0, len(r)): if Measurement.objects.filter(value=r[i]['sha']).exists(): continue else: Activity(comments="Git commit " + str(i) + " " + str(repo['name']) + " " + str(github), entity=e).save() a = Activity.objects.get(comments="Git commit " + str(i) + " " + str(repo['name']) +" " + str(github)) rr = requests.get(r[i]['url']+'?access_token=%s' % access) rr = json.loads(rr.content) d = rr['stats']['deletions'] l = rr['stats']['additions'] no = len(rr['files']) date = rr['commit']['committer']['date'].split("T")[0] t = rr['commit']['committer']['date'].split("T")[1][:-1] day = datetime.datetime.strptime(date, '%Y-%m-%d').strftime('%A') if 6 <= int(t.split(":")[0]) and int(t.split(":")[0]) < 12: time = 1 elif 12 <= int(t.split(":")[0]) and int(t.split(":")[0]) < 18: time = 2 elif 18 <= int(t.split(":")[0]) and int(t.split(":")[0]) < 24: time = 3 elif 0 <= int(t.split(":")[0]) and int(t.split(":")[0]) < 6: time = 4 da = Day(day) Measurement(activity=a, type="char", name="Type", value="Git Commit").save() Measurement(activity=a, type='char', name="User", value=github).save() Measurement(activity=a, type="char", name="Gcommit_ID", value=r[i]['sha']).save() Measurement(activity=a, type="char", name="Gcommit_deletions", value=d).save() Measurement(activity=a, type="char", name="Gcommit_addition", value=l).save() Measurement(activity=a, type="char", name="Gcommit_nooffiles", value=no).save() Measurement(activity=a, type="char", name="Gcommit_timelabel", value=time).save() Measurement(activity=a, type="char", name="Gcommit_daylabel", value=da).save() Measurement(activity=a, type="char", name="Gcommit_message", value=re.sub('\n', ' ', r[i]['commit']['message']).encode('utf-8', 'ignore')).save() return HttpResponse("Done")
def handle(self, *args, **options): area_data = [ [1, "Grand Canyon", 20, 30], [2, "Boca Raton", 40, 50], [3, "Kennesaw", 60, 70], [4, "Mount Hood", 80, 90], [5, "Mount Rainer", 46.5, 121.5], [6, "Saint Olaf", 44, 93], [7, "Mount St. Helens", 46, 122] ] for ad in area_data: a = Area(name=ad[1], id=ad[0], longitude=ad[2], latitude=ad[3]) a.save() location_data = [ [11, "South rim", 200, 1], [12, "North rim", 300, 1], [13, "Phantom Ranch", 100, 1], [14, "Waterfront", 10, 2], [15, "Town center", 15, 2], [16, "Town center", 310, 3], [17, "University", 320, 3], [18, "Mall", 330, 3], [19, "Airport", 350, 3], [20, "South pass", 3500, 4], [21, "North rim", 4500, 4], [22, "Crater", 4000, 4], [23, "North pass", 14000, 5], [24, "South glacier", 15000, 5], [25, "Ranger station", 16000, 5], [26, "Summit", 17000, 5], [27, "Yttrboe", 250, 6], [28, "Science", 250, 6], ] no_measurements_location_ids = [23] for locd in location_data: loc = Location(id=locd[0], name=locd[1], altitude=locd[2]) a = Area.objects.get(pk=locd[3]) loc.area = a loc.save() category_data = [ [31, "Volcanos", "Areas that are on volcanoes", [4, 5]], [32, "East", "Areas that are in the east", [2, 3]], [33, "West", "Areas that are in the west", [1, 4, 5]], [34, "Wetlands", "Areas that are wetlands", []] ] for catd in category_data: cat = Category(id=catd[0], name=catd[1], description=catd[2]) cat.save() for memb_id in catd[3]: a = Area.objects.get(pk=memb_id) cat.members.add(a) cat.save() num_meas_per_loc = 10 for locd in location_data: loc_id = locd[0] if loc_id not in no_measurements_location_ids: loc = Location.objects.get(pk=loc_id) for meas_id in range(loc_id*100, loc_id*100+num_meas_per_loc): val = random.uniform(5+loc_id*3, 15+loc_id*3) meas = Measurement(value=val, id=meas_id, date=timezone.now()) meas.location = loc meas.save()
def add_test_examples(user_id): """ Creates test activities, measurements and metric examples in default project for user. If the user already has such activities then does nothing. :param user_id: user id """ example_activity = "Test Activity Example" test_examples = Activity.objects.filter(entity__name=example_activity, participation__user=user_id) if test_examples.count() == 0: with transaction.atomic(): part = UserParticipation.objects.get(user=user_id, project=None) e, created = Entity.objects.get_or_create(name=example_activity) # activities for 10 days for i in range(10): cur_day_timestamp = int(time.time() / DAY_SEC - i) * DAY_SEC # ten activities per day for j in range(10): a = Activity(participation=part, entity=e) a.save() start_time = cur_day_timestamp + rnd.randint( 9 * 60 * 60, 18 * 60 * 60) end_time = start_time + rnd.randint(60 * 60, 2 * 60 * 60) Measurement(type='int', name='int property 1', value=str(rnd.randint(0, 100)), activity=a).save() Measurement(type='int', name='int property 2', value=str(rnd.randint(0, 100)), activity=a).save() Measurement(type='long', name='start time', value=str(start_time * 1000), activity=a).save() Measurement(type='long', name='end time', value=str(end_time * 1000), activity=a).save() p1 = Metric(name='Tst activity prop 1', type=Metric.RAW, participation=part, info={ "field": "int property 1", "filters": {}, "activity": example_activity }) p2 = Metric(name='Tst activity prop 2', type=Metric.RAW, participation=part, info={ "field": "int property 2", "filters": {}, "activity": example_activity }) p1.save() p2.save() c1 = Metric(name='Tst props diff', type=Metric.COMPOSITE, participation=part, info={ "bounds": {}, "groupby": {}, "aggregate": "minus", "components": [p1.id, p2.id], "gqm": { "gqm_goal": "Show activity difference", "gqm_question": "What is difference per activity?" } }) c2 = Metric(name='Tst diff by day', type=Metric.COMPOSITE, participation=part, info={ "bounds": { "lower": 20, "upper": 80 }, "gqm": { "gqm_goal": "Show activity difference", "gqm_question": "How much per day?" }, "groupby": { "group_func": "sum", "group_type": "day", "group_timefield": "start time" }, "aggregate": "minus", "components": [p1.id, p2.id] }) c3 = Metric(name='Tst diff by 3 days', type=Metric.COMPOSITE, participation=part, info={ "bounds": {}, "groupby": { "group_func": "sum", "group_type": "3_days", "group_timefield": "start time" }, "aggregate": "minus", "components": [p1.id, p2.id] }) c1.save() c2.save() c3.save() c4 = Metric(name='Tst diff mult', type=Metric.COMPOSITE, participation=part, info={ "bounds": { "lower": 0, "upper": 1000000 }, "groupby": {}, "aggregate": "mult", "components": [c2.id, c2.id], "gqm": { "gqm_goal": "Show activity difference", "gqm_question": "What is difference per activity?" } }) c5 = Metric(name='Tst one', type=Metric.COMPOSITE, participation=part, info={ "bounds": { "lower": 0, "upper": 2 }, "groupby": {}, "aggregate": "div", "gqm": { "gqm_goal": "Show positive values", "gqm_question": "Is it equal to one?" }, "components": [c2.id, c2.id] }) c4.save() c5.save()
def get_context_data(self, **kwargs): measurements = Measurement.queryset_for_user(self, self.request.user) return super(GeneratePDFView, self).get_context_data(pagesize="A4", measurements=measurements)