#5003 Add a way to make the stats view on more than one year (if you know how to)
Merged 3 years ago by pingou. Opened 3 years ago by pingou.

file modified
+7 -1
@@ -1590,11 +1590,17 @@ 

          }

  

      """  # noqa

+     weeks_range = flask.request.args.get("weeks_range") or 53

+     try:

+         weeks_range = int(weeks_range)

+     except:

+         weeks_range = 53

+ 

      repo = _get_repo(repo, username, namespace)

      _check_issue_tracker(repo)

  

      stats = pagure.lib.query.issues_history_stats(

-         flask.g.session, repo, detailed=True

+         flask.g.session, repo, detailed=True, weeks_range=weeks_range,

      )

      jsonout = flask.jsonify({"stats": stats})

      return jsonout

file modified
+3 -3
@@ -5695,7 +5695,7 @@ 

          session.add(repo)

  

  

- def issues_history_stats(session, project, detailed=False):

+ def issues_history_stats(session, project, detailed=False, weeks_range=53):

      """ Returns the number of opened issues on the specified project over

      the last 365 days

  
@@ -5721,7 +5721,7 @@ 

          .order_by(sqlalchemy.asc(model.Issue.closed_at))

          .first()

      )

-     a_year_ago = tomorrow - datetime.timedelta(days=(53 * 7))

+     a_year_ago = tomorrow - datetime.timedelta(days=(weeks_range * 7))

      if oldest_closed and oldest_closed.closed_at < a_year_ago:

          to_ignore = 0

      else:
@@ -5738,7 +5738,7 @@ 

      # For each week from tomorrow, get the number of open tickets

  

      output = {}

-     for week in range(53):

+     for week in range(weeks_range):

          end = tomorrow - datetime.timedelta(days=(week * 7))

          start = end - datetime.timedelta(days=7)

          closed_ticket = (

@@ -60,6 +60,7 @@ 

                      author='---') }}";

  

  {% if g.issues_enabled %}

+ nweeks = 53;

  issues_history_stats_plot_call = function() {

    $("#commiter_list").hide();

    $(".commit_trend").hide();
@@ -67,7 +68,7 @@ 

      'api_ns.api_view_issues_history_detailed_stats',

      repo=g.repo.name,

      username=username,

-     namespace=g.repo.namespace) }}";

+     namespace=g.repo.namespace) }}?weeks_range=" + nweeks;

    var _s = $("#data_stats_spinner");

    _s.html(

      "<img id='spinnergif' src='{{ url_for('static', filename='images/spinner.gif') }}?version={{ g.version}}'>"

@@ -4358,6 +4358,52 @@ 

                  {"closed_ticket": 0, "count": 0, "open_ticket": 0},

              )

  

+     def test_api_view_issues_history_stats_detailed_invalid_range(self):

+         """ Test the api_view_issues_history_stats method of the flask api. """

+         self.test_api_new_issue()

+ 

+         output = self.app.get(

+             "/api/0/test/issues/history/detailed_stats?weeks_range=abc"

+         )

+         self.assertEqual(output.status_code, 200)

+         data = json.loads(output.get_data(as_text=True))

+ 

+         self.assertEqual(list(data.keys()), ["stats"])

+         self.assertEqual(len(data["stats"]), 53)

+         last_key = sorted(data["stats"].keys())[-1]

+         self.assertEqual(

+             data["stats"][last_key],

+             {"closed_ticket": 0, "count": 0, "open_ticket": 1},

+         )

+         for k in sorted(data["stats"].keys())[:-1]:

+             self.assertEqual(

+                 data["stats"][k],

+                 {"closed_ticket": 0, "count": 0, "open_ticket": 0},

+             )

+ 

+     def test_api_view_issues_history_stats_detailed_one_week(self):

+         """ Test the api_view_issues_history_stats method of the flask api. """

+         self.test_api_new_issue()

+ 

+         output = self.app.get(

+             "/api/0/test/issues/history/detailed_stats?weeks_range=1"

+         )

+         self.assertEqual(output.status_code, 200)

+         data = json.loads(output.get_data(as_text=True))

+ 

+         self.assertEqual(list(data.keys()), ["stats"])

+         self.assertEqual(len(data["stats"]), 1)

+         last_key = sorted(data["stats"].keys())[-1]

+         self.assertEqual(

+             data["stats"][last_key],

+             {"closed_ticket": 0, "count": 0, "open_ticket": 1},

+         )

+         for k in sorted(data["stats"].keys())[:-1]:

+             self.assertEqual(

+                 data["stats"][k],

+                 {"closed_ticket": 0, "count": 0, "open_ticket": 0},

+             )

+ 

      def test_api_view_user_issues_pingou(self):

          """ Test the api_view_user_issues method of the flask api for pingou.

          """

Signed-off-by: Pierre-Yves Chibon pingou@pingoured.fr

rebased onto 02e76f9a5dee3ca400d8dada69e12e8aed6ea25f

3 years ago

rebased onto 0087ae7

3 years ago

Thanks for the review! :)

Pull-Request has been merged by pingou

3 years ago