コード例 #1
0
 def start(self):
     loop = asyncio.get_event_loop()
     try:
         client = VKAPIClient(
             loop, [TaskToUpdateCommunities, TaskToUpdateAudience])
         loop.run_until_complete(client.run())
     finally:
         Database.close()
         loop.close()
コード例 #2
0
ファイル: audience.py プロジェクト: alega19/otus-project
 def load_ordered_by_update_time(cls, min_members):
     sql = ('SELECT "vkid", "members" '
            'FROM "community" '
            'WHERE "deactivated" = FALSE '
            'AND "members" >= {0:d} '
            'ORDER BY "audience_updated" ASC').format(min_members)
     return Database().execute(sql, handler=lambda row: cls(row[0], row[1]))
コード例 #3
0
ファイル: audience.py プロジェクト: alega19/otus-project
    def save(self):
        if not self.profile2count:
            return

        with Database() as db:
            audience_params_list = []
            sql = (
                'INSERT INTO "profile" ("sex_vkid", "age_range_id", "country_vkid", "app_id") '
                'VALUES (%s, %s, %s, %s) '
                'RETURNING "id"')
            for profile, count in self.profile2count.items():
                profile_id = self._profile2id.get(profile)
                if profile_id is None:
                    params = profile.sex_vkid, profile.age_range_id, profile.country_vkid, profile.app_id
                    profile_id = db.execute(sql, params, lambda row: row[0])[0]
                    self._profile2id[profile] = profile_id
                audience_params_list.append((self.vkid, profile_id, count))

            sql = ('DELETE FROM "audience" ' 'WHERE "community_vkid" = %s')
            db.execute(sql, (self.vkid, ))
            sql = (
                'INSERT INTO "audience" ("community_vkid", "profile_id", "count") '
                'VALUES (%s, %s, %s)')
            db.executemany(sql, audience_params_list)
        logging.info('audience of community %s was saved' % self.vkid)
コード例 #4
0
ファイル: audience.py プロジェクト: alega19/otus-project
 def _load_profiles(cls):
     sql = (
         'SELECT "id", "sex_vkid", "age_range_id", "country_vkid", "app_id" '
         'FROM "profile"')
     kvpairs = Database().execute(
         sql,
         handler=lambda row:
         (Profile(row[1], row[2], row[3], row[4]), row[0]))
     cls._profile2id = dict(kvpairs)
コード例 #5
0
ファイル: audience.py プロジェクト: alega19/otus-project
 def _init_applications(cls):
     sql = ('SELECT "id", "name" ' 'FROM "application"')
     kvpairs = Database().execute(sql, handler=lambda row: (row[1], row[0]))
     name2id = dict(kvpairs)
     cls.APP_UNKNOWN = name2id['UNKNOWN']
     cls.APP_IOS = name2id['IOS']
     cls.APP_ANDROID = name2id['ANDROID']
     cls.APP_MOBILE = name2id['MOBILE']
     cls.APP_BROWSER = name2id['BROWSER']
コード例 #6
0
 def _init_types(cls):
     sql = ('SELECT "id", "name" '
            'FROM "community_type"')
     kvpairs = Database().execute(sql, handler=lambda row: (row[1], row[0]))
     name2id = dict(kvpairs)
     cls.PUBLIC_PAGE = name2id['PUBLIC_PAGE']
     cls.OPEN_GROUP = name2id['OPEN_GROUP']
     cls.CLOSED_GROUP = name2id['CLOSED_GROUP']
     cls.PRIVATE_GROUP = name2id['PRIVATE_GROUP']
コード例 #7
0
 def save(self):
     sql = ('UPDATE "community" '
            'SET "deactivated"=%s, "type"=%s, "name"=%s, "description"=%s, '
            '"members"=%s, "status"=%s, "verified"=%s, "site"=%s, "age_limit"=%s '
            'WHERE "vkid"=%s')
     params = (self.deactivated, self.type, self.name, self.description,
               self.members, self.status, self.verified, self.site, self.age_limit,
               self.vkid)
     Database().execute(sql, params)
     logging.info('community(id%s) was saved' % self.vkid)
コード例 #8
0
ファイル: audience.py プロジェクト: alega19/otus-project
 def _init_age_ranges(cls):
     sql = ('SELECT "id", "name" ' 'FROM "age_range"')
     kvpairs = Database().execute(sql, handler=lambda row: (row[1], row[0]))
     name2id = dict(kvpairs)
     cls.AGE_UNKNOWN = name2id['UNKNOWN']
     cls.AGE_14_AND_YOUNGER = name2id['-14']
     cls.AGE_15_17 = name2id['15-17']
     cls.AGE_18_21 = name2id['18-21']
     cls.AGE_22_25 = name2id['22-25']
     cls.AGE_26_29 = name2id['26-29']
     cls.AGE_30_34 = name2id['30-34']
     cls.AGE_35_39 = name2id['35-39']
     cls.AGE_40_44 = name2id['40-44']
     cls.AGE_45_49 = name2id['45-49']
     cls.AGE_50_59 = name2id['50-59']
     cls.AGE_60_AND_OLDER = name2id['60+']
コード例 #9
0
    def create(cls, vkid, deactivated, type_, name, description, members, status, verified, site, age_limit):
        comm = cls(vkid)
        comm.deactivated = deactivated
        comm.type = type_
        comm.name = name
        comm.description = description
        comm.members = members
        comm.status = status
        comm.verified = verified
        comm.site = site
        comm.age_limit = age_limit

        sql = ('INSERT INTO "community" '
               '("vkid", "deactivated", "type", "name", "description", '
               '"members", "status", "verified", "site", "age_limit") '
               'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)')
        params = (comm.vkid, comm.deactivated, comm.type, comm.name, comm.description,
                  comm.members, comm.status, comm.verified, comm.site, comm.age_limit)
        Database().execute(sql, params)

        return comm
コード例 #10
0
ファイル: tokenpool.py プロジェクト: alega19/otus-project
 def _load(self):
     sql = ('SELECT "token" ' 'FROM "account" ' 'WHERE "active" = TRUE')
     tokens = Database().execute(sql, handler=lambda t: t[0])
     self.tokens = deque((t, DateTime(1970, 1, 1)) for t in tokens)
     self.sem = asyncio.BoundedSemaphore(len(tokens), loop=self.loop)
コード例 #11
0
ファイル: audience.py プロジェクト: alega19/otus-project
 def _init_countries_ids(cls):
     sql = ('SELECT "vkid", "name" ' 'FROM "country"')
     kvpairs = Database().execute(sql, handler=lambda row: (row[1], row[0]))
     name2id = dict(kvpairs)
     cls.UNKNOWN_COUNTRY = name2id.pop('UNKNOWN')
     cls.countries_ids = frozenset(name2id.values())
コード例 #12
0
 def load_ordered_by_update_time(cls):
     sql = ('SELECT "vkid" '
            'FROM "community" '
            'ORDER BY "updated" ASC')
     return Database().execute(sql, handler=lambda row: cls(row[0]))