def trace_rigths_compilation(self, cursor, uid, member, start, stop, fare, period, context=None): """ Helper function to show data related to computation of available rights. """ print "Dropping results for", member, start, stop, fare, period investment = InvestmentProvider(self, cursor, uid, context) memberActiveShares = MemberSharesCurve(investment) rightsPerShare = RightsPerShare(mdbpool.get_db()) remainders = RemainderProvider(self, cursor, uid, context) generatedRights = MemberRightsCurve( activeShares=memberActiveShares, rightsPerShare=rightsPerShare, remainders=remainders, eager=True, ) rightsUsage = MemberRightsUsage(mdbpool.get_db()) holidays = HolidaysProvider(self, cursor, uid, context) farePeriod = FarePeriodCurve(holidays) print 'remainders', remainders.lastRemainders() print 'investment', investment.effectiveInvestments( start=isodate(start), end=isodate(stop), member=member) print 'active', memberActiveShares.hourly( isodate(start), isodate(stop), member) for nshares in set(memberActiveShares.hourly( isodate(start), isodate(stop), member)): print 'rightsPerShare', nshares, rightsPerShare.rightsPerShare(nshares, isodate(start), isodate(stop), ) print 'rights', generatedRights.rights_kwh(member, isodate(start), isodate(stop), ) print 'periodmask', farePeriod.periodMask( fare, period, isodate(start), isodate(stop), )
def fillMeasurementPoint(self, cursor, uid, pointTime, name, value, context=None): curveProvider = MongoTimeCurve(mdbpool.get_db(), 'generationkwh.production.measurement') curveProvider.fillPoint( datetime=toLocal(asUtc(naiveisodatetime(pointTime))), name=name, ae=value)
def rights_per_share(self, cursor, uid, nshares, firstDate, lastDate, context=None): rights = RightsPerShare(mdbpool.get_db()) return list(int(i) for i in rights.rightsPerShare(nshares, isodate(firstDate), isodate(lastDate) ))
def memberrightsusage_update(self, cursor, uid, member,start,data, context=None): usage_provider = MemberRightsUsage(mdbpool.get_db()) usage_provider.updateUsage( member=member, start=isodate(start), data=data )
def usage(self, cursor, uid, member_id, first_date, last_date, context=None): rightsUsage = MemberRightsUsage(mdbpool.get_db()) result = list(int(i) for i in rightsUsage.usage( member_id, isodate(first_date), isodate(last_date) )) return result
def setup_rights_per_share(self, cursor, uid, nshares, firstDate, data, context=None): rightsPerShare = RightsPerShare(mdbpool.get_db()) rightsPerShare.updateRightsPerShare(nshares, isodate(firstDate), data) remainders = RemainderProvider(self, cursor, uid, context) lastDate = isodate(firstDate) + datetime.timedelta(days=(len(data)+24)%25) remainders.updateRemainders([ (nshares, isodate(firstDate), 0), (nshares, lastDate, 0), ])
def _createTracker(self, cursor, uid, context): investments = InvestmentProvider(self, cursor, uid, context) memberActiveShares = MemberSharesCurve(investments) rightsPerShare = RightsPerShare(mdbpool.get_db()) remainders = RemainderProvider(self, cursor, uid, context) generatedRights = MemberRightsCurve( activeShares=memberActiveShares, rightsPerShare=rightsPerShare, remainders=remainders, eager=True, ) rightsUsage = MemberRightsUsage(mdbpool.get_db()) holidays = HolidaysProvider(self, cursor, uid, context) farePeriod = FarePeriodCurve(holidays) return UsageTracker(generatedRights, rightsUsage, farePeriod)
def _createProductionLoader(self, cursor, uid, pid, context): production = ProductionAggregatorProvider(self, cursor, uid, pid, context) nshares = production.getNshares(pid) shares = PlantSharesCurve(nshares) rights = RightsPerShare(mdbpool.get_db()) remainders = RemainderProvider(self, cursor, uid, context) return ProductionLoader( productionAggregator=production, plantShareCurver=shares, rightsPerShare=rights, remainders=remainders)
def rights_kwh(self, cursor, uid, member, start, stop, context=None): investment = InvestmentProvider(self, cursor, uid, context) memberActiveShares = MemberSharesCurve(investment) rightsPerShare = RightsPerShare(mdbpool.get_db()) remainders = RemainderProvider(self, cursor, uid, context) generatedRights = MemberRightsCurve( activeShares=memberActiveShares, rightsPerShare=rightsPerShare, remainders=remainders, eager=True, ) return [ int(num) for num in generatedRights.rights_kwh(member, isodate(start), isodate(stop), )]
def _createAggregator(self, aggr, args): def obj_to_dict(obj, attrs): return {attr: getattr(obj, attr) for attr in attrs} curveProvider = MongoTimeCurve(mdbpool.get_db(), 'generationkwh.production.measurement') # TODO: Clean initialization method return ProductionAggregator(**dict(obj_to_dict(aggr, args).items() + dict(plants=[ProductionPlant(**dict(obj_to_dict(plant, args).items() + dict(meters=[ProductionMeter( **dict(obj_to_dict(meter, args + ['uri','lastcommit']).items() + dict(curveProvider=curveProvider).items())) for meter in plant.meters if meter.enabled]).items())) for plant in aggr.plants if plant.enabled]).items()))
def assign_token(self, cursor, uid, ids, context=None): """Assign a new token to the partner """ polissa_obj = self.pool.get('giscedata.polissa') m = mdbpool.get_db() for partner in self.read(cursor, uid, ids, ['empowering_token']): m.tokens.remove({'token': partner['empowering_token']}) token = generate_token() self.write(cursor, uid, [partner['id']], {'empowering_token': token}) allowed = polissa_obj.search(cursor, uid, [ '|', ('titular.id', '=', partner['id']), ('pagador.id', '=', partner['id']) ]) if allowed: allowed = [{ 'name': x.name, 'cups': x.cups.name } for x in polissa_obj.browse(cursor, uid, allowed)] m.tokens.insert({'token': token, 'allowed_contracts': allowed}) return True
def clear_mongo_collections(self, cursor, uid, collections, context=None): for collection in collections: mdbpool.get_db().drop_collection(collection)