Flatisfy issueshttps://framagit.org/phyks/Flatisfy/-/issues2021-05-16T14:33:13Zhttps://framagit.org/phyks/Flatisfy/-/issues/139npm run build:prod "Unexpected token: operator (>)"2021-05-16T14:33:13ZSimon Sapinnpm run build:prod "Unexpected token: operator (>)"Running `npm install && npm run build:prod` as instructed prints an error on fd33e5cb3fc174009572686f42cbf5962213e5e4, although the web interface seems to work:
```
> Flatisfy@0.0.1 build:prod /home/user/Flatisfy
> NODE_ENV=production w...Running `npm install && npm run build:prod` as instructed prints an error on fd33e5cb3fc174009572686f42cbf5962213e5e4, although the web interface seems to work:
```
> Flatisfy@0.0.1 build:prod /home/user/Flatisfy
> NODE_ENV=production webpack --colors --progress -p
Hash: 9e96e5f0f903b3cabf54
Version: webpack 2.7.0
Time: 9388ms
Asset Size Chunks Chunk Names
a6137456ed160d7606981aa57c559898.png 696 bytes [emitted]
2273e3d8ad9264b7daa5bdbf8e6b47f8.png 1.47 kB [emitted]
b06871f281fee6b241d60582ae9369b9.ttf 166 kB [emitted]
912ec66d7572ff821749319396470bde.svg 444 kB [emitted] [big]
36d50c1381fda7c71d12b6643cbe1ee0.svg 82 bytes [emitted]
4f0283c6ce28e888000e978e537a6a56.png 1.26 kB [emitted]
674f50d287a8c48dc19ba404d20fe713.eot 166 kB [emitted]
401d815dc206b8dc1b17cd0e37695975.png 2.46 kB [emitted]
44a526eed258222515aa21eaffd14a96.png 618 bytes [emitted]
af7ae505a9eed503f8b8e6982036873e.woff2 77.2 kB [emitted]
fee66e712a8a08eef5805a46892932ad.woff 98 kB [emitted]
bundle.js 3.02 MB 0 [emitted] [big] main
[0] ./~/moment/moment.js 174 kB {0} [built]
[7] ./~/vue-loader/lib/component-normalizer.js 1.27 kB {0} [built]
[12] ./flatisfy/web/js_src/tools/index.js 1.65 kB {0} [built]
[13] ./~/vue/dist/vue.runtime.esm.js 227 kB {0} [built]
[27] (webpack)/buildin/global.js 509 bytes {0} [built]
[223] ./flatisfy/web/js_src/i18n/index.js 1.99 kB {0} [built]
[224] ./flatisfy/web/js_src/router/index.js 1.12 kB {0} [built]
[225] ./flatisfy/web/js_src/store/index.js 805 bytes {0} [built]
[228] ./flatisfy/web/js_src/i18n/en/index.js 2.38 kB {0} [built]
[229] ./flatisfy/web/js_src/i18n/fr/index.js 2.62 kB {0} [built]
[230] ./flatisfy/web/js_src/main.js 808 bytes {0} [built]
[231] ./flatisfy/web/js_src/store/actions.js 3.5 kB {0} [built]
[359] ./flatisfy/web/js_src/views/search.vue 806 bytes {0} [built]
[360] ./flatisfy/web/js_src/views/status.vue 806 bytes {0} [built]
[372] ./~/vue-router/dist/vue-router.esm.js 65.6 kB {0} [built]
+ 426 hidden modules
ERROR in bundle.js from UglifyJs
Unexpected token: operator (>) [bundle.js:31988,20]https://framagit.org/phyks/Flatisfy/-/issues/136NodeJS version bump2021-05-16T13:04:52ZVincent-Xavier JUMELNodeJS version bumpNodeJS 8.X is depreciated and NodeJS 12.X (recommended LTS) is now in Debian.NodeJS 8.X is depreciated and NodeJS 12.X (recommended LTS) is now in Debian.https://framagit.org/phyks/Flatisfy/-/issues/81Package for YunoHost2021-05-16T13:04:00ZPhyksphyks@phyks.mePackage for YunoHosthttps://framagit.org/phyks/Flatisfy/-/issues/134broken backend: logicimmo2021-05-16T13:03:38ZGuillaume Duveaubroken backend: logicimmoThe logicimmo backend is broken, there are lots of timeouts.
I fixed some things in weboob/logicimmo here (https://git.weboob.org/weboob/weboob/merge_requests/366), to fix tests and flatboob. I don't have any timeouts with the test and ...The logicimmo backend is broken, there are lots of timeouts.
I fixed some things in weboob/logicimmo here (https://git.weboob.org/weboob/weboob/merge_requests/366), to fix tests and flatboob. I don't have any timeouts with the test and flatboob, but I still have them with flatisfy.
Any idea?https://framagit.org/phyks/Flatisfy/-/issues/138TypeError in email.send_notification2021-05-16T13:02:37ZSimon SapinTypeError in email.send_notificationIn commit fd33e5cb3fc174009572686f42cbf5962213e5e4, the `import` command logs a number of errors that don’t appear fatal, but then ends with:
```python
Traceback (most recent call last):
File "/usr/alwaysdata/python/3.9.2/lib/python3....In commit fd33e5cb3fc174009572686f42cbf5962213e5e4, the `import` command logs a number of errors that don’t appear fatal, but then ends with:
```python
Traceback (most recent call last):
File "/usr/alwaysdata/python/3.9.2/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/alwaysdata/python/3.9.2/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/user/Flatisfy/flatisfy/__main__.py", line 200, in <module>
main()
File "/home/user/Flatisfy/flatisfy/__main__.py", line 186, in main
cmds.import_and_filter(config, load_from_db=False, new_only=args.new_only)
File "/home/user/Flatisfy/flatisfy/cmds.py", line 209, in import_and_filter
email.send_notification(config, new_flats)
File "/home/user/Flatisfy/flatisfy/email.py", line 100, in send_notification
area = str(int(flat.area))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
```
After this the web interface shows "Last update: 51 years ago" and "No available flats."
This patch seems to allow going past that error:
```diff
diff --git a/flatisfy/email.py b/flatisfy/email.py
index 8fceb4c..d473eaa 100644
--- a/flatisfy/email.py
+++ b/flatisfy/email.py
@@ -97,8 +97,8 @@ def send_notification(config, flats):
for flat in flats:
title = str(flat.title)
flat_id = str(flat.id)
- area = str(int(flat.area))
- cost = int(flat.cost)
+ area = str(int(flat.area or 0))
+ cost = int(flat.cost or 0)
currency = str(flat.currency)
txt += f"- {title}: {website_url}#/flat/{flat_id} "
```https://framagit.org/phyks/Flatisfy/-/issues/137Installation with woob version2021-04-22T19:21:12ZDavid BealInstallation with woob versionReally thanks for this application, I like the use case
Up to now I can't get the application running because of transition from weboob to woob.
I had a mismatch version problem between 3.1 in woob and 2.1 required in flatisfy.
I also...Really thanks for this application, I like the use case
Up to now I can't get the application running because of transition from weboob to woob.
I had a mismatch version problem between 3.1 in woob and 2.1 required in flatisfy.
I also have failed when I tried to set woob source to weboob commit/tag.
I don't know if there is a lot job to make it works with woob 3.0 at least.
Probably it could be convenient ! ?https://framagit.org/phyks/Flatisfy/-/issues/135Python3 compatibility2021-01-03T11:46:45ZVincent-Xavier JUMELPython3 compatibilityThe docker image pulls a python:2 version, but weboob-latest doesn't support python2 anymore.The docker image pulls a python:2 version, but weboob-latest doesn't support python2 anymore.https://framagit.org/phyks/Flatisfy/-/issues/100Take area field into account when detecting duplicates2019-09-27T21:10:27ZPhyksphyks@phyks.meTake area field into account when detecting duplicates**STR**:
Posts: https://www.selogerneuf.com/annonces/investissement/appartement/rennes-35/112639917/ and https://www.selogerneuf.com/annonces/investissement/appartement/rennes-35/112636307/
Both posts have indeed the same price, addres...**STR**:
Posts: https://www.selogerneuf.com/annonces/investissement/appartement/rennes-35/112639917/ and https://www.selogerneuf.com/annonces/investissement/appartement/rennes-35/112636307/
Both posts have indeed the same price, address, text and photos but they are actually in the same building, with a different area : 62.51 vs 62.45 square meters.
**What happened**:
> Found duplicates using deep detection: (112636307@seloger, 112639917@seloger). Score is 20.
**What I expect**:
Since the area is different, that surely means the posts are not duplicates, they probably just are in the same building.https://framagit.org/phyks/Flatisfy/-/issues/132Links for buying on logic-immo are broken2019-07-15T17:07:20ZAlexandre LissyLinks for buying on logic-immo are brokenConfigured for searching house to buy, all links for logic-immo are generated with `detail-location-UID` instead of `detail-vente-UID`.Configured for searching house to buy, all links for logic-immo are generated with `detail-location-UID` instead of `detail-vente-UID`.https://framagit.org/phyks/Flatisfy/-/issues/133Problem with weboob2019-03-29T08:38:21ZJulien WajsbergProblem with weboobHey,
today I updated weboob (because "seloger" doesn't work anymore for me and I wanted to try to fix it), and now I get this problem when I try to launch flatisfy:
```
$ python -m flatisfy import -v --config config/config.json ...Hey,
today I updated weboob (because "seloger" doesn't work anymore for me and I wanted to try to fix it), and now I get this problem when I try to launch flatisfy:
```
$ python -m flatisfy import -v --config config/config.json INFO:flatisfy.config:Initializing configuration...
INFO:flatisfy.config:Config has been fully initialized.
INFO:flatisfy.fetch:Loading flats for constraint default...
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/flatisfy/git/flatisfy/flatisfy/__main__.py", line 228, in <module>
main()
File "/home/flatisfy/git/flatisfy/flatisfy/__main__.py", line 214, in main
cmds.import_and_filter(config, load_from_db=False)
File "flatisfy/cmds.py", line 142, in import_and_filter
fetched_flats = fetch.fetch_flats(config)
File "flatisfy/fetch.py", line 270, in fetch_flats
with WebOOBProxy(config) as webOOB_proxy:
File "flatisfy/fetch.py", line 86, in __init__
for module in backends
File "/home/flatisfy/.virtualenvs/flatisfy/local/lib/python2.7/site-packages/weboob/core/ouiboube.py", line 147, in load_backend
backend = self.build_backend(module_name, params, storage, name)
File "/home/flatisfy/.virtualenvs/flatisfy/local/lib/python2.7/site-packages/weboob/core/ouiboube.py", line 110, in build_backend
module = self.modules_loader.get_or_load_module(module_name)
File "/home/flatisfy/.virtualenvs/flatisfy/local/lib/python2.7/site-packages/weboob/core/modules.py", line 114, in get_or_load_module
self.load_module(module_name)
File "/home/flatisfy/.virtualenvs/flatisfy/local/lib/python2.7/site-packages/weboob/core/modules.py", line 160, in load_module
% (module.version, self.version))
weboob.exceptions.ModuleLoadError: Module requires Weboob 1.6, but you use Weboob 1.5. Hint: use 'weboob-config update'
```
I use `"modules_path": "/home/flatisfy/git/weboob/modules/"` in my config, this worked fine until now.
I'm a super newbie in Python so I don't really know what to do. Things I already tried:
* running `weboob-config update` obviously :)
* running `python setup.py install` in weboob's directory
Any idea to fix it, or at least to debug it? Maybe I can remove the `modules_path` option for now? Or try to reinstall weboob?https://framagit.org/phyks/Flatisfy/-/issues/14Webserver should be restarted to flush external changes to db2019-03-15T15:45:35ZPhyksphyks@phyks.meWebserver should be restarted to flush external changes to dbhttps://framagit.org/phyks/Flatisfy/-/issues/131StopIteration exception in tools.batch() under Python 3.7.12018-11-07T14:45:52ZAdrien GuattoStopIteration exception in tools.batch() under Python 3.7.1Hello,
Running `python -m flatisfy import --config config.json` under Python 3.7.1 gives me the following error:
```
Traceback (most recent call last):
File "/home/guatto/src/Flatisfy/flatisfy/tools.py", line 175, in batch
yield ...Hello,
Running `python -m flatisfy import --config config.json` under Python 3.7.1 gives me the following error:
```
Traceback (most recent call last):
File "/home/guatto/src/Flatisfy/flatisfy/tools.py", line 175, in batch
yield itertools.chain([next(batchiter)], batchiter)
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/guatto/src/Flatisfy/flatisfy/__main__.py", line 228, in <module>
main()
File "/home/guatto/src/Flatisfy/flatisfy/__main__.py", line 214, in main
cmds.import_and_filter(config, load_from_db=False)
File "/home/guatto/src/Flatisfy/flatisfy/cmds.py", line 141, in import_and_filter
fetched_flats = fetch.fetch_flats(config)
File "/home/guatto/src/Flatisfy/flatisfy/fetch.py", line 271, in fetch_flats
queries = webOOB_proxy.build_queries(constraint)
File "/home/guatto/src/Flatisfy/flatisfy/fetch.py", line 142, in build_queries
for cities_batch in tools.batch(matching_cities, 3):
RuntimeError: generator raised StopIteration
```
It *seems* that wrapping the loop in tools.batch within a try block fixes the problem. But I'm no Python programmer and can't tell whether that's the right solution.
```python
def batch(iterable, size):
sourceiter = iter(iterable)
try:
while True:
batchiter = itertools.islice(sourceiter, size)
yield itertools.chain([next(batchiter)], batchiter)
except StopIteration:
pass
```https://framagit.org/phyks/Flatisfy/-/issues/130Migrations not run on database2018-10-16T21:11:09ZAntoineMigrations not run on databaseI have run the import command and it looks like the database was not fully migrated to the new model :
```
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname...I have run the import command and it looks like the database was not fully migrated to the new model :
```
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/tonio/Code/Flatisfy/flatisfy/__main__.py", line 228, in <module>
main()
File "/home/tonio/Code/Flatisfy/flatisfy/__main__.py", line 214, in main
cmds.import_and_filter(config, load_from_db=False)
File "flatisfy/cmds.py", line 160, in import_and_filter
for flat in session.query(flat_model.Flat).all():
File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2703, in all
return list(self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2855, in __iter__
return self._execute_and_instances(context)
File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2878, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 945, in execute
return meth(self, multiparams, params)
File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
compiled_sql, distilled_params
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
context)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1402, in _handle_dbapi_exception
exc_info
File "/usr/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
context)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: flats.is_expired [SQL: u'SELECT flats.id AS flats_id, flats.area AS flats_area, flats.bedrooms AS flats_bedrooms, flats.cost AS flats_cost, flats.currency AS flats_currency, flats.utilities AS flats_utilities, flats.date AS flats_date, flats.details AS flats_details, flats.location AS flats_location, flats.phone AS flats_phone, flats.photos AS flats_photos, flats.rooms AS flats_rooms, flats.station AS flats_station, flats.text AS flats_text, flats.title AS flats_title, flats.urls AS flats_urls, flats.merged_ids AS flats_merged_ids, flats.notes AS flats_notes, flats.notation AS flats_notation, flats.is_expired AS flats_is_expired, flats.flatisfy_stations AS flats_flatisfy_stations, flats.flatisfy_postal_code AS flats_flatisfy_postal_code, flats.flatisfy_time_to AS flats_flatisfy_time_to, flats.flatisfy_constraint AS flats_flatisfy_constraint, flats.status AS flats_status, flats.visit_date AS flats_visit_date \nFROM flats']
```Phyksphyks@phyks.mePhyksphyks@phyks.mehttps://framagit.org/phyks/Flatisfy/-/issues/128Meilleur positionnement pour certains arrondissements2018-10-15T10:11:22ZJulien WajsbergMeilleur positionnement pour certains arrondissementsCertains arrondissements, notoirement Paris 12 ou Paris 16, sont assez mal positionnés car ils comprennent respectivement le Bois de Vincennes et le Bois de Boulogne, qui ne sont pas pertinents pour la recherche d'appartement. Cela pose ...Certains arrondissements, notoirement Paris 12 ou Paris 16, sont assez mal positionnés car ils comprennent respectivement le Bois de Vincennes et le Bois de Boulogne, qui ne sont pas pertinents pour la recherche d'appartement. Cela pose un problème pour le filtrage des stations de métro, comme vu dans l'issue https://framagit.org/phyks/Flatisfy/issues/127.
Il serait bon de pouvoir avoir des positionnements qui ne prennent pas en compte ces deux zones.https://framagit.org/phyks/Flatisfy/-/issues/129fetch command broken2018-10-15T06:51:47ZAntoinefetch command brokenWhen I run the fetch command, I get this resut:
```
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy....When I run the fetch command, I get this resut:
```
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/tonio/Code/Flatisfy/flatisfy/__main__.py", line 228, in <module>
main()
File "/home/tonio/Code/Flatisfy/flatisfy/__main__.py", line 184, in main
tools.pretty_json(fetched_flats)
File "flatisfy/tools.py", line 151, in pretty_json
sort_keys=True)
File "/usr/lib/python2.7/site-packages/simplejson/__init__.py", line 399, in dumps
**kw).encode(obj)
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 298, in encode
chunks = list(chunks)
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 696, in _iterencode
for chunk in _iterencode_dict(o, _current_indent_level):
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 652, in _iterencode_dict
for chunk in chunks:
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 531, in _iterencode_list
for chunk in chunks:
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 652, in _iterencode_dict
for chunk in chunks:
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 531, in _iterencode_list
for chunk in chunks:
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 652, in _iterencode_dict
for chunk in chunks:
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 716, in _iterencode
o = _default(o)
File "flatisfy/tools.py", line 131, in default
return super(DateAwareJSONEncoder, self).default(o)
File "/usr/lib/python2.7/site-packages/simplejson/encoder.py", line 273, in default
o.__class__.__name__)
TypeError: Object of type ImageHash is not JSON serializable
```https://framagit.org/phyks/Flatisfy/-/issues/127Meilleure reconnaissance des transports pour les annonces pap2018-10-15T06:38:33ZJulien WajsbergMeilleure reconnaissance des transports pour les annonces papJe sais que c'est plutôt un bug weboob mais je voulais le poser quelque part.
Sur pap, une annonce telle que https://www.pap.fr/annonces/appartement-paris-r405500873 ne semble pas retourner d'info de transports alors qu'ils semblent bie...Je sais que c'est plutôt un bug weboob mais je voulais le poser quelque part.
Sur pap, une annonce telle que https://www.pap.fr/annonces/appartement-paris-r405500873 ne semble pas retourner d'info de transports alors qu'ils semblent bien encodés dans la page.
En l'occurrence:
```html
<!-- Metro -->
<ul class="item-transports">
<li><span class="label">Faidherbe - Chaligny</span> <span class="icon metro-0"></span> <span class="icon metro-8"></span></li>
</ul>
<ul class="item-transports">
<li><span class="label">Ledru-Rollin</span> <span class="icon metro-0"></span> <span class="icon metro-8"></span></li>
</ul>
<ul class="item-transports"><li><span class="label">Reuilly - Diderot</span> <span class="icon metro-0"></span> <span class="icon metro-8"></span> <span class="icon metro-1"></span></li>
</ul>
<!-- //Metro -->
```
![image](/uploads/828dfa753b56e7e2803bf5afc47886ec/image.png)https://framagit.org/phyks/Flatisfy/-/issues/124Filter out expired ads2018-10-13T15:51:54ZJulien WajsbergFilter out expired adsHey,
I couldn't find how to filter out the flats that are expired. Is there a way already ? Or is the best way to delete the DB and import once again ?Hey,
I couldn't find how to filter out the flats that are expired. Is there a way already ? Or is the best way to delete the DB and import once again ?https://framagit.org/phyks/Flatisfy/-/issues/126rèm 6662018-10-06T15:56:50Ztot remrèm 666Trong khi không phải luôn luôn được công nhận như vậy, rèm cửa trên cùng là một lựa chọn tuyệt vời cho phòng tắm. Nếu được sử dụng đúng cách, nó sẽ bổ sung một cảm giác tinh tế, sáng tạo, loại cảm ứng giúp phòng tắm của bạn nổi bật. Bài ...Trong khi không phải luôn luôn được công nhận như vậy, rèm cửa trên cùng là một lựa chọn tuyệt vời cho phòng tắm. Nếu được sử dụng đúng cách, nó sẽ bổ sung một cảm giác tinh tế, sáng tạo, loại cảm ứng giúp phòng tắm của bạn nổi bật. Bài viết này sẽ khám phá những cách tốt nhất, sáng tạo nhất để sử dụng những rèm cửa này cho phòng tắm. Tuy nhiên, trước tiên chúng ta hãy giải thích các tab thực sự là gì. <a ref ="nofollow" href="https://remcuatot.com.vn/bai-viet/rem-cua-dep/"><b>rèm cửa phòng ngủ</b></a>
**Tab Top Rèm cửa là gì?**
Tab rèm cửa trên cùng tham chiếu đến màn cửa được treo trên thanh, hoặc cột, sử dụng các vòng, hoặc các tab, ở phía trên cùng của bảng điều khiển. Nó là một thiết kế rất linh hoạt, cho phép các nhà thiết kế sáng tạo và cho các màn cửa được sử dụng theo nhiều cách.
![image](/uploads/8428c2cdd9c5ddba7e743bd1464a07d3/image.png)
Trong thực tế, chỉ cần sự lựa chọn của thanh treo rèm của bạn trên cung cấp cho bạn rất nhiều cơ hội. Bạn sẽ ngạc nhiên bởi sự khác biệt mà nó tạo ra, khi bạn đã tìm thấy loại que hoàn hảo, suiting và kết hợp cái nhìn mà bạn đang hướng đến. Nhưng làm thế nào bạn có thể khai thác tính linh hoạt của rèm tắm vòi sen trên đỉnh?
Làm thế nào để tạo ra một bức màn tắm tùy chỉnh bằng cách sử dụng những rèm cửa
Một cách sáng tạo để sử dụng những rèm cửa trong phòng tắm, là tạo ra một bức màn tắm tùy chỉnh. Đây là cách bạn làm điều đó. <a ref ="nofollow" href="https://www.linkedin.com/pulse/cách-may-rèm-cửa-đơn-giản-mà-vẫn-đẹp-hoang-the-huynh"><b>cách may rèm cửa</b></a>
Trong khu vực tắm, bạn chỉ cần chạy một thanh thứ hai trên. Trên thanh bên trong, bạn treo khăn tắm, trên thanh bên ngoài bạn treo rèm cửa sổ trang trí trên cùng. Bộ khăn tắm bên trong ngăn không cho rèm cửa bên ngoài bị ướt, trong khi bức màn bên ngoài mang lại một cảm giác đầy phong cách và sáng tạo.
**Tab Rèm Cửa cho Phòng Tắm của bạn Windows**
Nếu phòng tắm của bạn có cửa sổ nhỏ, bạn có thể sử dụng rèm cửa bảng điều khiển ngắn hơn để kết nối với các cửa sổ này. Nó là một cách sử dụng truyền thống, nhưng nếu bạn đã chọn đúng rèm cửa, điều này sẽ tạo cho phòng tắm của bạn một cảm giác phong cách và hiện đại và làm cho căn phòng trở nên độc đáo. <a ref ="nofollow" href="https://www.surveymonkey.com/r/NMWN75B"><b>nguồn tại Các loại rèm y tế bệnh viện</b></a>
**Sử dụng rèm lót**
Một lời khuyên cuối cùng là sử dụng rèm cửa trên cùng của hộp lót cho phòng tắm. Nguyên nhân? Vâng, nó thực sự khá đơn giản, lót rèm cung cấp sự riêng tư hơn, trong đó, vì lý do rõ ràng, được đánh giá cao trong phòng tắm.
Nếu bạn đang cố gắng sửa sang lại phòng tắm của mình trên một ngân sách tương đối eo hẹp, đó là những điều nhỏ nhặt như những gì được đề cập trong bài viết này sẽ làm cho đồng đô la của bạn kiếm được một chặng đường dài trong việc biến phòng tắm của bạn thành một thiên đường mới, phong cách và thanh lịch .https://framagit.org/phyks/Flatisfy/-/issues/125Make it easier to support letsencrypt2018-09-25T21:04:46ZJulien WajsbergMake it easier to support letsencryptLetsencrypt protocol involves writing some static file to `/.well-known/acme-challenge/` so that it's retrieved by letsencrypt server. I configured my server so that my letsencrypt script can write in `<path to flatisfy>/flatisfy/web/sta...Letsencrypt protocol involves writing some static file to `/.well-known/acme-challenge/` so that it's retrieved by letsencrypt server. I configured my server so that my letsencrypt script can write in `<path to flatisfy>/flatisfy/web/static/.well-known/acme-challenge/` but that directory isn't served by the bottle app because all static files are whitelisted in `flatisfy/web/app.py`.https://framagit.org/phyks/Flatisfy/-/issues/123Error building the app on ARM aarch642018-09-15T09:44:34ZolivierError building the app on ARM aarch64Hello,
Can you help me ?
I have this error :
```
python -m flatisfy build-data --config config.json
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader...Hello,
Can you help me ?
I have this error :
```
python -m flatisfy build-data --config config.json
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/mnt/sata/flatsfy/Flatisfy/flatisfy/__main__.py", line 228, in <module>
main()
File "/mnt/sata/flatsfy/Flatisfy/flatisfy/__main__.py", line 152, in main
config = flatisfy.config.load_config(args, check_with_data=False)
File "flatisfy/config.py", line 314, in load_config
config_validation = validate_config(config_data, check_with_data)
File "flatisfy/config.py", line 159, in validate_config
assert constraint["type"].upper() in POSTS_TYPES.__members__
AttributeError: type object 'Enum' has no attribute '__members__'
root@x96:/mnt/sata/flatsfy/Flatisfy#
```
here is my config :
```
{
"backends": null,
"constraints": {
"default": {
"area": [
45,
110
],
"bedrooms": [
1,
4
],
"cost": [
200,
650
],
"description_should_contain": [],
"house_types": ["APART","HOUSE"],
"minimum_nb_photos": 1,
"postal_codes": ["21000", "21100"],
"rooms": [
1,
null
],
"time_to": {},
"type": "RENT"
}
},
"data_directory": "/flatisfy",
"database": null,
"duplicate_image_hash_threshold": 10,
"duplicate_threshold": 15,
"host": "0.0.0.0",
"max_distance_housing_station": 1500,
"max_entries": null,
"modules_path": null,
"navitia_api_key": null,
"passes": 3,
"port": 8080,
"search_index": null,
"send_email": false,
"serve_images_locally": true,
"smtp_from": "noreply@flatisfy.org",
"smtp_port": 25,
"smtp_server": "localhost",
"smtp_to": [],
"store_personal_data": false,
"webserver": null,
"website_url": "http://192.168.1.98:8080"
}
```