Re: logging admin accesses

2023-12-19 Thread Larry Martell
On Mon, Dec 18, 2023 at 7:23 PM Mike Dewhirst  wrote:
>
> On 19/12/2023 9:51 am, Larry Martell wrote:
>
> Hmmm, in my case I do not see any models for those in any of my models.py 
> files. Where would I expect to find them?
>
>
> You have to write them yourself.

Yeah, thanks. I know I can create them myself. I thought you were
saying they were already created by django.

The best way is to run manage.py inspectdb > models.txt then extract
the m2m models from there. In theory and provided you follow the
advice at the top of the output ...
>
> # This is an auto-generated Django model module.
> # You'll have to do the following manually to clean this up:
> #   * Rearrange models' order
> #   * Make sure each model has one field with primary_key=True
> #   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the 
> desired behavior
> #   * Remove `managed = False` lines if you wish to allow Django to create, 
> modify, and delete the table
> # Feel free to rename the models, but don't rename db_table values or field 
> names.
> from django.db import models
>
>
> ... just having the model declarations should not require a migration. 
> Haven't checked that myself.
>
>
> On Mon, Dec 18, 2023 at 5:26 PM Mike Dewhirst  wrote:
>>
>> Those many-to-many relations most certainly can have models and all of mine 
>> always do.
>>
>> It is more explicit to do so but more importantly they generally carry 
>> essential real-world information about the relationship itself.
>>
>> I haven't looked at django-simple history beyond deciding to roll my own but 
>> it may well cover m2m tables if you add the models explicitly.
>>
>>
>> --
>> (Unsigned mail from my phone)
>>
>>
>>
>>  Original message 
>> From: Larry Martell 
>> Date: 19/12/23 08:18 (GMT+10:00)
>> To: django-users@googlegroups.com
>> Subject: Re: logging admin accesses
>>
>> django-simple-history is close to what we need. The one issue I see
>> (so far) is that it does not support tables that are created behind
>> the scenes by django to handle one to many relations that do not have
>> models. Does anyone know how to maintain history on those?
>>
>> On Mon, Dec 18, 2023 at 2:48 PM Larry Martell  
>> wrote:
>> >
>> > No, I have not see django-simple-history - thanks for the pointer - will 
>> > check it out.
>> >
>> > On Fri, Dec 15, 2023 at 9:02 PM Mike Dewhirst  
>> > wrote:
>> >>
>> >> Just thinking about it again ... you could look at the Admin source to 
>> >> see how it is working now and perhaps find a way to include the missing 
>> >> info in a pre-save signal.
>> >>
>> >> Also, I found django-simple-history online but I suppose you have seen 
>> >> that already.
>> >>
>> >> M
>> >>
>> >> --
>> >> (Unsigned mail from my phone)
>> >>
>> >>
>> >>
>> >>  Original message 
>> >> From: Mike Dewhirst 
>> >> Date: 16/12/23 12:38 (GMT+10:00)
>> >> To: django-users@googlegroups.com
>> >> Subject: Re: logging admin accesses
>> >>
>> >> You seem to be asking for a full history 'system'.
>> >>
>> >> I think the Admin history exists to show a bit of history with a link to 
>> >> go back to the change form where it happened.
>> >>
>> >> Full history needs to be specified fairly carefully so it doesn't bog the 
>> >> system down. For example, every write costs a performance hit. Also, how 
>> >> resilient must it be to cope with database schema changes? How is it 
>> >> going to be used in practice? What are the benefits and are they worth 
>> >> the effort.
>> >>
>> >> I have worked through some of this in my current project and decided to 
>> >> create separate 'mirror' tables for only the critical information and 
>> >> automate data collection for others in a plain text field for archival.
>> >>
>> >> It can be quite open ended and might reward very aggressive specification.
>> >>
>> >> Cheers
>> >>
>> >> Mike
>> >>
>> >>
>> >>
>> >> --
>> >> (Unsigned mail from my phone)
>> >>
>> >>
>> >>
>> >>  Original message 
>> >> From: Larry Martell 
>> >> Date: 16/12/23 01:47 (GMT+10:00)
>> >> To: django-users@googlegroups.com
>> >> Subject: Re: logging admin accesses
>> >>
>> >> On Thu, Dec 14, 2023 at 5:49 PM Mike Dewhirst  
>> >> wrote:
>> >>>
>> >>> Top posting because of phone email client.
>> >>>
>> >>> Have you seen the Admin history? Might be already logged for you.
>> >>
>> >>
>> >> Thanks, this is useful, but it does not seem to be logging everything. We 
>> >> have a custom user admin page that updates a few models in addition to 
>> >> User: UserInfo, UserExtendProduct, and UserRole. If I add a new user I 
>> >> see this:
>> >>
>> >> +---+-+-+-+-+-+
>> >> | object_id | object_repr | action_flag | change_message  
>> >>   
>> >>   

