Changes in / [1183d5a:ed7e9d7] in OpenWorkouts-current
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
README.txt
r1183d5a red7e9d7 2 2 ============ 3 3 4 TBW, if you look for installation instructions, take a look at the script 5 bin/install 4 Getting Started 5 --------------- 6 7 - Change directory into your newly created project. 8 9 cd ow 10 11 - Create a Python virtual environment. 12 13 python3 -m venv env 14 15 - Upgrade packaging tools. 16 17 env/bin/pip install --upgrade pip setuptools 18 19 - Install the project in editable mode with its testing requirements. 20 21 env/bin/pip install -e ".[testing]" 22 23 - Run your project's tests. 24 25 env/bin/pytest 26 27 - Run your project. 28 29 env/bin/pserve development.ini -
bin/install
r1183d5a red7e9d7 58 58 install_openworkouts() { 59 59 . ${env_path}/bin/activate 60 yes | pip install --upgrade - e ${current}[testing]60 yes | pip install --upgrade --process-dependency-links -e ${current}[testing] 61 61 deactivate 62 62 } -
ow/static/js/ow.js
r1183d5a red7e9d7 335 335 select_x_axis_label(d).attr('style', "font-weight: regular;"); 336 336 } 337 })338 .on('click', function(d) {339 window.location.href = d.url;340 337 }); 341 338 -
ow/templates/profile.pt
r1183d5a red7e9d7 59 59 </div> 60 60 61 <div class="profile-bio" tal:content="getattr(context, 'bio', '')"></div> 61 <div class="profile-bio" tal:content="getattr(context, 'bio', '')"> 62 </div> 62 63 63 <div class=" profile-workouts">64 <div class="workouts"> 64 65 <tal:t i18n:translate="">Total number of workouts</tal:t>: 65 66 <tal:w tal:replace="context.num_workouts"></tal:w> 67 </div> 68 69 <div class="latest-workouts"> 70 <p i18n:translate="">Latest workouts</p> 71 <tal:r tal:repeat="workout context.workouts()[:5]"> 72 <div class="workout"> 73 <tal:c tal:content="workout.sport"></tal:c> - 74 <a href="" tal:content="workout.title" 75 tal:attributes="href request.resource_url(workout)"></a> 76 (<tal:c tal:content="workout.start"></tal:c>, 77 <tal:c tal:content="workout.duration"></tal:c>, 78 <tal:c tal:content="workout.rounded_distance"></tal:c> km) 79 </div> 80 </tal:r> 66 81 </div> 67 82 … … 74 89 </div> 75 90 </div> 76 77 78 <tal:r tal:repeat="workout workouts">79 80 <a name="workouts"></a>81 82 83 <article class="workout-resume">84 85 <h2 class="workout-title">86 <a href="" tal:content="workout.title"87 tal:attributes="href request.resource_url(workout)"></a>88 </h2>89 90 <ul class="workout-info">91 <li>92 <tal:c tal:content="workout.start_in_timezone(context.timezone)"></tal:c>93 </li>94 <li>95 <!--! use the properly formatted duration instead of the timedelta object -->96 <tal:c tal:content="workout._duration"></tal:c>97 </li>98 <li tal:condition="workout.distance">99 <tal:c tal:content="workout.rounded_distance"></tal:c> km100 </li>101 </ul>102 103 <ul class="workout-info" tal:define="hr workout.hr; cad workout.cad">104 <li tal:condition="hr">105 <span i18n:translate="">HR (bpm)</span>:106 <tal:c tal:content="hr['min']"></tal:c>107 <tal:t i18n:translate="">Min.</tal:t>,108 <tal:c tal:content="hr['avg']"></tal:c>109 <tal:t i18n:translate="">Avg.</tal:t>,110 <tal:c tal:content="hr['max']"></tal:c>111 <tal:t i18n:translate="">Max.</tal:t>112 </li>113 <li tal:condition="cad">114 <span i18n:translate="">Cad</span>:115 <tal:c tal:content="cad['min']"></tal:c>116 <tal:t i18n:translate="">Min.</tal:t>,117 <tal:c tal:content="cad['avg']"></tal:c>118 <tal:t i18n:translate="">Avg.</tal:t>,119 <tal:c tal:content="cad['max']"></tal:c>120 <tal:t i18n:translate="">Max.</tal:t>121 </li>122 </ul>123 124 <div class="workout-intro" tal:content="workout.notes"></div>125 126 <div class="workout-map" tal:condition="workout.has_gpx">127 <a href="" tal:attributes="href request.resource_url(workout)">128 <img src="" tal:attributes="src request.static_url(workout.map_screenshot);129 alt workout.title; title workout.title">130 </a>131 </div>132 133 </article>134 135 </tal:r>136 91 137 92 </div> -
ow/tests/views/test_user.py
r1183d5a red7e9d7 267 267 """ 268 268 request = dummy_request 269 # profile page for the current day (no workouts avalable)270 269 response = user_views.profile(john, request) 271 assert len(response.keys()) == 2270 assert len(response.keys()) == 1 272 271 current_month = datetime.now(timezone.utc).strftime('%Y-%m') 273 272 assert response['current_month'] == current_month 274 assert response['workouts'] == []275 # profile page for a previous date, that has workouts276 request.GET['year'] = 2015277 request.GET['month'] = 8278 response = user_views.profile(john, request)279 assert len(response.keys()) == 2280 assert response['current_month'] == '2015-08'281 assert response['workouts'] == john.workouts(2015, 8)282 273 283 274 def test_login_get(self, dummy_request): -
ow/views/user.py
r1183d5a red7e9d7 166 166 """ 167 167 now = datetime.now(timezone.utc) 168 year = int(request.GET.get('year', now.year)) 169 month = int(request.GET.get('month', now.month)) 170 return { 171 'workouts': context.workouts(year, month), 172 'current_month': '{year}-{month}'.format( 173 year=str(year), month=str(month).zfill(2)) 168 return { 169 'current_month': now.strftime('%Y-%m') 174 170 } 175 171 … … 284 280 'distance': int(round(stats[month]['distance'])), 285 281 'elevation': int(stats[month]['elevation']), 286 'workouts': stats[month]['workouts'], 287 'url': request.resource_url( 288 context, 'profile', 289 query={'year': str(month[0]), 'month': str(month[1])}, 290 anchor='workouts') 282 'workouts': stats[month]['workouts'] 291 283 } 292 284 json_stats.append(month_stats) -
setup.py
r1183d5a red7e9d7 21 21 'waitress', 22 22 'repoze.folder', 23 'repoze.catalog @ git+https://github.com/WuShell/repoze.catalog.git@0.8.4' 24 '#egg=repoze.catalog-0.8.4', 23 'repoze.catalog==0.8.4', 25 24 'bcrypt', 26 25 'FormEncode', … … 40 39 'pytest-xdist', 41 40 'pytest-codestyle', 41 ] 42 43 dependency_links = [ 44 'git+https://github.com/WuShell/repoze.catalog.git@0.8.4' 45 '#egg=repoze.catalog-0.8.4' 42 46 ] 43 47 … … 60 64 include_package_data=True, 61 65 zip_safe=False, 66 dependency_links=dependency_links, 62 67 extras_require={ 63 68 'testing': tests_require,
Note: See TracChangeset
for help on using the changeset viewer.