Skip to content

Commit

Permalink
Rename trending challenges (#2316)
Browse files Browse the repository at this point in the history
* Rename trending challenges

* Drop challenge migration

* Fix lint

* Remove extra fmt

* Fix test

* Fix migration

* Fix datetime conversion

* Handle double colon

* Fix test
  • Loading branch information
piazzatron committed Jan 15, 2022
1 parent 0b0345a commit 26186a0
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""Drop old trending challenges
Revision ID: 7104383ac0fe
Revises: be27a2794f75
Create Date: 2022-01-14 21:07:15.939210
"""
import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision = "7104383ac0fe"
down_revision = "be27a2794f75"
branch_labels = None
depends_on = None


def upgrade():
connection = op.get_bind()
connection.execute(
"""
--- Drop user challenges
delete from user_challenges
where
challenge_id = 'trending-track' or
challenge_id = 'trending-playlist' or
challenge_id = 'trending-underground-track';
--- Drop challenges
delete from challenges
where
id = 'trending-track' or
id = 'trending-playlist' or
id = 'trending-underground-track';
--- Drop trending results
delete from trending_results;
"""
)


def downgrade():
pass
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import logging
from datetime import date, datetime, timedelta
from datetime import datetime, timedelta

import redis
from integration_tests.utils import populate_mock_db
Expand Down Expand Up @@ -268,7 +268,7 @@ def test_trending_challenge_job(app):
ChallengeEvent.trending_playlist, trending_playlist_challenge_manager
)

trending_date = date.fromisoformat("2021-08-20")
trending_date = datetime.fromisoformat("2021-08-20")

with db.scoped_session() as session:
_update_aggregate_plays(session)
Expand All @@ -293,9 +293,9 @@ def test_trending_challenge_job(app):
with db.scoped_session() as session:
session.query(Challenge).filter(
or_(
Challenge.id == "trending-playlist",
Challenge.id == "trending-track",
Challenge.id == "trending-underground-track",
Challenge.id == "tp",
Challenge.id == "tt",
Challenge.id == "tut",
)
).update({"active": True, "starting_block": BLOCK_NUMBER})
bus.process_events(session)
Expand All @@ -309,7 +309,7 @@ def test_trending_challenge_job(app):

user_trending_tracks_challenges = (
session.query(UserChallenge)
.filter(UserChallenge.challenge_id == "trending-track")
.filter(UserChallenge.challenge_id == "tt")
.all()
)
assert len(user_trending_tracks_challenges) == 5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@ def test_parse_transfer_instruction_id():
parsed_id = parse_transfer_instruction_id(transfer_id)
assert parsed_id == None

# Returns none on invalid transfer_id
transfer_id = "profile-completion:123456789:"
# Handles trending
transfer_id = "tt:12-12-21:1"
parsed_id = parse_transfer_instruction_id(transfer_id)
assert parsed_id == None
assert parsed_id[0] == "tt"
assert parsed_id[1] == "12-12-21:1"


mock_tx_info = {
Expand Down
6 changes: 3 additions & 3 deletions discovery-provider/src/challenges/challenges.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,21 +53,21 @@
"starting_block": 25346436
},
{
"id": "trending-track",
"id": "tt",
"type": "trending",
"amount": "100",
"active": true,
"starting_block": 25346436
},
{
"id": "trending-underground-track",
"id": "tut",
"type": "trending",
"amount": "100",
"active": true,
"starting_block": 25346436
},
{
"id": "trending-playlist",
"id": "tp",
"type": "trending",
"amount": "100",
"active": true,
Expand Down
6 changes: 3 additions & 3 deletions discovery-provider/src/challenges/challenges.stage.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,17 @@
"starting_block": 0
},
{
"id": "trending-track",
"id": "tt",
"active": true,
"starting_block": 0
},
{
"id": "trending-underground-track",
"id": "tut",
"active": true,
"starting_block": 0
},
{
"id": "trending-playlist",
"id": "tp",
"active": true,
"starting_block": 0
}
Expand Down
10 changes: 3 additions & 7 deletions discovery-provider/src/challenges/trending_challenge.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,13 @@ def generate_specifier(self, user_id: int, extra: Dict) -> str:
return f"{extra['week']}:{extra['rank']}"


trending_track_challenge_manager = ChallengeManager(
"trending-track", TrendingChallengeUpdater()
)
trending_track_challenge_manager = ChallengeManager("tt", TrendingChallengeUpdater())

trending_underground_track_challenge_manager = ChallengeManager(
"trending-underground-track", TrendingChallengeUpdater()
"tut", TrendingChallengeUpdater()
)

trending_playlist_challenge_manager = ChallengeManager(
"trending-playlist", TrendingChallengeUpdater()
)
trending_playlist_challenge_manager = ChallengeManager("tp", TrendingChallengeUpdater())


def is_dst(zonename, dt):
Expand Down
10 changes: 8 additions & 2 deletions discovery-provider/src/tasks/calculate_trending_challenges.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@
trending_strategy_factory = TrendingStrategyFactory()


def date_to_week(date: datetime) -> str:
return date.strftime("%Y-%m-%d")


def get_latest_blocknumber(session: Session, redis: Redis) -> Optional[int]:
# get latest db state from redis cache
latest_indexed_block_num = redis.get(most_recent_indexed_block_redis_key)
Expand Down Expand Up @@ -65,7 +69,7 @@ def dispatch_trending_challenges(
"rank": idx + 1,
"type": str(type),
"version": str(version),
"week": str(date),
"week": date_to_week(date),
},
)

Expand Down Expand Up @@ -161,7 +165,7 @@ def enqueue_trending_challenges(
"rank": idx + 1,
"type": str(TrendingType.PLAYLISTS),
"version": str(version),
"week": str(date),
"week": date_to_week(date),
},
)

Expand All @@ -179,6 +183,8 @@ def calculate_trending_challenges_task(self, date=None):
if date is None:
logger.error("calculate_trending_challenges.py | Must be called with a date")
return
# Celery gives this to us formatted as '2022-01-01T00:00:00', need to parse into datetime
date = datetime.fromisoformat(date)
db = calculate_trending_challenges_task.db
redis = calculate_trending_challenges_task.redis
challenge_bus = calculate_trending_challenges_task.challenge_event_bus
Expand Down
2 changes: 1 addition & 1 deletion discovery-provider/src/tasks/index_rewards_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def parse_transfer_instruction_id(transfer_id: str) -> Optional[List[str]]:
"""Parses the transfer instruction id into [challenge_id, specifier]
The id in the transfer instruction is formatted as "<CHALLENGE_ID>:<SPECIFIER>"
"""
id_parts = transfer_id.split(":")
id_parts = transfer_id.split(":", 1)
if len(id_parts) != 2:
logger.error(
"index_rewards_manager.py | Unable to parse transfer instruction id"
Expand Down

0 comments on commit 26186a0

Please sign in to comment.