Re: Project together

2023-12-19 Thread Victor Beltran
Honor?, respeto? Algo que nunca  caminaraa su lado

El jueves, 14 de diciembre de 2023 a la(s) 6:12:28 a.m. UTC-8, Goke Aruna 
escribió:

> My number is +2348090444023 <+234%20809%20044%204023>
>
>
> On Thu, 23 Nov 2023, 7:13 pm Youssef Bachraoui,  
> wrote:
>
>> Hi developer i search to make a group on WhatsApp to begin a project 
>> together anyone interested about that?
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/d5244e76-6bd3-4bde-bf31-a72720bee1acn%40googlegroups.com
>>  
>> 
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/552a9e60-3763-41c8-a04e-09aa49317354n%40googlegroups.com.


Re: Project together

2023-12-19 Thread Victor Beltran
Has lo que te parezca conveniente, yo no juego.

El jueves, 14 de diciembre de 2023 a la(s) 6:12:28 a.m. UTC-8, Goke Aruna 
escribió:

> My number is +2348090444023 <+234%20809%20044%204023>
>
>
> On Thu, 23 Nov 2023, 7:13 pm Youssef Bachraoui,  
> wrote:
>
>> Hi developer i search to make a group on WhatsApp to begin a project 
>> together anyone interested about that?
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/d5244e76-6bd3-4bde-bf31-a72720bee1acn%40googlegroups.com
>>  
>> 
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/f1383d97-6533-4ce1-b02c-8eba6ba65396n%40googlegroups.com.


Re: Project together

2023-12-19 Thread Victor Beltran
Mejor les prestó una soga?

El jueves, 14 de diciembre de 2023 a la(s) 6:12:28 a.m. UTC-8, Goke Aruna 
escribió:

> My number is +2348090444023 <+234%20809%20044%204023>
>
>
> On Thu, 23 Nov 2023, 7:13 pm Youssef Bachraoui,  
> wrote:
>
>> Hi developer i search to make a group on WhatsApp to begin a project 
>> together anyone interested about that?
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/d5244e76-6bd3-4bde-bf31-a72720bee1acn%40googlegroups.com
>>  
>> 
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/c3f20ac0-cab5-4164-a7ff-db766c8da7c0n%40googlegroups.com.


Re: Project together

2023-12-19 Thread Victor Beltran

El hombre sin palabra es como una basura
El jueves, 14 de diciembre de 2023 a la(s) 6:12:28 a.m. UTC-8, Goke Aruna 
escribió:

> My number is +2348090444023 <+234%20809%20044%204023>
>
>
> On Thu, 23 Nov 2023, 7:13 pm Youssef Bachraoui,  
> wrote:
>
>> Hi developer i search to make a group on WhatsApp to begin a project 
>> together anyone interested about that?
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/d5244e76-6bd3-4bde-bf31-a72720bee1acn%40googlegroups.com
>>  
>> 
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/1ec9f527-660c-40ee-9c06-1d75a2c5d304n%40googlegroups.com.


Raising StopIteration causes Django to become completely unresponsive

2023-12-19 Thread Shaheed Haque
Hi,

I'm running Django 4.2.7 with Python 3.11 on Ubuntu on my development
setup (so no gunicorn, nginx etc, just standalone Django). I just ran
into the following issue which, once it occurs, causes Django to
become completely unresponsive:

=
2023-12-19 16:07:02,763 [ERROR] asyncio: Exception in callback
_chain_future.._set_state(,
) at /usr/lib/python3.11/async
io/futures.py:381
handle: ._set_state(, ) at
/usr/lib/python3.11/asyncio/futures.py:381>
Traceback (most recent call last):
 File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
   self._context.run(self._callback, *self._args)
 File "/usr/lib/python3.11/asyncio/futures.py", line 383, in _set_state
   _copy_future_state(other, future)
 File "/usr/lib/python3.11/asyncio/futures.py", line 359, in _copy_future_state
   dest.set_exception(_convert_future_exc(exception))
