
import datetime
import collections
from cStringIO import StringIO

from dateutil.relativedelta import relativedelta

from framework.mongo import database

from website import models
from website.app import app, init_app

from scripts.analytics import utils


NODE_ID = '95nv8'
USER_ID = 'icpnw'
FILE_NAME = 'daily-users.csv'
CONTENT_TYPE = 'text/csv'
TIME_DELTA = relativedelta(days=1)


def get_emails(query=None):
    users = database['user'].find(query, {'username': True})
    counts = collections.Counter(
        user['username'].split('@')[-1]
        for user in users
    )
    return counts.most_common()


def get_emails_since(delta):
    return get_emails({
        'date_confirmed': {
            '$gte': datetime.datetime.utcnow() - delta,
        }
    })


def main():
    node = models.Node.load(NODE_ID)
    user = models.User.load(USER_ID)
    emails = get_emails_since(TIME_DELTA)
    sio = StringIO()
    utils.make_csv(sio, emails, ['affiliation', 'count'])
    utils.send_file(app, FILE_NAME, CONTENT_TYPE, sio, node, user)


if __name__ == '__main__':
    init_app()
    main()


import datetime
import collections
from cStringIO import StringIO

from dateutil.relativedelta import relativedelta

from framework.mongo import database

from website import models
from website.app import app, init_app

from scripts.analytics import utils


NODE_ID = '95nv8'  # Daily updates project
USER_ID = 'icpnw'  # Josh
FILE_NAME = 'daily-users.csv'
CONTENT_TYPE = 'text/csv'
TIME_DELTA = relativedelta(days=1)


def get_emails(query=None):
    users = database['user'].find(query, {'username': True})
    counts = collections.Counter(
        user['username'].split('@')[-1]
        for user in users
    )
    return counts.most_common()


def get_emails_since(delta):
    return get_emails({
        'is_registered': True,
        'password': {'$ne': None},
        'is_merged': {'$ne': True},
        'date_confirmed': {'$gte': datetime.datetime.utcnow() - delta},
    })


def main():
    node = models.Node.load(NODE_ID)
    user = models.User.load(USER_ID)
    emails = get_emails_since(TIME_DELTA)
    sio = StringIO()
    utils.make_csv(sio, emails, ['affiliation', 'count'])
    utils.send_file(app, FILE_NAME, CONTENT_TYPE, sio, node, user)


if __name__ == '__main__':
    init_app()
    main()

Make user metric criteria consistent.
Make user metric criteria consistent.

[Resolves #1768]

  
  import datetime
  import collections
  from cStringIO import StringIO
  
  from dateutil.relativedelta import relativedelta
  
  from framework.mongo import database
  
  from website import models
  from website.app import app, init_app
  
  from scripts.analytics import utils
  
  
- NODE_ID = '95nv8'
+ NODE_ID = '95nv8'  # Daily updates project
- USER_ID = 'icpnw'
+ USER_ID = 'icpnw'  # Josh
  FILE_NAME = 'daily-users.csv'
  CONTENT_TYPE = 'text/csv'
  TIME_DELTA = relativedelta(days=1)
  
  
  def get_emails(query=None):
      users = database['user'].find(query, {'username': True})
      counts = collections.Counter(
          user['username'].split('@')[-1]
          for user in users
      )
      return counts.most_common()
  
  
  def get_emails_since(delta):
      return get_emails({
-         'date_confirmed': {
+         'is_registered': True,
+         'password': {'$ne': None},
+         'is_merged': {'$ne': True},
-             '$gte': datetime.datetime.utcnow() - delta,
+         'date_confirmed': {'$gte': datetime.datetime.utcnow() - delta},
-         }
      })
  
  
  def main():
      node = models.Node.load(NODE_ID)
      user = models.User.load(USER_ID)
      emails = get_emails_since(TIME_DELTA)
      sio = StringIO()
      utils.make_csv(sio, emails, ['affiliation', 'count'])
      utils.send_file(app, FILE_NAME, CONTENT_TYPE, sio, node, user)
  
  
  if __name__ == '__main__':
      init_app()
      main()
  
Make user metric criteria consistent.
## Code Before:

import datetime
import collections
from cStringIO import StringIO

from dateutil.relativedelta import relativedelta

from framework.mongo import database

from website import models
from website.app import app, init_app

from scripts.analytics import utils


NODE_ID = '95nv8'
USER_ID = 'icpnw'
FILE_NAME = 'daily-users.csv'
CONTENT_TYPE = 'text/csv'
TIME_DELTA = relativedelta(days=1)


def get_emails(query=None):
    users = database['user'].find(query, {'username': True})
    counts = collections.Counter(
        user['username'].split('@')[-1]
        for user in users
    )
    return counts.most_common()


def get_emails_since(delta):
    return get_emails({
        'date_confirmed': {
            '$gte': datetime.datetime.utcnow() - delta,
        }
    })


def main():
    node = models.Node.load(NODE_ID)
    user = models.User.load(USER_ID)
    emails = get_emails_since(TIME_DELTA)
    sio = StringIO()
    utils.make_csv(sio, emails, ['affiliation', 'count'])
    utils.send_file(app, FILE_NAME, CONTENT_TYPE, sio, node, user)


if __name__ == '__main__':
    init_app()
    main()

## Instruction:
Make user metric criteria consistent.
## Code After:

import datetime
import collections
from cStringIO import StringIO

from dateutil.relativedelta import relativedelta

from framework.mongo import database

from website import models
from website.app import app, init_app

from scripts.analytics import utils


NODE_ID = '95nv8'  # Daily updates project
USER_ID = 'icpnw'  # Josh
FILE_NAME = 'daily-users.csv'
CONTENT_TYPE = 'text/csv'
TIME_DELTA = relativedelta(days=1)


def get_emails(query=None):
    users = database['user'].find(query, {'username': True})
    counts = collections.Counter(
        user['username'].split('@')[-1]
        for user in users
    )
    return counts.most_common()


def get_emails_since(delta):
    return get_emails({
        'is_registered': True,
        'password': {'$ne': None},
        'is_merged': {'$ne': True},
        'date_confirmed': {'$gte': datetime.datetime.utcnow() - delta},
    })


def main():
    node = models.Node.load(NODE_ID)
    user = models.User.load(USER_ID)
    emails = get_emails_since(TIME_DELTA)
    sio = StringIO()
    utils.make_csv(sio, emails, ['affiliation', 'count'])
    utils.send_file(app, FILE_NAME, CONTENT_TYPE, sio, node, user)


if __name__ == '__main__':
    init_app()
    main()
