ν΄μνμλ€μ λ¨λ©΄ νλ‘―μμ λ°μ΄ν°λ₯Ό λΉκ΅νλ κ²μ μ’μν©λλ€. μ΄λ₯Ό μννλ ν κ°μ§ μΌλ°μ μΈ λ°©λ²μ ν 맀κ°λ³μμ λ±κ³ μ μ λ€λ₯Έ 맀κ°λ³μμ μ»¬λ¬ λ°μ΄ν° μμ μ€λ²λ μ΄νλ κ²μ λλ€. μ ν νλͺ©μ μλ λͺ¨λ λ°μ΄ν°μ λν΄ μ΄ μ΅μ μ μ 곡νλλ‘ STOQS UIλ₯Ό μμ ν μ μμ΅λλ€.
λΌλμ€ λ²νΌμ νμ¬ "νλ‘― λ°μ΄ν°" μ΄μ "μμ νλ‘―"μΌλ‘ μ΄λ¦μ λ°κΏμΌ ν©λλ€. (Temporal - Depth μΉμ νλ‘― μλμ 'contour' λ° 'scatter' λΌλμ€ λ²νΌμ μ¬μ ν ββColor Plot μ νμ μ μ©λ©λλ€.) "Contour Plot"μ΄λΌλ λΌλμ€ λ²νΌμ μ μ΄μ΄ μΆκ°λ©λλ€. Contour Plot 맀κ°λ³μλ₯Ό μ ννλ©΄ 맀κ°λ³μμ λ±κ³ μ μ 그리λ Matplotlib μ½λμ μ€νμ΄ νΈλ¦¬κ±°λ©λλ€. STOQS UIμ νΉμ±μ λ°λΌ λ 벨 μ, λ μ΄λΈ λ°°μΉ λ° κΈ°ν μμ±μ λ°μ΄ν°λ₯Ό κ°μ₯ μ λνλ΄λλ‘ μλμΌλ‘ μ νλ©λλ€.
μ΄ μλ‘μ΄ κΈ°λ₯μ ꡬννλ €λ©΄ μ 체 μ€ν κ°λ°μ κΈ°μ μ΄ νμν©λλ€. ν΄λΌμ΄μΈνΈ μΈ‘μλ μμ±ν HTMLκ³Ό JavaScript(JQuery)κ° μμ΅λλ€. UIμ μλ² κ°μ λ°μ΄ν°λ₯Ό μ λ¬νλ €λ©΄ AJAXλ₯Ό μ΄ν΄ν΄μΌ ν©λλ€. μλ² μΈ‘μλ νλ‘ν μ μννκΈ° μν΄ μμ±ν΄μΌ νλ Python μ½λκ° μμ΅λλ€. λͺ¨λ κ²μ λ§λ¬΄λ¦¬νκΈ° μν΄ κΈ°λ₯ ν μ€νΈλ Seleniumμ μ¬μ©νμ¬ μμ±λ©λλ€. (μ΄μμ μΌλ‘λ μ§μ ν TDD λ°©λ²λ‘ μ λ°λ₯΄κΈ° μν΄ ν μ€νΈκ° λ¨Όμ μμ±λ©λλ€!)
@J0S349 , @noemicuin , @LeslyGJ , @samuelreyλ₯Ό νμν©λλ€! μ΄ λ¬Έμ λ₯Ό μ νν΄μ£Όμ μ κΈ°μ©λλ€. μ΄κ²μ μ°λ¦¬ κ³Όνμ μ€ ν λͺ μ΄ μμ²ν κ²μ΄λ©° κ·Έλ€μ΄ μ΄ κΈ°λ₯μ κ°κ² λμ΄ κΈ°μ κ²μ΄λΌκ³ μκ°ν©λλ€.
μ΄μ MBARIλ₯Ό λλ¬λ³΄λ λμ μ°λ¦¬λ μ΄ μλ‘μ΄ κΈ°λ₯μ΄ μ 곡ν νλ‘―μ μκ° μλ ν¬μ€ν°λ₯Ό μ§λμ³€μ΅λλ€.
μλ¨ νλ‘―μ μ¨λλ₯Ό μμκ³Ό ν°μ λ±κ³ μ μΌλ‘ νμν©λλ€. νλ¨ νλ‘―μ μ½λ‘μλ₯Ό μμμΌλ‘ νμνκ³ ν°μ λ±κ³ μ μ μλ¨ νλ‘―, μ¨λμμμ λμΌν©λλ€.
STOQS UIμ μΆκ°λ κΈ°λ₯μ λͺ¨λ Parameterμ λ±κ³ μ μ μΆκ°ν μ μλ κΈ°λ₯μ λλ€.
https://github.com/stoqs/stoqs/pull/501 μ μν΄ μΆκ°λ test_contour_plots() ν
μ€νΈλ λ€μμ μ¬μ©νμ¬ ~/dev/stoqsgit
μμ μ€νν μ μμ΅λλ€.
export DJANGO_SETTINGS_MODULE=config.settings.ci
export DATABASE_URL=postgis://127.0.0.1:5432/stoqs
stoqs/manage.py test stoqs.tests.functional_tests.BrowserTestCase.test_contour_plots
λΉμ μ΄ μ κ±° λ λλ²κ·Έ μ€λ¨ μ μ λ€μ λ£μΌλ©΄ https://github.com/stoqs/stoqs/pull/501/commits/b976d708e13fd208df3f29c6f12bd1692e427e38 μ΄ κ°μ μ°½μ λ³Ό μ :
κΈ°λ₯ ν μ€νΈλ₯Ό μ€ννλ €λ©΄ κ°λ° μλ²κ° μ€ν μ€μ΄μ΄μΌ ν©λλ€. μ΄κ²μ΄ λ€λ₯Έ ν°λ―Έλ μΈμ μμ μ€νλμλμ§ νμΈνμμμ€:
cd ~/dev/stoqsgit && source venv-stoqs/bin/activate
export DATABASE_URL=postgis://stoqsadm:[email protected]:5432/stoqs
stoqs/manage.py runserver 0.0.0.0:8000 --settings=config.settings.ci
"λ±κ³ μ νλ‘―" κΈ°λ₯μ λν κΈ°λ₯ ν μ€νΈμ μμμ λ€μκ³Ό κ°μ΅λλ€.
- # TODO: Add tests for contour line plot
+ # Tests for contour line plot
+ parameter_contour_plot_radio_button = self.browser.find_element(By.XPATH,
+ "//input[@name='parameters_contour_plot' and @value='{}']".format(northward_sea_water_velocity_HR_id))
λ€μκ³Ό κ°μ΄ μ€ν¨ν©λλ€.
NoSuchElementException: Message: Unable to locate element: //input[@name='parameters_contour_plot' and @value='17']
μ€λ¨μ μ μΆκ°νκ³ μ¬μ©ν μ μλ μμλ₯Ό μμ²νλ νμ μΆκ°ν μ μμμ΅λλ€.
μλ νμΈμ @samuelrey μ λλ€ .
λλ¨ν΄! μ°λ¦¬ λͺ¨λκ° λ³Ό μ μλλ‘ μ½λ λ³κ²½ μ¬νμ μ λΆκΈ°λ‘ νΈμν μ μμ΅λκΉ?
@MBARIMike λ λ§μ ν
μ€νΈ μ¬λ‘λ₯Ό
λ΄κ° ꡬνν κ²μ μ€κ³½ λΌλμ€ λ²νΌ μ€ νλλ₯Ό λλ μ λ μ΄λ―Έμ§κ° μμ±λ κ²μΌλ‘ μμν©λλ€.
λ λ€λ₯Έ μκ°μ μ»¬λ¬ λ²νΌκ³Ό λμΌν κ°μμ μ€κ³½ λ²νΌμ΄ μμ±λλμ§ νμΈνλ κ²μ΄μμ΅λλ€. μ΄κ²μ λΌλμ€ λ²νΌμ΄ λ°μ΄ν°μ μ€λͺ
λ 맀κ°λ³μμ λ°λΌ λμ μΌλ‘ μμ±λλ€λ λμ μ΄ν΄λ₯Ό λ°λ¦
λλ€.
μλ νμΈμ @samuelrey (λ° ν),
Harry Percivalμ μμ΅μ μμ TDDμ μλ₯Ό λ°λ₯΄λ €λ©΄ λ€μ λ¨κ³λ https://github.com/stoqs/stoqs/issues/230#issuecomment -280171422μμ ν μ€νΈλ₯Ό ν΅κ³Όνλλ‘ μ½λλ₯Ό μΆκ°νλ κ²μ λλ€.
ν
μ€νΈ μ½λλ parameters_contour_plot
λΌλ μ
λ ₯ μμλ₯Ό μ°Ύλ λ° μ€ν¨ν©λλ€. κΈ°μ‘΄ μΉ νμ΄μ§μλ parameters_plot
λΌλ λΌλμ€ λ²νΌ μ΄μ΄ μμ΅λλ€. https://github.com/stoqs/stoqs/blob/master/stoqs/stoqs/templates/stoqs/stoqsquery.html νμΌμμ μ΄ λ¬Έμμ΄μ μ°Ύκ³ parameters_contour_plot
λΌλ λΌλμ€ λ²νΌ μ΄μ μΆκ°νλ μ μ¬ν μ½λλ₯Ό μΆκ°νλ κ²μ΄ μ’μ΅λλ€.
ν μ€νΈλ₯Ό ν΅κ³Όνλ©΄ λΆκΈ°μ λ³κ²½ μ¬νμ 컀λ°ν©λλ€. κ·Έλ° λ€μ λ€μ ν μ€νΈλ₯Ό μμ±νμμμ€.
μλ
νμΈμ @MBARIMike ,
μ΄μ λ€μκ³Ό κ°μ΄ μ΄λ¦μ΄ μ§μ λ μλνμ§ μλ λͺ¨λ λΌλμ€ λ²νΌμ ꡬννμ΅λλ€. parameters_contour_plot
λ±κ³ μ νλ‘―μ λν ν
μ€νΈμ ν¨κ» μμ±λμλμ§ νμΈν©λλ€. λ€μ λ¨κ³λ μ€κ³½ λΌλμ€ λ²νΌμ κΈ°λ₯μ ꡬννλ κ²μ
λλ€.
@MBARIMike λν 3μ 31μΌ κΈμμΌ(Cesar Chavez Day)μλ λ§λ μ μμ§λ§ λ€λ₯Έ κΈμμΌμ λ§λμ μ§ν μν©μ 보μ¬μ£Όκ³ μ μ μ¬νμ λ Όμνκ³ μΆμ΅λλ€. κ·νμκ² κ°μ₯ μ ν©ν κ²μ΄ 무μμΈμ§ μλ €μ£Όμμμ€.
λλ¨ν λ°μ μΈ κ² κ°μ΅λλ€!
μ΄λ¬ν μ½λ λ³κ²½ μ¬νμ λν λΆκΈ° λ§ν¬λ₯Ό μ 곡ν μ μμ΅λκΉ?
λ€μμ μ½λ λ³κ²½ μ¬νμ
λλ€.
https://github.com/samuelrey/stoqs/commit/01fd692e5010fb6aa287899b5d7afb5bd10e9825
https://github.com/samuelrey/stoqs/commit/a3173e7368528c17f3a57ab5daf4ae4aa730153a (νμΌ λ)
https://github.com/samuelrey/stoqs/commit/3122a4ee412b859e949549ebf7e384a61c9fb438 (ν
μ€νΈ)
λ΄ VMμμ Firefox μ°½μ΄ νλ©΄μ λνλμ§ μλ κ²μ νμΈνμ΅λλ€. ν΄λΉ λ¬Έμ κ° λ°μνλμ§ λͺ¨λ₯΄κ² μ§λ§ stoqs/stoqs/tests/functional_tests.py
λ³κ²½νλ©΄ λ€μκ³Ό κ°μ λ¬Έμ κ° ν΄κ²°λ©λλ€.
--- a/stoqs/stoqs/tests/functional_tests.py
+++ b/stoqs/stoqs/tests/functional_tests.py
@@ -48,9 +48,6 @@ class BrowserTestCase(TestCase):
def setUp(self):
profile = webdriver.FirefoxProfile()
self.browser = webdriver.Firefox(profile)
- self.browser.set_window_size(1200, 768)
- self.browser.set_window_position(300, 0)
- self.browser.implicitly_wait(10)
λ€μμ μ½κ°μ μ§μΉ¨μ λλ€.
parameters_contour_plot
λΌλ λΌλμ€ λ²νΌμ ν΄λ¦μ λν νΈλ€λ¬λ₯Ό μΆκ°ν©λλ€. μ΄ JavaScript μ½λ λ κΈ°μ‘΄ Plot λ²νΌμ νΈλ€λ¬μ
λλ€. κ·Έλ° λ€μ λ±κ³ μ νλ‘―μ΄ μμ±λ μλ²λ‘ μ λ¬λλ 쿼리 λ¬Έμμ΄μ μμ±ν©λλ€. parameters_contour_plot
λ₯Ό 쿼리 λ¬Έμμ΄μ μΆκ°νλ €λ©΄ λΉμ·ν μ½λλ₯Ό μΆκ°ν΄μΌ ν©λλ€.λ€μ λ¨κ³λ μλ² μΈ‘ μ½λμ λ€μ΄κ° λ μ½κ° κ±°μΉ μ΄μ§κΈ° μμν©λλ€.
parametercontourplot
μ λν νμ stoqs/stoqs/views/query.py Python μ½λμ μΆκ°ν©λλ€.μ΄ μμ μμ λΉμ μ κΈ°λ₯ ν
μ€νΈ stoqs.tests.functional_tests.BrowserTestCase.test_contour_plots
ν΅κ³Όν΄μΌνκ³ λΉμ μ΄ κ·Έκ²μν©λλ€ (νμλ‘νλ κ³³μ μ€κ³½μ μν΄ μ νλ νλΌλ―Έν° IDμ μ‘μΈμ€ν΄μΌν©λλ€ renderDatavaluesForFlot()
μ λ°©λ² MeasuredParameter
μμ
).
μλ°μ€ν¬λ¦½νΈ κΈ°λ₯μ μ¬μ©νκ² μ΅λλ€!
μμ μκ΄μ λ§μ§λ§ μ»€λ° . μ΄ μ견μ λμ΄λ λͺ¨λ μμ μ μλ£νμ΅λλ€. μ΄μ μ€μ λ‘ λ°μ΄ν°λ₯Ό νλ‘ν νλ μμ μ νκ³ μμ΅λλ€! plotting.py κ° μμ λ©λλ€.
μ»¬λ¬ νλ‘―μ μμ±νλ €κ³ ν λ λ¬Έμ κ° λ°μνμ΅λλ€. data['parameterplatformdatavaluepng']μ [null, null, '맀κ°λ³μ μ€κ³½μ νλ‘― λΌλμ€ λ²νΌ μ 보 κ°μ Έμ€κΈ° λ¬Έμ ']κ° μμ΅λλ€. μ¬κΈ° μ μ€λ¨μ μ μ€μ νκ³ μμ νλ‘― λΌλμ€ λ²νΌμ μ ννκ³ λ°μ΄ν°κ° λ΄κ° κ΄μ°°ν κ²κ³Ό λμΌνμ§ νμΈν©λλ€. μ¬μ ν μμΈμ μ’νκ³ μμ΅λλ€.
'맀κ°λ³μ-λ±κ³ μ -νλ‘―-λΌλμ€ λ²νΌ μ 보 κ°μ Έμ€κΈ° λ¬Έμ ' ν μ€νΈκ° μ΄ μ€ μμ λμ΅λλ€.
μ, λ΄ μλͺ»μ΄μΌ.
μ΄ μ€λ₯μ λν λ΄ μΆμΈ‘μ 'platformName'μ΄ 'contourplatformName'μ΄μ΄μΌ νλ€λ κ²μ
λλ€. λλ λ€λ₯Έ ν΄κ²°μ±
μ 'contourplatformName'μ νμΈνμ§ μλ κ²μΌ μ μμ΅λκΉ?
μ‘°μΈμ λΆνμν μμ 컀λ°μ νΌνλ λ° λμμ΄ λ κ²μ
λλ€.
_fillXYZ λ° loadData λ©μλμλ λ±κ³ μ λ³μμ μ¬μ¬μ©ν μ μλ λ§μ μ½λκ° μμ΅λλ€. ν¨μ λ΄μμ λ©€λ² λ³μλ₯Ό μ€μ νλ λμ μμ±ν λͺ©λ‘μ λ°ννλλ‘ ν¨μλ₯Ό μμ ν μ μμ΅λλ€.
if contourParameterID:
self.clx, self.cly, self.clz = self.loadData(...)
λ±κ³ μ x, y λ° z λ³μμ λν λ°μ΄ν°λ₯Ό μ±μ°κΈ° μν΄ plotting.pyμμ loadData() λ©μλλ₯Ό μ¬μ¬μ©νλ κ°μ₯ μ’μ λ°©λ²μ λν΄ μκ°ν©λλ€. μ΄ κ·Όμ² μμ μ΄λ° κ°μ‘°μ λν΄ μ΄λ»κ² μκ°
diff --git a/stoqs/utils/Viz/plotting.py b/stoqs/utils/Viz/plotting.py
index 81c278b..cfe679c 100644
--- a/stoqs/utils/Viz/plotting.py
+++ b/stoqs/utils/Viz/plotting.py
@@ -556,6 +556,12 @@ class MeasuredParameter(BaseParameter):
if not self.x and not self.y and not self.z:
self.loadData()
+ if contourParameterID is not None:
+ if not self.clx and not self.cly and not self.clz:
+ self.loadData()
+ self.clx = self.x
+ self.cly = self.y
+ self.clz = self.z
νν contour_qs_mpλ₯Ό μμ±νκ³ λ±κ³ μ 맀κ°λ³μ λ°μ΄ν° κ°μ μ»κΈ° μν΄ loadData()λ₯Ό μ¬μ¬μ©νλ λ° λμμ΄ λλ "ν λΌ κ΅¬λ©"μ λν΄ μμΈν μ€λͺ νλ μ΄ ν μμ² μ μ°Έμ‘°νμΈμ. μ΄μ clx, cly λ° clz λ³μλ₯Ό μ¬μ©νμ¬ λ±κ³ μ μ λ§λ€ μ μμ΅λλ€.
@samuelrey https://github.com/stoqs/stoqs/pull/578 μ κΈ°λ³Έ λΈλμΉλ₯Ό capstone-spring2017
λΈλμΉλ‘ λ³κ²½ν΄μ£ΌμΈμ. μ΄λ₯Ό μννλ λ°©λ²μ λν μ§μΉ¨μ λ€μκ³Ό κ°μ΅λλ€. https://github.com/blog/2224-change-the-base-branch-of-a-pull-request
λ³λμ λΆκΈ°μ μμΌλ―λ‘ μ¦λΆ λ³ν©μ λ μ½κ² κ΄λ¦¬ν μ μμ΅λλ€.
νλ£¨κ° λλ λκΉμ§ μλ£νκ² μ΅λλ€! κ°λ κ²μ΄ μ’λ€.
μ’μ 보μΈλ€! μ΄ μμ μμ² λ 보μμ΅λκΉ?
κ·Έλ¦Όμ΄ μ μ₯λκΈ° μ§μ μ μ½μ ν©λλ€.
if self.contourParameterID is not None:
CS = ax.contour(clx, cly, clz)
ax.clabel(CS, fontsize=9, inline=1)
zμ λͺ¨μμ κ΄ν μ€λ₯κ° λ°μν©λλ€.
λ±κ³ μ λ¬Έμμ λ°λ₯΄λ©΄ x, y λ° zλ λͺ¨μμ΄ λμΌν 2dμ΄κ±°λ x λ° yκ° zμ ν μμ κΈΈμ΄κ° λμΌν 1dμ¬μΌ ν©λλ€.
xi, yi λ° ziκ° μμ±λλ κ²κ³Ό λμΌν λ°©μμΌλ‘ μμ±λ 그리λ λ³μλ₯Ό μ λ¬ν΄μΌ ν©λλ€.
μ€, λλ κ·Έκ²μ 보μλ€. μμμ΄μ!
λ€μμ μ°λ¦¬ μ½λκ° μμ±ν μ μμλ κ²μ μ΄ν΄λ³΄κ² μ΅λλ€. μ΄μ Mikeμ μ λ°μ΄νΈλ‘ μΈν΄ UIμ μ΄λ―Έμ§ νμ§μ΄ λ€λ₯΄κ² λ³΄μΌ κ²μ λλ€. κ·Έλ¬λ μ΄κ²μ΄ CSUMB STOQS νμ΄ μ 곡ν μ μμλ κ²μ λλ€.
CSUMB STOQS νμ΄ μλ£ν μμ μ λν λΉ λ₯Έ μμ½μ μ 곡νκΈ° μν΄ κΈ°μ‘΄ μ½λλ₯Ό νν°λ§νκ³ νμμ λ°λΌ μ‘°μ νμ΅λλ€. μ΄λ¬ν μ‘°μ μ€ νλλ μμ ν μλ‘μ΄ λΌλμ€ λ²νΌ μ΄μ μΆκ°νμ¬ UIμ λ±κ³ μ 맀ν μ΅μ μ΄ μλλ‘ νλ κ²μ΄μμ΅λλ€. μ΄λ¬ν UI λ³κ²½μ μ μ @LeslyGJμ μν΄ μ΄λ£¨μ΄μ‘μ΅λλ€. μλ‘μ΄ νμμ λ°λΌ ν΄λΉ λ²νΌμ λν μ°κ²°λ μ΄λ£¨μ΄μ ΈμΌ νμ΅λλ€. JavaScript @samuelrey λ₯Ό λ³κ²½νλ κ²μ΄ κ·Έ μμ μ λ΄λΉνμ΅λλ€. λ λ€λ₯Έ μ‘°μ μ μλ² μΈ‘ μ½λ λ€μ μλ νμ΄μ¬μ λ°μ΄λ€ λ μ΄λ£¨μ΄μ‘μ΅λλ€. @samuelrey μ @J0S349 λ° @samuelreyλ μλ‘μ΄ ν μ€νΈ μΌμ΄μ€λ₯Ό μμ±νκ±°λ μ½λκ° μ λλ‘ μ λ¬λκ³ λ€μ
κ°μ₯ μ μ©ν λκΈ
μμ μκ΄μ λ§μ§λ§ μ»€λ° . μ΄ μ견μ λμ΄λ λͺ¨λ μμ μ μλ£νμ΅λλ€. μ΄μ μ€μ λ‘ λ°μ΄ν°λ₯Ό νλ‘ν νλ μμ μ νκ³ μμ΅λλ€! plotting.py κ° μμ λ©λλ€.