TypeError: StopIteration interacts badly with generators and cannot be
raised into a Future
=

Once this happens, Django becomes unresponsive (which is what I guess
the dire wording of the exception is hinting at). A trivial reproducer
looks like this:

=
def post(self, request: HttpRequest, *args, **kwargs):
x = next(iter({}.items()))
...
=

Obviously, with an empty dictionary, the next() on the iter()
immediately raises StopIteration, which in turn causes the traceback
above.

In the particular case at hand, the empty dictionary arises for
artificial reasons, and so is not a big concern. However, my code does
have scattered references to next() and my concern is that Django
itself becomes unresponsive.

Am I doing something silly? Is it expected that Django will actually
become unresponsive in such cases?

Advice appreciated.

Thanks, Shaheed

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAHAc2jemn9R%3Ds-%2BC06-5oCoZkEyQ_%2BQUyjY%3D%2BW1%3DOzxK%2BxXuTQ%40mail.gmail.com.


Re: Error while running '$ python manage.py collectstatic --noinput'.

2023-12-19 Thread ram.mu...@gmail.com
Hi Ihor,

Thank you for your email. We do not have any reference to heroku but 
Digital Oceanś App platform is using heroku. We resolved  the above error 
by adding this environment variable:

DISABLE_COLLECTSTATIC = 1
But we are planning to enable this once the main deployment is done.

Best Regards,
~Ram


On Monday, December 18, 2023 at 3:02:47 PM UTC-7 Ihor Dmytrenko wrote:

> Why you have heroku in your log? Remove all old dependency configs in your 
> settings first and then you need specify 
>
> ```python
> STATICFILES_DIRS = [
> os.path.join(BASE_DIR, 'static'),
> ]
>
> STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
> STATIC_URL = '/static/'
>
> HOME_DIRECTORY_SELF_STORAGE = os.path.expanduser('~')
> MEDIA_ROOT = os.path.join(HOME_DIRECTORY_SELF_STORAGE, 'public_html/')
> MEDIA_URL = '/media/'
> DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
> ```
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/dd8bd37a-b000-4872-b56b-06487410665an%40googlegroups.com.


Re: logging admin accesses

2023-12-19 Thread Mike Dewhirst
I was saying Django's inspectdb will write them for you.M--(Unsigned mail from 
my phone)
 Original message From: Larry Martell  
Date: 20/12/23  00:51  (GMT+10:00) To: django-users@googlegroups.com Subject: 
Re: logging admin accesses On Mon, Dec 18, 2023 at 7:23 PM Mike Dewhirst 
 wrote:>> On 19/12/2023 9:51 am, Larry Martell wrote:>> 
Hmmm, in my case I do not see any models for those in any of my models.py 
files. Where would I expect to find them?>>> You have to write them 
yourself.Yeah, thanks. I know I can create them myself. I thought you 
weresaying they were already created by django.The best way is to run manage.py 
inspectdb > models.txt then extractthe m2m models from there. In theory and 
provided you follow theadvice at the top of the output ...>> # This is an 
auto-generated Django model module.> # You'll have to do the following manually 
to clean this up:> #   * Rearrange models' order> #   * Make sure each model 
has one field with primary_key=True> #   * Make sure each ForeignKey and 
OneToOneField has `on_delete` set to the desired behavior> #   * Remove 
`managed = False` lines if you wish to allow Django to create, modify, and 
delete the table> # Feel free to rename the models, but don't rename db_table 
values or field names.> from django.db import models>>> ... just having the 
model declarations should not require a migration. Haven't checked that 
myself.>>> On Mon, Dec 18, 2023 at 5:26 PM Mike Dewhirst 
 wrote: Those many-to-many relations most certainly 
can have models and all of mine always do. It is more explicit to do so but 
more importantly they generally carry essential real-world information about 
the relationship itself. I haven't looked at django-simple history beyond 
deciding to roll my own but it may well cover m2m tables if you add the models 
explicitly.>> -->> (Unsigned mail from my phone)  Original 
message >> From: Larry Martell >> Date: 
19/12/23 08:18 (GMT+10:00)>> To: django-users@googlegroups.com>> Subject: Re: 
logging admin accesses django-simple-history is close to what we need. The 
one issue I see>> (so far) is that it does not support tables that are created 
behind>> the scenes by django to handle one to many relations that do not 
have>> models. Does anyone know how to maintain history on those? On Mon, 
Dec 18, 2023 at 2:48 PM Larry Martell  wrote:>> >>> > 
No, I have not see django-simple-history - thanks for the pointer - will check 
it out.>> >>> > On Fri, Dec 15, 2023 at 9:02 PM Mike Dewhirst 
 wrote:>>  >> Just thinking about it again ... you 
could look at the Admin source to see how it is working now and perhaps find a 
way to include the missing info in a pre-save signal.>>  >> Also, I found 
django-simple-history online but I suppose you have seen that already.>>  
>> M>>  >> -->> >> (Unsigned mail from my phone)>>    >> 
 Original message >> >> From: Mike Dewhirst 
>> >> Date: 16/12/23 12:38 (GMT+10:00)>> >> To: 
django-users@googlegroups.com>> >> Subject: Re: logging admin accesses>>  
>> You seem to be asking for a full history 'system'.>>  >> I think the 
Admin history exists to show a bit of history with a link to go back to the 
change form where it happened.>>  >> Full history needs to be specified 
fairly carefully so it doesn't bog the system down. For example, every write 
costs a performance hit. Also, how resilient must it be to cope with database 
schema changes? How is it going to be used in practice? What are the benefits 
and are they worth the effort.>>  >> I have worked through some of this in 
my current project and decided to create separate 'mirror' tables for only the 
critical information and automate data collection for others in a plain text 
field for archival.>>  >> It can be quite open ended and might reward very 
aggressive specification.>>  >> Cheers>>  >> Mike>>    >> 
-->> >> (Unsigned mail from my phone)>>    >>  Original 
message >> >> From: Larry Martell >> >> Date: 
16/12/23 01:47 (GMT+10:00)>> >> To: django-users@googlegroups.com>> >> Subject: 
Re: logging admin accesses>>  >> On Thu, Dec 14, 2023 at 5:49 PM Mike 
Dewhirst  wrote:>> > >>> Top posting because of 
phone email client.>> > >>> Have you seen the Admin history? Might be 
already logged for you.>>   >> Thanks, this is useful, but it does not 
seem to be logging everything. We have a custom user admin page that updates a 
few models in addition to User: UserInfo, UserExtendProduct, and UserRole. If I 
add a new user I see this:>>  >> 
+---+-+-+-+-+-+>>
 >> | object_id | object_repr | action_flag | change_message

Re: activate source my_env/bin/activate

2023-12-19 Thread 'Vip Busine' via Django users
day la nhom  https://groups.google.com/g/django-users/c/959lKG6Oreg
Vào lúc 00:50:52 UTC+7 ngày Thứ Năm, 16 tháng 11, 2023, Lutaaya Jamil đã 
viết:

> Do as Mr. Jung said, and ensure to be in the same folder where your 
> virtual env is
> On Wednesday, 15 November 2023 at 18:34:04 UTC+3 Sebastian Jung wrote:
>
>> Linux is case sensitive... Try source
>>
>> william Kachuma  schrieb am Mi., 15. Nov. 2023, 16:31:
>>
>>> good day 
>>>
>>> i am experiencing problem when trying to activate my_env, can someone 
>>> please assit me
>>>
>>> Command 'Source' not found, did you mean:
>>>   command 'gource' from deb gource (0.54-1)
>>> Try: sudo apt install 
>>>
>>> kind regards
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to django-users...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/django-users/f70ed7d8-01ba-4b8f-a8f0-5c409146b929n%40googlegroups.com
>>>  
>>> 
>>> .
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/ae249f6b-b302-4c0d-92ce-7e6d2549d562n%40googlegroups.com.


Re: logging admin accesses

2023-12-19 Thread Larry Martell
I got this working. I had to add history =
HistoricalRecords(m2m_fields=[products]) to the models with the M2M
relationships. Did not see that in the docs anywhere.


On Tue, Dec 19, 2023 at 2:17 PM Larry Martell 
wrote:

> After creating the models for the m2m tables the changes to them are
> not tracked by django-simple history. Could it be that Django is not
> using the ORM to update these tables? How could it, since the models
> did not exist before I created them today. If the updates are not
> through the ORM django-simple history may not be able to see them.
>
> On Tue, Dec 19, 2023 at 8:50 AM Larry Martell 
> wrote:
> >
> > On Mon, Dec 18, 2023 at 7:23 PM Mike Dewhirst 
> wrote:
> > >
> > > On 19/12/2023 9:51 am, Larry Martell wrote:
> > >
> > > Hmmm, in my case I do not see any models for those in any of my
> models.py files. Where would I expect to find them?
> > >
> > >
> > > You have to write them yourself.
> >
> > Yeah, thanks. I know I can create them myself. I thought you were
> > saying they were already created by django.
> >
> > The best way is to run manage.py inspectdb > models.txt then extract
> > the m2m models from there. In theory and provided you follow the
> > advice at the top of the output ...
> > >
> > > # This is an auto-generated Django model module.
> > > # You'll have to do the following manually to clean this up:
> > > #   * Rearrange models' order
> > > #   * Make sure each model has one field with primary_key=True
> > > #   * Make sure each ForeignKey and OneToOneField has `on_delete` set
> to the desired behavior
> > > #   * Remove `managed = False` lines if you wish to allow Django to
> create, modify, and delete the table
> > > # Feel free to rename the models, but don't rename db_table values or
> field names.
> > > from django.db import models
> > >
> > >
> > > ... just having the model declarations should not require a migration.
> Haven't checked that myself.
> > >
> > >
> > > On Mon, Dec 18, 2023 at 5:26 PM Mike Dewhirst 
> wrote:
> > >>
> > >> Those many-to-many relations most certainly can have models and all
> of mine always do.
> > >>
> > >> It is more explicit to do so but more importantly they generally
> carry essential real-world information about the relationship itself.
> > >>
> > >> I haven't looked at django-simple history beyond deciding to roll my
> own but it may well cover m2m tables if you add the models explicitly.
> > >>
> > >>
> > >> --
> > >> (Unsigned mail from my phone)
> > >>
> > >>
> > >>
> > >>  Original message 
> > >> From: Larry Martell 
> > >> Date: 19/12/23 08:18 (GMT+10:00)
> > >> To: django-users@googlegroups.com
> > >> Subject: Re: logging admin accesses
> > >>
> > >> django-simple-history is close to what we need. The one issue I see
> > >> (so far) is that it does not support tables that are created behind
> > >> the scenes by django to handle one to many relations that do not have
> > >> models. Does anyone know how to maintain history on those?
> > >>
> > >> On Mon, Dec 18, 2023 at 2:48 PM Larry Martell <
> larry.mart...@gmail.com> wrote:
> > >> >
> > >> > No, I have not see django-simple-history - thanks for the pointer -
> will check it out.
> > >> >
> > >> > On Fri, Dec 15, 2023 at 9:02 PM Mike Dewhirst <
> mi...@dewhirst.com.au> wrote:
> > >> >>
> > >> >> Just thinking about it again ... you could look at the Admin
> source to see how it is working now and perhaps find a way to include the
> missing info in a pre-save signal.
> > >> >>
> > >> >> Also, I found django-simple-history online but I suppose you have
> seen that already.
> > >> >>
> > >> >> M
> > >> >>
> > >> >> --
> > >> >> (Unsigned mail from my phone)
> > >> >>
> > >> >>
> > >> >>
> > >> >>  Original message 
> > >> >> From: Mike Dewhirst 
> > >> >> Date: 16/12/23 12:38 (GMT+10:00)
> > >> >> To: django-users@googlegroups.com
> > >> >> Subject: Re: logging admin accesses
> > >> >>
> > >> >> You seem to be asking for a full history 'system'.
> > >> >>
> > >> >> I think the Admin history exists to show a bit of history with a
> link to go back to the change form where it happened.
> > >> >>
> > >> >> Full history needs to be specified fairly carefully so it doesn't
> bog the system down. For example, every write costs a performance hit.
> Also, how resilient must it be to cope with database schema changes? How is
> it going to be used in practice? What are the benefits and are they worth
> the effort.
> > >> >>
> > >> >> I have worked through some of this in my current project and
> decided to create separate 'mirror' tables for only the critical
> information and automate data collection for others in a plain text field
> for archival.
> > >> >>
> > >> >> It can be quite open ended and might reward very aggressive
> specification.
> > >> >>
> > >> >> Cheers
> > >> >>
> > >> >> Mike
> > >> >>
> > >> >>
> > >> >>
> > >> >> --
> > >> >> (Unsigned mail from my phone)
> > >> >>
> > >> >>
> > >> >>
> > >> >>  Original message -